This example application demonstrates Oracle's support for the EJB
3.0 specification in JDK 1.4 environment. Because annotations are only available in
JDK 1.5, this will show how to configure many of the feature with an xml-only deployment. It demonstrates:
a sparse ejb-jar.xml file
how to perform field and property injection of ejb refernces
how to perform field and property injection of environment entries
how to declare life cycle callbacks
This demonstration uses the WeatherReport bean to demonstrate a simple stateless
EJB using EJB 3.0 and JDK 1.4.
Stateless Session
Bean example using EJB 3.0 and JDK 1.4
The following is the remote interface for the WeatherReport EJB.
package oracle.ejb30;
public interface WeatherReport {
public String getTemperatorFor(String cityName);
public String getTemperatorFor(String cityName, boolean celcius);
}
The bean class is a plain java class that implements a
business interface:
package oracle.ejb30;
public class WeatherReportBean implements WeatherReport {
protected Map weatherMap;
// both Strings are configured for injection in the ejb-jar.xml file
private String celciusString;
private String fahrenheitString;
private TemperatureConverter temperatureConverter;
. . .
public String getTemperatureFor(String cityName) {
return getTemperatureFor(cityName, false);
}
// this setter is configured for injection in the ejb-jar.xml file
public void setTemperatureConverter(TemperatureConverter converter) {
this.temperatureConverter = converter;
}
}
The following is a callback listener class
for the WeatherReport EJB.
package oracle.ejb30;
public interface LifecycleListener {
public void initializeWeatherData(Object obj) {
. . .
}
}
Note that none of the classes make use of annotations, but instead rely on a simplified deployment descriptor.
Here's the content of the simplified deployment descriptor. It denotes the EJB name, bean class, remote/local
interface(s), session type, injected references, and the callback listener. The remainder is defaulted.
The <field> and <property> tags for reference injection have not been
officially defined in the spec and are subject to change
The values of the <field> and <property> tags correspond to the fields and setters on
the bean that are to be injected
The <lifecycle-callbacks> tag and subtags have not been
officially defined in the spec and are subject to change
If you want to declare the life cycle callbacks on the bean itself, omit the <callback-listener> tag
The supported life cycle tags are <post-construct>, <pre-destroy>, <post-activate>, and <pre-passivate> and those used should be listed as subtags of a single <lifecycle-callbacks> tag per bean.
an example of configuring interceptors in xml can be found in the interceptor How-To
TemperatureConverter shows the minimal amount of xml currently needed to deploy a stateless session bean
Sample
EJB Client
Note
that the
EJB home interface is no longer required, and a bean instance is not created
by invoking the create() method. Instead, we can directly invoke a method on the EJB,
as shown in the following client accessor:
Context context = new InitialContext(); System.out.println("Looking up WeatherReport");
WeatherReport report = (WeatherReport)context.lookup("java:comp/env/ejb/WeatherReport");
System.out.println(weatherReport.getTemperatureFor("Las Vegas"));
System.out.println(weatherReport.getTemperatureFor("Ottawa", true));
Prerequisites
What you need to know
In order to complete the example application, you should
be familiar with the following:
EJB 3.0
For further information on EJB 3.0, see the following
documents on OTN:
etc - all necessary files to package the application
lib - holds the application archives that could be deployed
doc - the How-to document and Javadoc's
javadoc - the javadoc of the different source files
how-to-ejb30-jdk14.html - this How-to page
src - the source of the demo
ejb - contains the sample SLSB code
client - contains application client code
2. Configure the Environment
Ensure
the following environment variables are defined:
%ORACLE_HOME% - The directory where you installed OC4J.
%JAVA_HOME% - The directory where you installed
the JDK
3. Start the Oracle Application Server EJB 3.0 Preview
An Oracle Application Server EJB 3.0 Preview container must
be running. Start it using the following command:
>%ORACLE_HOME%/bin/ejb30 -start
4. Generate, Compile,
and Deploy the Application
Ensure Ant 1.6.2 or above is installed on your machine and configured correctly.
On some operating systems, Ant does not currently
support the use of environment variables. If this is the case for your operating
system, please modify the common.xml file located in the
%HOWTO_HOME% directory.
Edit ant-oracle.properties (in the demodirectory) and ensure
the following properties are set to the correct values,
as indicated below:
oc4j.host: host where
OC4J is running (default localhost)
oc4j.admin.port: RMI port number
(default 23791)
oc4j.admin.user: admin user name (default oc4jadmin)
oc4j.admin.password: admin user password (default welcome)
oc4j.binding.module: website name where deployed web modules
are bound (default http-web-site)
To build the application, type the following command
from the %HOWTO_HOME% directory:
>ant
You should now have the newly created ejb30-jdk14.ear in your
%HOWTO_HOME%/lib directory.
This command would also attempt to deploy the application if the build is
successful. It will first test whether OC4J is running.
Note that you can also deploy the application
separately .
Ensure the %ORACLE_HOME% environment variable is defined,
and from the %HOWTO_HOME%
directory, type the command:
>ant deploy
5. Run
the Application
Run
the sample by providing the following command, including a name as the program
argument:
>ant run
You will the following output from the Client
[java] Looking up WeatherReport
[java] 60.0 degrees Fahrenheit
[java] 53.0 degrees Fahrenheit
[java] 18.0 degrees Fahrenheit
[java] -7.777777777777778 degrees Celsius
[java] No weather data available for LasVegas
Summary
In this document, you should have learned how to:
Develop and deploy a simple stateless session bean using EJB
3.0 and configured entirely using xml
Deploy an execute a simple stateless session bean in
the Oracle Application Server EJB 3.0 Preview running JDK 1.4