简体   繁体   中英

EJB3 Local and Remote interfaces

I understood that Local interface is designed for clients in the same container's JVM instance and remote interface is designed for clients residing outside the EJB container's JVM. How about the web application client which is not reside (or packaged) in the same .ear but reside on the same Java EE server?

Officially @Local annotated beans can only be accessed if they're in the same application. A .war deployed separately from an .ear (or other .war or other .jar EJB) is a different application, even when deployed to the same application server instance.

There's thus no guarantee that the code in your .war can call @Local EJB beans that are defined in the .ear.

However, in practice in nearly all application servers this just works.

There's a request for the EJB 3.2 spec to officially support local cross-application calls: https://download.oracle.com/otndocs/jcp/ejb-3_2-fr-spec

Local interfaces are to be used in communication within the same application . It doesn't necessarily mean JVM .

The point is: even within the same JVM instance, on the same server, two different applications cannot communicate using local interfaces (which means local and no-interface views).

If you have a web component (WAR) as well as a business component (EJB-JAR) which is in the same application, the most intuitive and straightforward solution is to package them in one EAR or in one WAR (since Java EE 6).

You use the remote interfaces, but you make a lookup using JNDI (that's how i'd do it), this way you find the instance of the EJB in the server and can use it in your web application.

Although you still need a jar with the EJB interfaces in the web application project.

EDIT and I agree with JB Nizet, why would you want the WAR outside the EAR?

Remote interfaces can be called across applications, from everywhere within the application server as well as from outside, even from other hosts.

So assume that you need remote ( @Remote ) interface. In EJB 3.1 you can use dependency injection.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM