include::../shared-doc/attributes.adoc[]

= ejb-in-ear: Deployment of an EAR Containing a JSF WAR and EJB JAR
:author: Paul Robinson
:level: Intermediate
:technologies: EJB, EAR

[abstract]
The `ejb-in-ear` quickstart demonstrates how to deploy an EAR archive that contains a *JSF* WAR and an EJB JAR.

:standalone-server-type: default
:archiveType: ear

//*************************************************
// Shared CD and Product Release content
//*************************************************

== What is it?

The `ejb-in-ear` quickstart demonstrates the deployment of an EAR artifact to {productNameFull}. The EAR contains a JSF WAR and an EJB JAR.

This example consists of the following Maven projects, each with a shared parent.

[cols="30%,70%",options="headers"]
|===
|Project |Description

| `ejb`
| This project contains the EJB code and can be built independently to produce the JAR archive.

| `web`
| This project contains the JSF pages and the managed bean.

| `ear`
| This project builds the EAR artifact and pulls in the EJB and web artifacts.
|===

The root `pom.xml` builds each of the subprojects in the above order and deploys the EAR archive to the server.

The example follows the common "Hello World" pattern, using the following workflow.

. A JSF page asks for a user name.
. On clicking *Greet*, the name is sent to a managed bean named `Greeter`.
. On setting the name, the `Greeter` invokes the `GreeterEJB`, which was injected to the managed bean. Notice the field is annotated with `@EJB`.
. The response from invoking the `GreeterEJB` is stored in a field (message) of the managed bean.
. The managed bean is annotated as `@SessionScoped`, so the same managed bean instance is used for the entire session. This ensures that the message is available when the page reloads and is displayed to the user.

//*************************************************
// Product Release content only
//*************************************************

ifndef::EAPCDRelease[]

// System Requirements
include::../shared-doc/system-requirements.adoc[leveloffset=+1]
// Use of {jbossHomeName}
include::../shared-doc/use-of-jboss-home-name.adoc[leveloffset=+1]
// Start the {productName} Standalone Server
include::../shared-doc/start-the-standalone-server.adoc[leveloffset=+1]
// Build and Deploy the Quickstart
include::../shared-doc/build-and-deploy-the-quickstart.adoc[leveloffset=+1]

== Access the Application

The application will be running at the following URL http://localhost:8080/{artifactId}/.

Enter a name in the input field and click the *Greet* button to see the response.

// Undeploy the Quickstart
include::../shared-doc/undeploy-the-quickstart.adoc[leveloffset=+1]
// Run the Quickstart in Red Hat Developer Studio or Eclipse
include::../shared-doc/run-the-quickstart-in-jboss-developer-studio.adoc[leveloffset=+1]

// Additional Red Hat Developer Studio instructions
For this quickstart, follow the special instructions to build link:{useEclipseDeployEARDocUrl}[Quickstarts Containing an EAR].

. Right-click on the *{artifactId}-ear* subproject, and choose *Run As* -> *Run on Server*.
. Choose the server and click *Finish*.
. This starts the server, deploys the application, and opens a browser window that accesses the running application.
. To undeploy the project, right-click on the *{artifactId}-ear* project and choose *Run As* -> *Maven build*. Enter `wildfly:undeploy` for the *Goals* and click *Run*.

// Debug the Application
include::../shared-doc/debug-the-application.adoc[leveloffset=+1]

endif::[]

//*************************************************
// CD Release content only
//*************************************************

ifdef::EAPCDRelease[]

// Getting Started with OpenShift
include::../shared-doc/cd-openshift-getting-started.adoc[leveloffset=+1]
//Prepare OpenShift for Quickstart Deployment
include::../shared-doc/cd-create-project.adoc[leveloffset=+1]
// Import the Latest {xpaasproduct-shortname} Image Streams and Templates
include::../shared-doc/cd-import-imagestreams-templates.adoc[leveloffset=+1]
// Deploy the {ProductShortName} Source-to-Image (S2I) Quickstart to OpenShift
include::../shared-doc/cd-deploy-project.adoc[leveloffset=+1]
// OpenShift Post Deployment Tasks: This is not currently needed.
// include::../shared-doc/cd-post-deployment-tasks.adoc[leveloffset=+1]

endif::[]
