On Today at 9:16am, WW=>Wes Wannemacher <[email protected]> wrote:
WW> Sorry Robin, this is on my to-do list, but it's not something I'm
WW> working on right this second. One thing that is holding me up is the
WW> lack of knowledge of JEE. Is there a standard mechanism for creating
WW> instances of EJB-hydrated objects?
WW>
WW> [..snip..]
WW>
Hi Wes,
I don't know much of the details about the JEE spec, however, I can share
my implementation with you. The code is not in production yet, so caveat
emptor (it works for us, for now in development).
I use glassfish as my app server. To expose local EJB interfaces within
our entire application, I use an EJBInvokerServlet (uses the @EJB and
@EJBs annotations). The listing is as follows (took out package and import
statements and anonymized):
@EJBs(
value = {
@EJB(beanInterface = Local1.class, name = "ejb/local1"),
@EJB(beanInterface = Local2.class, name = "ejb/local2"),
}
)
/**
* Used to make local interfaces of listed EJBs available within the whole
* web application.
*/
public class EJBInvokerServlet extends HttpServlet {
}
The other way to inject beans is by specifying <ejb-local-ref> inside web.xml.
<ejb-local-ref>
<ejb-ref-name>Local1Bean</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local>Local1</local>
</ejb-local-ref>
I prefer the Servlet approach as its simpler.
Wherever we need the EJBs to be automagically injected (the container does
its part because of EJBInvokerServlet), we then use the @Resource
annotation, e.g., to inject the Local1 interface, I would use:
@Resource(mappedName = "ejb/local1")
private Local1 local1;
Hope that helps.
--
Haroon Rafique
<[email protected]>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]