Red Hat

Developer Materials

inter-app: Communicate Between Two Applications Using EJB and CDI

  • Author:
  • Contributors: Sande Gilda
  • Published: Mar 05, 2015
  • Level: Advanced
  • Technologies:EJB, CDI, JSF
  • Target Product:JBoss EAP

What is it?

The inter-app quickstart shows you how to easily communicate between two modular deployments to Red Hat JBoss Enterprise Application Platform. Two WARs, with a shared API JAR, are deployed to the application server. EJB is used to provide inter-application communication, with EJB beans alised to CDI beans, making the inter-application communication transparent to clients of the bean.

CDI only provides intra-applicaion injection (i.e within a top level deployment, EAR, WAR, JAR etc). This improves performance of the application server, as to satisfy an injection point all possible candidates have to be scanned / analyzed. If inter-app injection was supported by CDI, performance would scale according to the number of deployments you have (the more deployments in the running system, the slower the deployment). Java EE injection uses unique JNDI names for the wiring, so each injection point is O(1). The approach shown here combines the two approaches such that you limit the name based wiring to one location in your code, and the main consumers of components can use CDI injection to reference these name wired components. For the name approach to work though, you still need to publish instances, and EJB singletons allow you to do that with just one extra annotation.

In all, the project has three modules:

  • jboss-inter-app-shared.jar - this module contains the interfaces which define the contract between the beans exposed by the WARs. It is deployed as an EJB JAR module because Eclipse Web Tools Platform can not deploy simple JARs.
  • jboss-inter-app-A.war - the first WAR, whiches exposes an EJB singleton, and a simple UI that allows you to read the value set on the bean in appB
  • jboss-inter-app-B.war - the second WAR, whiches exposes an EJB singleton, and a simple UI that allows you to read the value set on the bean in appA

System requirements

The application this project produces is designed to be run on Red Hat JBoss Enterprise Application Platform 6.1 or later.

All you need to build this project is Java 6.0 (Java SDK 1.6) or later, Maven 3.0 or later.

Configure Maven

If you have not yet done so, you must Configure Maven before testing the quickstarts.

Use of EAP_HOME

In the following instructions, replace EAP_HOME with the actual path to your JBoss EAP 6 installation. The installation path is described in detail here: Use of EAP_HOME and JBOSS_HOME Variables.

Start the JBoss EAP Server

  1. Open a command prompt and navigate to the root of the JBoss EAP directory.
  2. The following shows the command line to start the server:

     For Linux:   EAP_HOME/bin/standalone.sh
     For Windows: EAP_HOME\bin\standalone.bat
    

Build and Deploy the Quickstart

NOTE: The following build command assumes you have configured your Maven user settings. If you have not, you must include Maven setting arguments on the command line. See Build and Deploy the Quickstarts for complete instructions and additional options.

  1. Make sure you have started the JBoss EAP server as described above.
  2. Open a command prompt and navigate to the root directory of this quickstart.
  3. Type this command to build and deploy the archive:

     mvn clean install jboss-as:deploy
    
  4. This will deploy shared/target/jboss-inter-app-shared.jar, appA/target/jboss-inter-app-appA.war and appB/target/jboss-inter-app-appB.war to the running instance of the server.

Access the application

Access the running application in a browser at the following URLs:

You are presented with a form that allows you to set the value on the bean in the other application, as well as display of the value on this application's bean. Enter a new value and press "Update and Send!" to update the value on the other application. Do the same on the other application, and hit the button again on the first application. You should see the values shared between the applications.

Undeploy the Archive

  1. Make sure you have started the JBoss EAP server as described above.
  2. Open a command prompt and navigate to the root directory of this quickstart.
  3. When you are finished testing, type this command to undeploy the archive:

     mvn package jboss-as:undeploy
    

Run the Quickstart in Red Hat JBoss Developer Studio or Eclipse

You can also start the server and deploy the quickstarts or run the Arquillian tests from Eclipse using JBoss tools. For general information about how to import a quickstart, add a JBoss EAP server, and build and deploy a quickstart, see Use JBoss Developer Studio or Eclipse to Run the Quickstarts

This quickstart consists of multiple projects containing interdependencies on each other, so it deploys and runs differently in JBoss Developer Studio than the other quickstarts.

  1. In the Servers tab, right-click on the JBoss EAP server and choose Start.
  2. Deploy the projects in one of the following ways.
    • Drag and Drop mode: Click to multi-select the jboss-inter-app-shared, jboss-inter-app-appA, and jboss-inter-app-appB projects, then drag and drop them on the running JBoss EAP server. This deploys the projects to the server without opening the browser.
    • Batch mode: In the Servers tab, right-click on the server and choose Add and Remove. If the jboss-inter-app-shared, jboss-inter-app-appA, and jboss-inter-app-appB projects are the only projects in the list, click Add All. Otherwise, use multi-select to select them and click Add. Then click Finish.
  3. Right-click on the jboss-inter-app-appA project and choose Run As –> Run on Server. A browser window appears that accesses the running appA application.
  4. Right-click on the jboss-inter-app-appB project and choose Run As –> Run on Server. A browser window appears that accesses the running appB application.

Debug the Application

If you want to debug the source code of any library in the project, run the following command to pull the source into your local repository. The IDE should then detect it.

mvn dependency:sources

Recent Changelog

  • Mar 5, 2015(Sande Gilda):Bz1178821 Per Max add batch mode JBDS instructions for inter app quickstart
  • Mar 5, 2015(Sande Gilda):Bz1178821 Modify JBDS instructions for inter app quickstart
  • Mar 4, 2015(Sande Gilda):Bz1198744 Update README JBDS instructions to be more clear
  • Feb 27, 2015(Sande Gilda):Bz1178821 Fix typo in inter app quickstart project names
  • Feb 3, 2015(Sande Gilda):Update the quickstart README files to point to the new shared EAP_HOME and Build and Deploy instructions
  • Jan 29, 2015(Sande Gilda):Fix inter app broken by qstool fixes
  • Jan 15, 2015(Sande Gilda):Bz1178821 Fix inter app runtime and update instructions
  • Dec 18, 2014(Sande Gilda):Bz1092026 Update README Target Product metadata value remove Product Versions metadata and make sure the full product name is near the top of the files
  • Nov 25, 2014(Sande Gilda):Bz1167700 Remove template instruction from inter app README file
  • Nov 6, 2014(Sande Gilda):Bz1160776 prepare for google search and fix typos
Avg:
Your Rating:
×