The Java EE 6 Tutorial, Volume I

Using Enterprise Beans in Clients

The client of an enterprise bean obtains a reference to an instance of an enterprise bean either through dependency injection, using Java programming language annotations, or JNDI lookup, using the Java Naming and Directory Interface syntax to find the enterprise bean instance.

Dependency injection is the simplest way of obtaining an enterprise bean reference. Clients that run within a Java EE server-managed environment, like JSF web applications, JAX-RS web services, other enterprise beans, or Java EE application clients support dependency injection using the javax.ejb.EJB annotation.

Applications that run outside a Java EE server-managed environment, such as Java SE applications, must perform an explicit lookup. JNDI supports a global syntax for identifying Java EE components to simplify this explicit lookup.

Portable JNDI Syntax

There are three JNDI namespaces used for portable JNDI lookups: java:global, java:module, and java:app.

The java:global JNDI namespace is the portable way of finding remote enterprise beans using JNDI lookups. JNDI addresses are of the following form:


java:global[/application name]/module name/enterprise bean name[/interface name]

Application name and module name default to the name of the application and module minus the file extension. Application names are only required if the application is packaged within an EAR. The interface name is only required if the enterprise bean implements more than one business interface.

The java:module namespace is used to lookup local enterprise beans within the same module. JNDI addresses using the java:module namespace are of the following form:


java:module/enterprise bean name/[interface name]

The interface name is only required if the enterprise bean implements more than one business interface.

The java:app namespace is used to lookup local enterprise beans packaged within the same application. That is, the enterprise bean is packaged within an EAR file containing multiple Java EE modules. JNDI addresses using the java:app namespace are of the following form:


java:app[/module name]/enterprise bean name[/interface name]

The module name is optional. The interface name is only required if the enterprise bean implements more than one business interface.


Example 14–1 JNDI Address of an Enterprise Bean Packaged Within a WAR File

If an enterprise bean, MyBean, is packaged in within the web application archive myApp.war, the module name is myApp. The portable JNDI name is:


java:module/MyBean

An equivalent JNDI name using the java:global namespace is:


java:global/myApp/MyBean