Author: Wolf-Dieter Fink
Level: Intermediate
Technologies: EJB, EAR, AppClient
Summary: The app-client
quickstart demonstrates how to code and package a client app and use the WildFly client container to start the client Main program.
Target Product: WildFly
Source: https://github.com/wildfly/quickstart/
The app-client
quickstart demonstrates how to use the WildFly client container to start the client Main
program and provide Dependency Injections (DI) for client applications in WildFly Application Server. It also shows you how to use Maven to package the application according to the JavaEE specification.
This example consists of the following Maven projects, each with a shared parent:
Sub-project | Description |
---|---|
ejb | An application that can be called by the client . |
ear | The EAR packaging contains the server and client side. |
client-simple | A simple client application for running in the application-client container to show the injection |
The root pom.xml
file builds each of the subprojects in the appropriate order.
The application this project produces is designed to be run on WildFly Application Server 11 or later.
All you need to build this project is Java 8.0 (Java SDK 1.8) or later and Maven 3.3.1 or later. See Configure Maven for WildFly 11 to make sure you are configured correctly for testing the quickstarts.
In the following instructions, replace WILDFLY_HOME
with the actual path to your WildFly installation. The installation path is described in detail here: Use of WILDFLY_HOME and JBOSS_HOME Variables.
If the client and server are run on different hosts, you must add the following users to the WildFly server side application. Be sure to use the names and passwords specified in the table as they are required to run this example.
UserName | Realm | Password | Roles |
---|---|---|---|
admin | ManagementRealm | admin-123 | leave blank for none |
quickuser | ApplicationRealm | quick-123 | leave blank for none |
To add the users, open a command prompt and type the following commands:
For Linux:
WILDFLY_HOME/bin/add-user.sh -u admin -p admin-123
WILDFLY_HOME/bin/add-user.sh -a -u quickuser -p quick-123
For Windows:
WILDFLY_HOME\bin\add-user.bat -u admin -p admin-123
WILDFLY_HOME\bin\add-user.bat -a -u quickuser -p quick-123
If you prefer, you can use the add-user utility interactively. For an example of how to use the add-user utility, see the instructions located here: Add an Application User.
For Linux: WILDFLY_HOME/bin/standalone.sh
For Windows: WILDFLY_HOME\bin\standalone.bat
mvn clean install wildfly:deploy
This example shows how to invoke an EJB from a remote standalone application on the same machine. Both the client and server are on the same machine, so the defaults are sufficient and no authentication is necessary.
WILDFLY_HOME
with the path to your WildFly installation.
For Linux: WILDFLY_HOME/bin/appclient.sh ear/target/app-client.ear#simpleClient.jar Hello from command line
For Windows: WILDFLY_HOME\bin\appclient.bat ear\target\app-client.ear#simpleClient.jar Hello from command line
Review the result. The client outputs the following information provided by the server application:
[org.jboss.as.quickstarts.appclient.acc.client.Main] (Thread-51) Main started with arguments
[org.jboss.as.quickstarts.appclient.acc.client.Main] (Thread-51) [Hello, from, command, line]
[org.jboss.as.quickstarts.appclient.acc.client.Main] (Thread-##) Hello from StatelessSessionBean@myhost
This output shows that the ServerApplication
is called at the jboss.node myhost
. The application client connected automatically a server on the same machine.
Review the server log files to see the bean invocations on the server.
ClientContext is here = {Client =dev84, jboss.source-address=localhost/127.0.0.1:45315}
This example shows how to invoke an EJB from a remote standalone Java EE application on a different machine. In this case, the client needs to define a properties file to define properties to connect and authenticate to the server. The properties file is passed on the command line using the --ejb-client-properties
argument.
MACHINE_1_IP_ADDRESS
with the IP address of this machine. These arguments make the server accessible to the network.
For Linux: WILDFLY_HOME/bin/standalone.sh -b MACHINE_1_IP_ADDRESS -bmanagement MACHINE_1_IP_ADDRESS
For Windows: WILDFLY_HOME\bin\standalone.bat -b MACHINE_1_IP_ADDRESS -bmanagement MACHINE_1_IP_ADDRESS
app-client
quickstart to this machine.jboss-ejb-client.properties
file. This file can be located anywhere in the file system, but for ease of demonstration, we create it in the root directory of this quickstart. Add the following content, replacing MACHINE_1_IP_ADDRESS
with the IP address of Machine_1
.
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=MACHINE_1_IP_ADDRESS
remote.connection.default.port=8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=quickuser
remote.connection.default.password=quick-123
Open a command prompt and navigate to the root directory of the quickstart.
app-client
quickstart to the remote machine using the following command:
mvn clean install wildfly:deploy -Dwildfly.hostname=MACHINE_1_IP_ADDRESS [-Dwildfly.port=9099] -Dwildfly.username=admin -Dwildfly.password=admin-123
Machine_1
as described above.app-client
application:
For Linux: WILDFLY_HOME/bin/appclient.sh --ejb-client-properties=ejb-client.properties ear/target/app-client.ear#simpleClient.jar Hello from command line
For Windows: WILDFLY_HOME\bin\appclient.bat --ejb-client-properties=ejb-client.properties ear\target\app-client.ear#simpleClient.jar Hello from command line
Review the result. The client outputs the following information, which was provided by the application:
[org.jboss.as.quickstarts.appclient.acc.client.Main] (Thread-51) Main started with arguments
[org.jboss.as.quickstarts.appclient.acc.client.Main] (Thread-51) [Hello, from, command, line]
[org.jboss.as.quickstarts.appclient.acc.client.Main] (Thread-##) Hello from StatelessSessionBean@theOtherHOST
This output shows that the ServerApplication
is called at the jboss.node theOtherHOST
.
Review the server log files on the remote machine to see the bean invocations on the server.
ClientContext is here = {Client =dev84, jboss.source-address=localhost/127.0.0.1:45315}
As shown above, the connected server(s) can be configured using the properties file. It is also possible to connect multiple servers or a cluster using the same jboss-ejb-client.properties
file.
Follow these instructions if you are testing the quickstart on the same machine.
mvn wildfly:undeploy
Follow these instructions if you are testing the quickstart on a different machine.
Machine_1
, where the quickstart is deployed as described above.Machine_2
, and navigate to the root directory of this quickstart.Machine_1
.
mvn wildfly:undeploy -Dwildfly.hostname=MACHINE_1_IP_ADDRESS [-Dwildfly.port=9099] -Dwildfly.username=admin -Dwildfly.password=admin-123