Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Hello World application
with EJB
Hello World application
z
Simple server that prints the string “Hello, world !”
z
Implemented using a stateless session bean
2
1
Steps to be followed
1. Component development
* Describe Remote interface
* Describe Home interface
* Implement the Bean class
2. Write deployment descriptor(s)
3. Package in an archive (jar file) all EJB files
4. Deployment into the container
5. Implement the client application
3
Remote interface : HelloWorld.java
z
z
Corresponds to the interface description
Gives the list of the methods the client can call
import java.rmi.*;
import javax.ejb.*;
public interface HelloWorld extends EJBObject {
public String sayHello() throws RemoteException;
}
4
2
Home interface : HelloWorldHome.java
z
z
z
Provides methods for the client to create, find or remove an EJB.
To use an EJB, a client must first get a reference to its Home
interface using JNDI (Java Naming and Directory Interface).
The create() method returns a reference to the EJB remote
interface (HelloWorld).
import java.rmi.RemoteException;
import java.ejb.CreateException;
import javax.ejb.EJBHome ;
public interface HelloWorldHome extends EJBHome {
public HelloWorld create() throws
CreateException, RemoteException;
}
5
Bean implementation class :
HelloWorldBean.java
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class HelloWorldBean implements SessionBean {
// Methods of Remote interface
public String sayHello() {
return "Hello, world !";
}
// Methods of Home interface
public void ejbCreate() {}
6
3
Bean implementation class :
HelloBean.java (cont.)
// Methods of SessionBean interface
protected SessionContext ctx;
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
}
7
Deployment Descriptor : ejb-jar.xml
<ejb-jar>
<description>HelloWorld deployment descriptor</description>
<display-name>HelloWorld</display-name>
<enterprise-beans>
<session>
<description> HelloWorld deployment descriptor
</description>
<display-name>HelloWorld</display-name>
<ejb-name>HelloWorld</ejb-name>
<home>HelloWorldHome</home>
<remote>HelloWorld</remote>
<ejb-class>HelloWorldBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
8
4
Deployment Descriptor : ejb-jar.xml (cont.)
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>HelloWorld</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
9
Additional Deployment Descriptor
(specific to Jonas) : jonas-ejb-jar.xml
<jonas-ejb-jar>
<jonas-session>
<ejb-name>HelloWorld</ejb-name>
<jndi-name>myHelloWorld</jndi-name>
</jonas-session>
</jonas-ejb-jar>
10
5
Packaging and deploying the EJB
z
z
An EJB must be packaged in a “.jar” file containing
ª
Class files
ª
Deployment descriptors
In order to be used, an EJB must first be deployed
ª
Copy the jar file in a specific directory for the container to get it from
11
Client : HelloClient.java
import
import
import
import
import
java.util.Properties;
javax.naming.InitialContext;
javax.naming.Context;
javax.transaction.UserTransaction;
javax.rmi.PortableRemoteObject;
public class HelloClient {
public static void main(String args[]) {
...
12
6
Client : HelloClient.java (cont.)
try {
Context initialContext = new InitialContext();
Object objref = initialContext.lookup("myHelloWorld");
HelloWorldHome home
=
(HelloWorldHome)PortableRemoteObject.narrow(objref,
HelloWorldHome.class);
HelloWorld myHelloWorld = home.create();
String message = myHelloWorld.sayHello();
System.out.println(message);
} catch (Exception e) {
System.err.println(" Erreur : " + e);
System.exit(2);
}
}
}
13
7