Java EE Application Client deployment plan
Java EE application client modules run in client container and also have access to server environment. Usually, Java EE client applications are created to administer the running enterprise applications in the server. Client modules run in a separate JVM and connect to enterprise application resources but have access to all the application resources in standard Java EE way.
The Java EE client module requires application-client.xml as deployment descriptor and geronimo-application-client.xml as deployment plan. In the application-client.xml
, the required ejb names, security role names, resources names etc., are declared while in geronimo-application-client.xml
, the declared names are mapped to actual resources in server.
The following is the deployment descriptor of the Java EE application client module that looks up an ejb and calls a method on it. The ejb converts the Indian Rupess (Rs.) into American Dollars ($). The client sends a double value which is Indian Rupees to ejb. The ejb returns equivalent American Dollars as double value.
<?xml version="1.0" encoding="UTF-8"?> <application-client xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application-client_5.xsd" version="5"> <ejb-ref> <ejb-ref-name>ejb/Converter</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <remote>examples.appclient.Converter</remote> </ejb-ref> </application-client>
The default namespace of the above XML document is http://java.sun.com/xml/ns/javaee
. The XML elements that do not have a namespace prefix belong to the default namespace. Hence, in the above XML document, all the XML elements belong to the default namespace.
The application client declares the ejb name ejb/Converter
through <ejb-ref>>
.. </ejb-ref>
elements.
Following is the corresponding deployment plan of the Java EE client module.
<?xml version="1.0" encoding="UTF-8"?> <application-client xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0" xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2" xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:security="http://geronimo.apache.org/xml/ns/security-2.0" xmlns:connector="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"> <sys:client-environment> <sys:moduleId> <sys:groupId>Converter</sys:groupId> <sys:artifactId>Converter-app-client</sys:artifactId> <sys:version>3.0</sys:version> <sys:type>jar</sys:type> </sys:moduleId> </sys:client-environment> <sys:server-environment> <sys:moduleId> <sys:groupId>Converter</sys:groupId> <sys:artifactId>Converter-app-client-server</sys:artifactId> <sys:version>3.0</sys:version> <sys:type>jar</sys:type> </sys:moduleId> </sys:server-environment> <ejb-ref> <ref-name>ejb/Converter</ref-name> <naming:pattern> <naming:groupId>Converter</naming:groupId> <naming:artifactId>ConverterEAR</naming:artifactId> <naming:version>5.0</naming:version> <naming:module>ConverterEJB.jar</naming:module> <naming:name>ConverterBean</naming:name> </naming:pattern> </ejb-ref> </application-client>
The default namespace of the above XML document is http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0
. The XML elements that do not have a namespace prefix belong to the default namespace. Hence, in the above XML document, <application-client>
, <ejb-ref>
and <ref-name>
elements belong to the default namespace.
Observe the various xml elements and schemas to which they belong. The plan defines the client environment and the server environment configurations. The server environment configuration runs in the server where as the client environment configuration runs in the client JVM. In the above plan, the ejb name ejb/Converter
is mapped to ConverterBean
ejb in the ConverterEAR
.
The below is the client code that looks up the ejb and calls the method on it.
package examples.appclient.client; import javax.naming.Context; import javax.naming.InitialContext; import examples.appclient.Converter; public class ConverterClient { //The remote interface of the ConverterBean packaged with the //Java EE client jar private static Converter converter; private static double amount = 50; public static void main(String[] args) { amount = Double.parseDouble(args[0]); doConversion(); } public static void doConversion() { try { Context context = new InitialContext(); converter = (Converter) context.lookup("java:comp/env/ejb/Converter"); double dollars = converter.getDollars(amount); System.out.println("Rs " + amount + " is " + dollars + " Dollars."); System.exit(0); } catch (Exception ex) { System.err.println("Caught an unexpected exception!"); ex.printStackTrace(); } } }
The META-INF/MANIFEST.MF
file should contain the following entry for the client to run.
Manifest-Version: 1.0 Main-Class: examples.appclient.client.ConverterClient
Do not forget to insert a new line after the Main-Class: entry in the MANIFEST.MF file.
The Java EE client is created by packaging META-INF/application-client.xml
, META-INF/geronimo-application-client.xml
, ConverterClient.class
, Converter.class
and META-INF/MANIFEST.MF
files into a jar file.
The following command illustrates the packaging.
C:\temp\ConverterEJBClient>jar -cvf ConverterEJBClient.jar *
added manifest
adding: examples/(in = 0) (out= 0)(stored 0%)
adding: examples/appclient/(in = 0) (out= 0)(stored 0%)
adding: examples/appclient/client/(in = 0) (out= 0)(stored 0%)
adding: examples/appclient/client/ConverterClient.class(in = 1716) (out= 936)(deflated 45%)
adding: examples/appclient/Converter.class(in = 146) (out= 131)(deflated 10%)
adding: META-INF/application-client.xml(in = 510) (out= 252)(deflated 50%)
adding: META-INF/geronimo-application-client.xml(in = 2049) (out= 474)(deflated 76%)
ignoring entry META-INF/MANIFEST.MF
The following commands illustrates the deployment and running of the client module.
C:\\Geronimo-2.1\bin>deploy.bat --user system --password manager deploy C:\temp\ConverterEJBClient.jar
Using GERONIMO_BASE: C:\Geronimo-2.1
Using GERONIMO_HOME: C:\Geronimo-2.1
Using GERONIMO_TMPDIR: var\temp
Using JRE_HOME: C:\JDK\jre
Deployed Converter/Converter-app-client-server/3.0/jar
C:\Geronimo-2.1\bin>java -Djava.endorsed.dirs="C:\Geronimo-2.1\lib\endorsed" -jar
C:\Geronimo-2.1\bin\client.jar Converter/Converter-app-client/3.0/jar 4000
Rs 4000.0 is 100.0 Dollars.