Heh. Looks like I've been reading a slightly older version of the spec. So yes, we don't need to look for META-INF/ejb-jar.xml in jars in wars.
Jarek On Mon, Sep 20, 2010 at 12:29 PM, Gurkan Erdogdu <[email protected]> wrote: > Hi Jarek, > > I am look at the same section, but I do not see META-INF/ejb-jar.xml, ? Am I > looking a wrong place? > > Section 20.4 of the final EJB 3.1 specification said that > > "An enterprise bean class with a component-defining annotation defines an > enterprise bean component > when packaged within the WEB-INF/classes directory or in a .jar file within > WEB-INF/lib. An > enterprise bean can also be defined via WEB-INF/ejb-jar.xml." > > A .jar file in WEB-INF/lib that contains enterprise beans is not considered an > independent Java EE > “module” in the way that a .war file, stand-alone ejb-jar file, or an > .ear-level > ejb-jar file is > considered a module. Such a .jar does not define its own module name or its > own > namespace for > ejb-names, environment dependencies, persistence units, etc. All such > namespaces > are scoped to the > enclosing .war file. In that sense, the packaging of enterprise bean classes > in > a WEB-INF/lib .jar is > merely a convenience. It is semantically equivalent to packaging the classes > within > WEB-INF/classes." > > > > > > ----- Original Message ---- > From: Jarek Gawor <[email protected]> > To: [email protected] > Sent: Mon, September 20, 2010 7:07:05 PM > Subject: Re: What kind of module is a war with ejbs inside? > > The spec says otherwise (section 20.4): > > "An enterprise bean class with a component-defining annotation defines > an enterprise bean component when packaged within the WEB-INF/classes > directory or in a .jar file within WEB-INF/lib. An enterprise bean can > also be defined via WEB-INF/ejb-jar.xml or the META-INF/ejb-jar.xml > file of a .jar file within WEB-INF/lib." > > Jarek > > On Mon, Sep 20, 2010 at 11:32 AM, Gurkan Erdogdu > <[email protected]> wrote: >>>>>First of all, as according to the spec the ejb-jar.xml can be >>>>>placed in WEB-INF/ejb-jar.xml or within any jar file in WEB-INF/lib. >> In Web Profile, ejb-jar.xml is only put into the WEB-INF/. Others ejb-jar.xml >> files inside >> WEB-INF/lib jars are not scanned or will be ignored. >> >> Look at , http://docs.sun.com/app/docs/doc/820-7627/bnblr?l=en&n=1&a=view >> Packaging Enterprise Beans in WAR Modules section. >> >> """""""""""""""""""""""""" >> >> WAR modules that contain enterprise beans do not require an ejb-jar.xml >> deployment descriptor. If the application uses ejb-jar.xml, it must be >> located >> in the WAR module's WEB-INF directory. >> JAR files that contain enterprise bean classes packaged within a WAR module > are >> not considered EJB JAR files, even if the bundled JAR file conforms to the >> format of an EJB JAR file. The enterprise beans contained within the JAR >> file >> are semantically equivalent to enterprise beans located in the WAR module's >> WEB-INF/classes directory, and the environment namespace of all the >> enterprise >> beans are scoped to the WAR module. >> """""""""""""""""" >> >> ----- Original Message ---- >> From: Jarek Gawor <[email protected]> >> To: [email protected] >> Sent: Mon, September 20, 2010 6:07:18 PM >> Subject: Re: What kind of module is a war with ejbs inside? >> >> I ran into additional problems with ejbs packaged in a war file. >> Especially, when ejbs were packaged within some jar file in a war >> file. First of all, as according to the spec the ejb-jar.xml can be >> placed in WEB-INF/ejb-jar.xml or within any jar file in WEB-INF/lib. >> So we really might need to scan all jars for the ejb descriptor. Also, >> any ejbs within any of the jars are considered part of the same 'ejb >> module'. And right now the deployer wants to deploy each jar with ejbs >> as a separate ejb module. I opened OPENEJB-1362 to track these >> problems. >> >> I have some local code that addresses these problems which I'm testing >> right now. It basically gets rid off the preferEjb option alltogether, >> creates a WebModule for any war file, and always adds a single >> EjbModule for all ejbs in a war file (if detected) >> >> Let me know if you see some potential problems with this. >> >> Thanks, >> Jarek >> >> On Mon, Aug 9, 2010 at 5:28 PM, David Blevins <[email protected]> wrote: >>> >>> On Aug 7, 2010, at 10:41 PM, David Jencks wrote: >>> >>>> I've been working on geronimo's ejb lite support. The way geronimo is set > up >>>>we tell DeploymentLoader to look in META-INF or WEB-INF for ejb-jar.xml, and >>>>expect openejb to decide that any module that it finds ejbs in, whether by >>>>finding an ejb-jar.xml or by finding annotated classes, is an ejb module. >>>> >>>> Right now openejb is deciding that a module is an ejb module if it has an >>>>ejb-jar.xml, but a web module if it has a web.xml but no ejb-jar.xml, even >>>>if >>>>there are annotated ejbs. >>>> >>>> I don't understand why this would be appropriate for openejb, so what I'm >>>>provisionally implementing is: >>>> >>>> - provide a flag in a constructor, preferEjb >>>> - if its true, check for ejb-jar.xml and annotated ejbs before looking for >>>>web.xml, and if found decide the module is an ejb module >>>> - if its is false, the current behavior, where we check for ejb-jar.xml, > then >>>>web.xml, then annotated ejbs. >>>> >>>> If the preferEjb=true behavior would be more appropriate for openejb by >>>itself, >>>>let me know and I'll adjust the code appropriately. >>> >>> Using the discoverModuleType is probably not appropriate for this setup. In >>>fact using the DeploymentLoader at all probably doesn't fit. The rules more > or >>>less allow us to skip that: >>> >>> 1. if the web.xml metadata complete flag is true and there is no >>>WEB-INF/ejb-jar.xml == not a web module with ejbs >>> 2. else, we must be prepared to deploy ejbs >>> >>> Probably what we need to do is create an EjbModule object to mirror every >>>WebModule (or the equivalent Geronimo object) if #1 is not the case. >>> >>> The critical part will be setting the AbstractFinder object to be the same > one >>>as the WebModule finder and filling in the altDD information. It's actually >>>pretty close to the way we do things now with creating an OpenEJB EjbModule >>>object to match the Geronimo EjbModule object. >>> >>> Thoughts? >>> >>> -David >>> >>> >> >> >> >> > > > >
