Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do I need to use @Remote when I want to expose an EJB to a different application on same app server?

I have a @Stateless @Local Bean successfully deployed in an ear. I can see the new EJB 3.1 standard global JNDI name when I browse the JNDI tree. (java:global/product/product-ejb/ProductManagement)

I want to use this EJB in a different application on the same app server. Do I need to add a remote interface for this EJB?

like image 514
Kyle Renfro Avatar asked Oct 19 '10 14:10

Kyle Renfro


People also ask

What is @remote in EJB?

javax.ejb Declares the remote business interface(s) for a session bean. The Remote annotation is applied to the session bean class or remote business interface to designate a remote business interface of the bean. When used on an interface, designates that interface as a remote business interface.

Which annotation is required for remote view EJB?

Your EJB must now define all its business interfaces using @Local annotation so it's additional work for you. Not only you implement an interface but you need to remember to declare that your EJB is exposing it.

What is the difference between local and remote interface in EJB?

Using the remote and local interfaces appropriately means that clients can access EJB components efficiently. That is, local clients use the local interface with pass-by-reference semantics, while remote clients use the remote interface with pass-by-value semantics.


1 Answers

Inter-application access to the local client view is not required by the specification but might be optionally supported by your container. If you want your application to be portable, you shouldn't rely on it and use a Remote interface (a decent container should optimize calls inside a same JVM anyway). From the EJB 3.1 specification:

3.2.2 Local Clients

Session beans may have local clients. A local client is a client that is collocated in the same JVM with the session bean that provides the local client view and which may be tightly coupled to the bean. A local client of a session bean may be another enterprise bean or a web component.

Access to an enterprise bean through the local client view requires the collocation in the same JVM of both the local client and the enterprise bean that provides the local client view. The local client view therefore does not provide the location transparency provided by the remote client view.

Access to an enterprise bean through the local client view is only required to be supported for local clients packaged within the same application as the enterprise bean that provides the local client view. Compliant implementations of this specification may optionally support access to the local client view of an enterprise bean from a local client packaged in a different application. The configuration requirements for inter-application access to the local client view are vendor-specific and are outside the scope of this specification. Applications relying on inter-application access to the local client view are non-portable.

...

References

  • EJB 3.1 Specification
    • Section 3.2.2 "Local Clients"
like image 98
Pascal Thivent Avatar answered Sep 18 '22 03:09

Pascal Thivent