David Blevins wrote:
> Seems like I'm walking in mid-conversation, but I hope I can add some
> details.
>
> On Aug 11, 2006, at 8:30 PM, Aaron Mulder wrote:
>
>> On 8/11/06, Jeff Genender <[EMAIL PROTECTED]> wrote:
>>> Ok, I understand where you are going with this. I totally agree with
>>> your thinking here. But...IIUC...in the web app, if you are including
>>> your own PU, you likely wouldn't be using the JNDI (and thus the
>>> container) for this and would be declaring use of the spi bootstrap
>>> directly:
>>>
>>> EntityManagerFactory emf =
>>> Persistence.createEntityManagerFactory("mywebpersistenceunit")
>
> That's one way any component (servlet, ejb, ee app client, or java se
> app) can get an EntityManagerFactory. But as Aaron says, anyone
> (servlet, ejb, ee app client) who wants a DataSource managed by the
> container has to use JNDI or dependecy injection (which is JNDI driven
> in JEE).
Well...that wasn't my point ;-) My point was there was no reason to
access the JNDI to get an EMF for a stand alone web app. However, there
is nothing wrong with the persistence.xml declaring access to the JNDI
for the datasource...even in a stand alone web app... i.e:
<persistence>
<persistence-unit name="myPU" transaction-type="JTA">
<jta-data-source>java:/MySQLDS</jta-data-source>
...
In this case...the code I showed could still apply to get a container
managed datasource...as does yours ;-)
Jeff
>
> E.g. a Servlet with this:
> public class MySerlvet extends HttpServlet {
> @Resource EntityManagerFactory myEmf;
> }
>
> Or the equivalent EJB:
> @Stateful public class ShoppingCart {
> @Resource EntityManagerFactory myEmf;
> }
>
>> At this moment it won't be a problem, since the plugin only supports
>> web apps, but with Blevins' expertise it should be easy enough to
>> support EJB JARs too. Eventually we'll need to get clever -- perhaps
>> detecting that correctly-named JPA GBeans already exist in the parent
>> tree so it's not necessary to redefine them for the web app. In fact,
>> that's probably the way to go.
>
> Happy to help in whatever approach you're taking. As I mentioned my
> current thinking is to "wrap" JNDI with an extended JNDI and put the JPA
> resources in there so EJBs or Servlets that have persistence.xml files
> in their archives can use them. I like your idea on checking to see if
> a gbean is already defined and not redefining it (it being the JPA
> factory). From a spec perspective, I can find anything that requires
> this. Have you found something? Best I can find is that the
> persistence classes themselves (i.e. your persistent pojo classes) have
> to come from the same classloader and can't be reloaded in a child
> classloader if they were also listed in a parent classloader.
>
>
> -David
>
>> Thanks,
>> Aaron
>>
>>
>>> And when using the EJB, you would call the JNDI. Therefore, I don't
>>> think this is a problem at all.
>>>
>>> >
>>> > Thanks,
>>> > Aaron
>>> >
>>> >> But unless
>>> >> the spi jar uses some sort of mechanism using static declarations or
>>> >> componanents like Spring, then it really shouldn't be an issue.
>>> If it
>>> >> is, I think its reasonable to claim storage of duplicate PUs in
>>> the same
>>> >> package causing the problem (again, like the Spring Commons Logging
>>> >> problem).
>>> >>
>>> >> >
>>> >> > Thanks,
>>> >> > Aaron
>>> >> >
>>> >> >> Aaron Mulder wrote:
>>> >> >> > So what happens if an EJB JAR has a persistence.xml and a web
>>> app in
>>> >> >> > the same EAR has a separate persistence.xml? If we just look
>>> in the
>>> >> >> > class loader, when we go to deploy the web app, we'll see
>>> them both
>>> >> >> > because the EJB JAR is added to the parent classpath of the
>>> WAR. Is
>>> >> >> > there a good way to distinguish "resource in my ClassLoader"
>>> from
>>> >> >> > "resources in my ClassLoader tree"?
>>> >> >> >
>>> >> >> > Thanks,
>>> >> >> > Aaron
>>> >> >>
>>> >>
>>>
>>