You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Violeta Georgieva <vi...@apache.org> on 2017/05/08 21:04:45 UTC

Driver location in an EAR file

Hi,

I have WAR archive that contains a driver, located in WEB-INF/lib and
resources.xml, located in WEB-INF. The WAR file is packaged in an EAR file.
When I deploy the EAR file I receive an exception that the driver cannot be
located (ClassNotFoundException).
Isn't it possible to provide a driver with my WAR archive?
I'm using TomEE WebProfile 7.0.3.

Thanks a lot,
Violeta



--
View this message in context: http://tomee-openejb.979440.n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675.html
Sent from the TomEE Users mailing list archive at Nabble.com.

Re: Driver location in an EAR file

Posted by Romain Manni-Bucau <rm...@gmail.com>.
you add the driver in <libs> and the resource in systemVariables or
tomee.xml (or its inline version). IIRC there is an example on
http://tomee.apache.org/developer/tools/maven/tomee.html at the end


Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://blog-rmannibucau.rhcloud.com> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
<https://javaeefactory-rmannibucau.rhcloud.com>

2017-05-09 14:21 GMT+02:00 rkelapure <rk...@pivotal.io>:

> @Romain,
>
> How can this be done with the tomee maven plugin ?
>
> -cheers,
> Rohit
>
>
>
> --
> View this message in context: http://tomee-openejb.979440.
> n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675p4681688.html
> Sent from the TomEE Users mailing list archive at Nabble.com.
>

Re: Driver location in an EAR file

Posted by rkelapure <rk...@pivotal.io>.
@Romain,

How can this be done with the tomee maven plugin ?

-cheers,
Rohit



--
View this message in context: http://tomee-openejb.979440.n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675p4681688.html
Sent from the TomEE Users mailing list archive at Nabble.com.

Re: Driver location in an EAR file

Posted by Violeta Georgieva <vi...@apache.org>.
2017-05-09 15:24 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
>
> It is pretty close to what I understandood but also means you don't have
> this resources.xml blocker since you will:
>
> 1. check the ear
> 2. add drivers in tomee/lib
> 3. append the resource definition in tomee.xml (or another file if you
want
> to use an import for instance or system.properties)
> 4. start
>
> does it sounds like doable?

Yes that's what also started to think as a solution.

Thanks

> Side note: this is something easily doable with tomee maven plugin
>
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <
https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
>
> 2017-05-09 14:05 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
>
> > 2017-05-09 13:48 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> > >
> > > Hmm, feel like I'm missing something so let me dump few pointers
> > hopefully
> > > helping to identify that:
> >
> > Here is the scenario:
> > - the user provides its EAR file which may or may not contain a driver
> > file.
> > - the first phase is a "staging" phase. During this phase only
> > configurations will happen. The EAR will be analyzed.
> > If the EAR doesn't contain a driver for the database (EAR/lib will be
> > evaluated), a driver will be downloaded and placed in EAR/lib (or
> > TomEE/lib), otherwise such download will not be performed.
> > There might be other configuration that will be applied.
> > - the second phase is the phase when TomEE will be started with all
> > configurations and additional libraries in place and with the
application
> > of course.
> >
> >
> > >
> > > - if you don't own the app then you can only customize the server and
> > > therefore don't hit this limitation, no?
> > > - how would you handle "if there use it, if not use another one", with
> > > openejb.classloader.forced-load?
> > > - I'm still reading it as you customize the container and therefore
don't
> > > hit this issue since you add drivers in the container
> > >
> > >
> > > Romain Manni-Bucau
> > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > <http://rmannibucau.wordpress.com> | Github <
> > https://github.com/rmannibucau> |
> > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > >
> > > 2017-05-09 12:45 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> > >
> > > > 2017-05-09 13:24 GMT+03:00 Romain Manni-Bucau <rmannibucau@gmail.com
>:
> > > > >
> > > > > 2017-05-09 12:18 GMT+02:00 Violeta Georgieva <violetagg@apache.org
>:
> > > > >
> > > > > > 2017-05-09 11:32 GMT+03:00 Romain Manni-Bucau <
> > rmannibucau@gmail.com
> > >:
> > > > > > >
> > > > > > > Right, lazy will not activate it early enough for JPA.
> > > > > > >
> > > > > > > Issue is we don't have the ear classloader (or webapp ones)
when
> > > > wiring
> > > > > > the
> > > > > > > EE application, we can let JPA lazy retrieve the datasource if
> > needed
> > > > but
> > > > > > > will still rely on lazy flag.
> > > > > >
> > > > > > Ok
> > > > > >
> > > > > > >
> > > > > > > Side note: think it is still recommanded to not load drivers
from
> > sub
> > > > JVM
> > > > > > > classloader cause they can't always be unloaded, isn't it?
> > > > > >
> > > > > > My use case is a container that holds TomEE + EAR application.
> > > > > > When it is started everything is started.
> > > > > > When it is stopped everything is stopped.
> > > > > >
> > > > > >
> > > > > If you own the container then you can define it in tomee.xml and
use
> > > > > tomee/lib no? Did it get it wrong?
> > > >
> > > > I do not own the app.
> > > > I wanted to achieve the following:
> > > > - If the app has a driver packaged in an EAR to use it as is
> > > > - If the app does not have a driver to supply such.
> > > >
> > > > >
> > > > >
> > > > > > Thanks,
> > > > > > Violeta
> > > > > >
> > > > > > >
> > > > > > > Romain Manni-Bucau
> > > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > > > https://github.com/rmannibucau> |
> > > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE
> > Factory
> > > > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > > > >
> > > > > > > 2017-05-09 10:26 GMT+02:00 Violeta Georgieva <
> > violetagg@apache.org
> > >:
> > > > > > >
> > > > > > > > 2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau <
> > > > rmannibucau@gmail.com
> > > > >:
> > > > > > > > >
> > > > > > > > > Guess you can still use Lazy=true.
> > > > > > > >
> > > > > > > > With Lazy flag I'm receiving the exception below. I tried
> > > > > > > > also UseAppClassLoader = true the exception is the same as
> > below.
> > > > > > > >
> > > > > > > > org.apache.openejb.OpenEJBException: Could not lookup
> > > > > > <jta-data-source>
> > > > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable
> > to
> > > > > > resolve
> > > > > > > > class org.hsqldb.jdbcDriver: Could not lookup
<jta-data-source>
> > > > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable
> > to
> > > > > > resolve
> > > > > > > > class org.hsqldb.jdbcDriver
> > > > > > > > at
> > > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > > createApplication(Assembler.java:1042)
> > > > > > > > at
> > > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > > createApplication(Assembler.java:718)
> > > > > > > > at
> > > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > > createApplication(Assembler.java:714)
> > > > > > > > at
> > > > > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > > > > TomcatWebAppBuilder.java:2223)
> > > > > > > > at
> > > > > > > > org.apache.tomee.catalina.GlobalListenerSupport.
> > lifecycleEvent(
> > > > > > > > GlobalListenerSupport.java:141)
> > > > > > > > at
> > > > > > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > > > > LifecycleBase.java:94)
> > > > > > > > at
> > > > > > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > > > > ContainerBase.java:1164)
> > > > > > > > at
> > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > ContainerBackgroundProcessor.
> > > > > > > > processChildren(ContainerBase.java:1388)
> > > > > > > > at
> > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > ContainerBackgroundProcessor.
> > > > > > > > processChildren(ContainerBase.java:1392)
> > > > > > > > at
> > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > ContainerBackgroundProcessor.
> > > > > > > > run(ContainerBase.java:1360)
> > > > > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > > > > Caused by: org.apache.openejb.OpenEJBException:
> > > > > > > > org.apache.openejb.OpenEJBException: Could not lookup
> > > > > > <jta-data-source>
> > > > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable
> > to
> > > > > > resolve
> > > > > > > > class org.hsqldb.jdbcDriver: Could not lookup
<jta-data-source>
> > > > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable
> > to
> > > > > > resolve
> > > > > > > > class org.hsqldb.jdbcDriver
> > > > > > > > at
> > > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > > createApplication(Assembler.java:873)
> > > > > > > > ... 10 more
> > > > > > > > Caused by: org.apache.openejb.OpenEJBException: Could not
> > lookup
> > > > > > > > <jta-data-source> 'openejb/Resource/eartest/jdbc/mydb' for
> > unit
> > > > > > 'mydb':
> > > > > > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > > > > > at
> > > > > > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > > > > > createEntityManagerFactory(PersistenceBuilder.java:96)
> > > > > > > > at
> > > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > > createApplication(Assembler.java:867)
> > > > > > > > ... 10 more
> > > > > > > > Caused by:
> > > > > > > > org.apache.openejb.core.ivm.naming.LazyObjectReference$
> > > > > > > > LazyNamingException:
> > > > > > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > > > > > at
> > > > > > > > org.apache.openejb.core.ivm.naming.LazyObjectReference.
> > > > > > > > getObject(LazyObjectReference.java:39)
> > > > > > > > at org.apache.openejb.core.ivm.naming.IvmContext.lookup(
> > > > > > > > IvmContext.java:176)
> > > > > > > > at
> > > > > > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > > > > > createEntityManagerFactory(PersistenceBuilder.java:90)
> > > > > > > > ... 11 more
> > > > > > > >
> > > > > > > >
> > > > > > > > >
> > > > > > > > > 2017-05-09 9:52 GMT+02:00 Violeta Georgieva <
> > > > violetagg@apache.org
> > > > >:
> > > > > > > > >
> > > > > > > > > > Hi,
> > > > > > > > > >
> > > > > > > > > > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <
> > > > > > rmannibucau@gmail.com
> > > > > > >:
> > > > > > > > > > >
> > > > > > > > > > > Hi Violeta,
> > > > > > > > > > >
> > > > > > > > > > > yes for ears intent was to put the descriptor in
META-INF
> > and
> > > > the
> > > > > > > > driver
> > > > > > > > > > in
> > > > > > > > > > > ear/lib. That said you can add Lazy=true to support
wars.
> > > > > > > > > >
> > > > > > > > > > I tried to put the driver in the EAR/lib and the
> > resources.xml
> > > > file
> > > > > > in
> > > > > > > > > > EAR/META-INF.
> > > > > > > > > > Unfortunately the driver still cannot be found.
(exception
> > > > below, I
> > > > > > > > > > intentionally removed the hsqldb from TomEE/lib)
> > > > > > > > > >
> > > > > > > > > > Debugging the code I saw that the context class loader
was
> > used
> > > > > > [1].
> > > > > > > > The
> > > > > > > > > > context class loader was the loader that contains
TomEE/lib
> > and
> > > > not
> > > > > > the
> > > > > > > > > > EAR/lib.
> > > > > > > > > >
> > > > > > > > > > Shouldn't it use the EAR class loader?
> > > > > > > > > >
> > > > > > > > > > Regards,
> > > > > > > > > > Violeta
> > > > > > > > > >
> > > > > > > > > > [1]
> > > > > > > > > > https://github.com/apache/tomee/blob/master/container/
> > > > > > > > > > openejb-core/src/main/java/org/apache/openejb/assembler/
> > > > > > > > > > classic/Assembler.java#L2949
> > > > > > > > > >
> > > > > > > > > >
 org.apache.xbean.propertyeditor.PropertyEditorException:
> > > > Unable
> > > > > > to
> > > > > > > > > > resolve
> > > > > > > > > > class org.hsqldb.jdbcDriver
> > > > > > > > > > at
> > > > > > > > > >
> > > > > > > >
> > > > > > org.apache.xbean.propertyeditor.ClassEditor.
> > > > toObjectImpl(ClassEditor.java:
> > > > > > > > > > 43)
> > > > > > > > > > at
> > > > > > > > > > org.apache.xbean.propertyeditor.
> > AbstractConverter.toObject(
> > > > > > > > > > AbstractConverter.java:86)
> > > > > > > > > > at
> > > > > > > > > >
org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> > > > > > > > > > PropertyEditors.java:284)
> > > > > > > > > > at
> > > > > > org.apache.xbean.recipe.RecipeHelper.convert(
> > RecipeHelper.java:181)
> > > > > > > > > > at
> > > > > > > > > > org.apache.xbean.recipe.ObjectRecipe.
> > extractConstructorArgs(
> > > > > > > > > > ObjectRecipe.java:592)
> > > > > > > > > > at
> > > > > > > > > >
> > > > > > > >
> > > > > > org.apache.xbean.recipe.ObjectRecipe.internalCreate(
> > > > ObjectRecipe.java:275)
> > > > > > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > > > > > AbstractRecipe.java:96)
> > > > > > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > > > > > AbstractRecipe.java:61)
> > > > > > > > > > at
> > > > > > > > > >
> > > > > > > >
> > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > doCreateResource(Assembler.
> > > > > > > > > > java:2970)
> > > > > > > > > > at
> > > > > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > > > > createResource(Assembler.java:2803)
> > > > > > > > > > at
> > > > > > > > > >
org.apache.openejb.config.ConfigurationFactory.doInstall(
> > > > > > > > > > ConfigurationFactory.java:466)
> > > > > > > > > > at
> > > > > > > > > > org.apache.openejb.config.ConfigurationFactory.install(
> > > > > > > > > > ConfigurationFactory.java:459)
> > > > > > > > > > at
> > > > > > > > > >
> > > > > > > >
> > > > > > org.apache.openejb.config.AutoConfig.installResource(
> > > > AutoConfig.java:2194)
> > > > > > > > > > at
> > > > > > > > > > org.apache.openejb.config.AutoConfig.
> > > > processApplicationResources(
> > > > > > > > > > AutoConfig.java:1026)
> > > > > > > > > > at
org.apache.openejb.config.AutoConfig.deploy(AutoConfig.
> > > > > > java:190)
> > > > > > > > > > at
> > > > > > > > > > org.apache.openejb.config.ConfigurationFactory$Chain.
> > > > > > > > > > deploy(ConfigurationFactory.java:420)
> > > > > > > > > > at
> > > > > > > > > > org.apache.openejb.config.ConfigurationFactory.
> > > > > > configureApplication(
> > > > > > > > > > ConfigurationFactory.java:1037)
> > > > > > > > > > at
> > > > > > > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > > > > > > TomcatWebAppBuilder.java:2204)
> > > > > > > > > > at
> > > > > > > > > > org.apache.tomee.catalina.GlobalListenerSupport.
> > > > lifecycleEvent(
> > > > > > > > > > GlobalListenerSupport.java:141)
> > > > > > > > > > at
> > > > > > > > > >
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > > > > > > LifecycleBase.java:94)
> > > > > > > > > > at
> > > > > > > > > >
org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > > > > > > ContainerBase.java:1164)
> > > > > > > > > > at
> > > > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > > > ContainerBackgroundProcessor.
> > > > > > > > > > processChildren(ContainerBase.java:1388)
> > > > > > > > > > at
> > > > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > > > ContainerBackgroundProcessor.
> > > > > > > > > > processChildren(ContainerBase.java:1392)
> > > > > > > > > > at
> > > > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > > > ContainerBackgroundProcessor.
> > > > > > > > > > run(ContainerBase.java:1360)
> > > > > > > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > > > > > > Caused by: java.lang.ClassNotFoundException:
> > > > org.hsqldb.jdbcDriver
> > > > > > > > > > at
> > java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> > > > > > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > > > > > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > > > > > > > > > at java.lang.Class.forName0(Native Method)
> > > > > > > > > > at java.lang.Class.forName(Class.java:348)
> > > > > > > > > > at
> > > > > > > > > >
> > > > > > > >
> > > > > > org.apache.xbean.propertyeditor.ClassEditor.
> > > > toObjectImpl(ClassEditor.java:
> > > > > > > > > > 40)
> > > > > > > > > > ... 24 more
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > Romain Manni-Bucau
> > > > > > > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > > > > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > > > > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > > > > > > > https://github.com/rmannibucau> |
> > > > > > > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> |
> > JavaEE
> > > > > > Factory
> > > > > > > > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > > > > > > > >
> > > > > > > > > > > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <
> > > > > > violetagg@apache.org
> > > > > > >:
> > > > > > > > > > >
> > > > > > > > > > > > Hi,
> > > > > > > > > > > >
> > > > > > > > > > > > I have WAR archive that contains a driver, located
in
> > > > > > WEB-INF/lib
> > > > > > > > and
> > > > > > > > > > > > resources.xml, located in WEB-INF. The WAR file is
> > packaged
> > > > in
> > > > > > an
> > > > > > > > EAR
> > > > > > > > > > file.
> > > > > > > > > > > > When I deploy the EAR file I receive an exception
that
> > the
> > > > > > driver
> > > > > > > > > > cannot be
> > > > > > > > > > > > located (ClassNotFoundException).
> > > > > > > > > > > > Isn't it possible to provide a driver with my WAR
> > archive?
> > > > > > > > > > > > I'm using TomEE WebProfile 7.0.3.
> > > > > > > > > > > >
> > > > > > > > > > > > Thanks a lot,
> > > > > > > > > > > > Violeta
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > --
> > > > > > > > > > > > View this message in context:
> > http://tomee-openejb.979440.
> > > > > > > > > > > > n4.nabble.com/Driver-location-
> > > > in-an-EAR-file-tp4681675.html
> > > > > > > > > > > > Sent from the TomEE Users mailing list archive at
> > > > Nabble.com.
> > > > > > > > > > > >
> > > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> >

Re: Driver location in an EAR file

Posted by Romain Manni-Bucau <rm...@gmail.com>.
It is pretty close to what I understandood but also means you don't have
this resources.xml blocker since you will:

1. check the ear
2. add drivers in tomee/lib
3. append the resource definition in tomee.xml (or another file if you want
to use an import for instance or system.properties)
4. start

does it sounds like doable?

Side note: this is something easily doable with tomee maven plugin



Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://blog-rmannibucau.rhcloud.com> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
<https://javaeefactory-rmannibucau.rhcloud.com>

2017-05-09 14:05 GMT+02:00 Violeta Georgieva <vi...@apache.org>:

> 2017-05-09 13:48 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> >
> > Hmm, feel like I'm missing something so let me dump few pointers
> hopefully
> > helping to identify that:
>
> Here is the scenario:
> - the user provides its EAR file which may or may not contain a driver
> file.
> - the first phase is a "staging" phase. During this phase only
> configurations will happen. The EAR will be analyzed.
> If the EAR doesn't contain a driver for the database (EAR/lib will be
> evaluated), a driver will be downloaded and placed in EAR/lib (or
> TomEE/lib), otherwise such download will not be performed.
> There might be other configuration that will be applied.
> - the second phase is the phase when TomEE will be started with all
> configurations and additional libraries in place and with the application
> of course.
>
>
> >
> > - if you don't own the app then you can only customize the server and
> > therefore don't hit this limitation, no?
> > - how would you handle "if there use it, if not use another one", with
> > openejb.classloader.forced-load?
> > - I'm still reading it as you customize the container and therefore don't
> > hit this issue since you add drivers in the container
> >
> >
> > Romain Manni-Bucau
> > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > <http://rmannibucau.wordpress.com> | Github <
> https://github.com/rmannibucau> |
> > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > <https://javaeefactory-rmannibucau.rhcloud.com>
> >
> > 2017-05-09 12:45 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> >
> > > 2017-05-09 13:24 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> > > >
> > > > 2017-05-09 12:18 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> > > >
> > > > > 2017-05-09 11:32 GMT+03:00 Romain Manni-Bucau <
> rmannibucau@gmail.com
> >:
> > > > > >
> > > > > > Right, lazy will not activate it early enough for JPA.
> > > > > >
> > > > > > Issue is we don't have the ear classloader (or webapp ones) when
> > > wiring
> > > > > the
> > > > > > EE application, we can let JPA lazy retrieve the datasource if
> needed
> > > but
> > > > > > will still rely on lazy flag.
> > > > >
> > > > > Ok
> > > > >
> > > > > >
> > > > > > Side note: think it is still recommanded to not load drivers from
> sub
> > > JVM
> > > > > > classloader cause they can't always be unloaded, isn't it?
> > > > >
> > > > > My use case is a container that holds TomEE + EAR application.
> > > > > When it is started everything is started.
> > > > > When it is stopped everything is stopped.
> > > > >
> > > > >
> > > > If you own the container then you can define it in tomee.xml and use
> > > > tomee/lib no? Did it get it wrong?
> > >
> > > I do not own the app.
> > > I wanted to achieve the following:
> > > - If the app has a driver packaged in an EAR to use it as is
> > > - If the app does not have a driver to supply such.
> > >
> > > >
> > > >
> > > > > Thanks,
> > > > > Violeta
> > > > >
> > > > > >
> > > > > > Romain Manni-Bucau
> > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > > https://github.com/rmannibucau> |
> > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE
> Factory
> > > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > > >
> > > > > > 2017-05-09 10:26 GMT+02:00 Violeta Georgieva <
> violetagg@apache.org
> >:
> > > > > >
> > > > > > > 2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau <
> > > rmannibucau@gmail.com
> > > >:
> > > > > > > >
> > > > > > > > Guess you can still use Lazy=true.
> > > > > > >
> > > > > > > With Lazy flag I'm receiving the exception below. I tried
> > > > > > > also UseAppClassLoader = true the exception is the same as
> below.
> > > > > > >
> > > > > > > org.apache.openejb.OpenEJBException: Could not lookup
> > > > > <jta-data-source>
> > > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable
> to
> > > > > resolve
> > > > > > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable
> to
> > > > > resolve
> > > > > > > class org.hsqldb.jdbcDriver
> > > > > > > at
> > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > createApplication(Assembler.java:1042)
> > > > > > > at
> > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > createApplication(Assembler.java:718)
> > > > > > > at
> > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > createApplication(Assembler.java:714)
> > > > > > > at
> > > > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > > > TomcatWebAppBuilder.java:2223)
> > > > > > > at
> > > > > > > org.apache.tomee.catalina.GlobalListenerSupport.
> lifecycleEvent(
> > > > > > > GlobalListenerSupport.java:141)
> > > > > > > at
> > > > > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > > > LifecycleBase.java:94)
> > > > > > > at
> > > > > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > > > ContainerBase.java:1164)
> > > > > > > at
> > > > > > > org.apache.catalina.core.ContainerBase$
> > > ContainerBackgroundProcessor.
> > > > > > > processChildren(ContainerBase.java:1388)
> > > > > > > at
> > > > > > > org.apache.catalina.core.ContainerBase$
> > > ContainerBackgroundProcessor.
> > > > > > > processChildren(ContainerBase.java:1392)
> > > > > > > at
> > > > > > > org.apache.catalina.core.ContainerBase$
> > > ContainerBackgroundProcessor.
> > > > > > > run(ContainerBase.java:1360)
> > > > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > > > Caused by: org.apache.openejb.OpenEJBException:
> > > > > > > org.apache.openejb.OpenEJBException: Could not lookup
> > > > > <jta-data-source>
> > > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable
> to
> > > > > resolve
> > > > > > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable
> to
> > > > > resolve
> > > > > > > class org.hsqldb.jdbcDriver
> > > > > > > at
> > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > createApplication(Assembler.java:873)
> > > > > > > ... 10 more
> > > > > > > Caused by: org.apache.openejb.OpenEJBException: Could not
> lookup
> > > > > > > <jta-data-source> 'openejb/Resource/eartest/jdbc/mydb' for
> unit
> > > > > 'mydb':
> > > > > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > > > > at
> > > > > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > > > > createEntityManagerFactory(PersistenceBuilder.java:96)
> > > > > > > at
> > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > createApplication(Assembler.java:867)
> > > > > > > ... 10 more
> > > > > > > Caused by:
> > > > > > > org.apache.openejb.core.ivm.naming.LazyObjectReference$
> > > > > > > LazyNamingException:
> > > > > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > > > > at
> > > > > > > org.apache.openejb.core.ivm.naming.LazyObjectReference.
> > > > > > > getObject(LazyObjectReference.java:39)
> > > > > > > at org.apache.openejb.core.ivm.naming.IvmContext.lookup(
> > > > > > > IvmContext.java:176)
> > > > > > > at
> > > > > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > > > > createEntityManagerFactory(PersistenceBuilder.java:90)
> > > > > > > ... 11 more
> > > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > 2017-05-09 9:52 GMT+02:00 Violeta Georgieva <
> > > violetagg@apache.org
> > > >:
> > > > > > > >
> > > > > > > > > Hi,
> > > > > > > > >
> > > > > > > > > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <
> > > > > rmannibucau@gmail.com
> > > > > >:
> > > > > > > > > >
> > > > > > > > > > Hi Violeta,
> > > > > > > > > >
> > > > > > > > > > yes for ears intent was to put the descriptor in META-INF
> and
> > > the
> > > > > > > driver
> > > > > > > > > in
> > > > > > > > > > ear/lib. That said you can add Lazy=true to support wars.
> > > > > > > > >
> > > > > > > > > I tried to put the driver in the EAR/lib and the
> resources.xml
> > > file
> > > > > in
> > > > > > > > > EAR/META-INF.
> > > > > > > > > Unfortunately the driver still cannot be found. (exception
> > > below, I
> > > > > > > > > intentionally removed the hsqldb from TomEE/lib)
> > > > > > > > >
> > > > > > > > > Debugging the code I saw that the context class loader was
> used
> > > > > [1].
> > > > > > > The
> > > > > > > > > context class loader was the loader that contains TomEE/lib
> and
> > > not
> > > > > the
> > > > > > > > > EAR/lib.
> > > > > > > > >
> > > > > > > > > Shouldn't it use the EAR class loader?
> > > > > > > > >
> > > > > > > > > Regards,
> > > > > > > > > Violeta
> > > > > > > > >
> > > > > > > > > [1]
> > > > > > > > > https://github.com/apache/tomee/blob/master/container/
> > > > > > > > > openejb-core/src/main/java/org/apache/openejb/assembler/
> > > > > > > > > classic/Assembler.java#L2949
> > > > > > > > >
> > > > > > > > >  org.apache.xbean.propertyeditor.PropertyEditorException:
> > > Unable
> > > > > to
> > > > > > > > > resolve
> > > > > > > > > class org.hsqldb.jdbcDriver
> > > > > > > > > at
> > > > > > > > >
> > > > > > >
> > > > > org.apache.xbean.propertyeditor.ClassEditor.
> > > toObjectImpl(ClassEditor.java:
> > > > > > > > > 43)
> > > > > > > > > at
> > > > > > > > > org.apache.xbean.propertyeditor.
> AbstractConverter.toObject(
> > > > > > > > > AbstractConverter.java:86)
> > > > > > > > > at
> > > > > > > > > org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> > > > > > > > > PropertyEditors.java:284)
> > > > > > > > > at
> > > > > org.apache.xbean.recipe.RecipeHelper.convert(
> RecipeHelper.java:181)
> > > > > > > > > at
> > > > > > > > > org.apache.xbean.recipe.ObjectRecipe.
> extractConstructorArgs(
> > > > > > > > > ObjectRecipe.java:592)
> > > > > > > > > at
> > > > > > > > >
> > > > > > >
> > > > > org.apache.xbean.recipe.ObjectRecipe.internalCreate(
> > > ObjectRecipe.java:275)
> > > > > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > > > > AbstractRecipe.java:96)
> > > > > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > > > > AbstractRecipe.java:61)
> > > > > > > > > at
> > > > > > > > >
> > > > > > >
> > > > > org.apache.openejb.assembler.classic.Assembler.
> > > doCreateResource(Assembler.
> > > > > > > > > java:2970)
> > > > > > > > > at
> > > > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > > > createResource(Assembler.java:2803)
> > > > > > > > > at
> > > > > > > > > org.apache.openejb.config.ConfigurationFactory.doInstall(
> > > > > > > > > ConfigurationFactory.java:466)
> > > > > > > > > at
> > > > > > > > > org.apache.openejb.config.ConfigurationFactory.install(
> > > > > > > > > ConfigurationFactory.java:459)
> > > > > > > > > at
> > > > > > > > >
> > > > > > >
> > > > > org.apache.openejb.config.AutoConfig.installResource(
> > > AutoConfig.java:2194)
> > > > > > > > > at
> > > > > > > > > org.apache.openejb.config.AutoConfig.
> > > processApplicationResources(
> > > > > > > > > AutoConfig.java:1026)
> > > > > > > > > at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.
> > > > > java:190)
> > > > > > > > > at
> > > > > > > > > org.apache.openejb.config.ConfigurationFactory$Chain.
> > > > > > > > > deploy(ConfigurationFactory.java:420)
> > > > > > > > > at
> > > > > > > > > org.apache.openejb.config.ConfigurationFactory.
> > > > > configureApplication(
> > > > > > > > > ConfigurationFactory.java:1037)
> > > > > > > > > at
> > > > > > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > > > > > TomcatWebAppBuilder.java:2204)
> > > > > > > > > at
> > > > > > > > > org.apache.tomee.catalina.GlobalListenerSupport.
> > > lifecycleEvent(
> > > > > > > > > GlobalListenerSupport.java:141)
> > > > > > > > > at
> > > > > > > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > > > > > LifecycleBase.java:94)
> > > > > > > > > at
> > > > > > > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > > > > > ContainerBase.java:1164)
> > > > > > > > > at
> > > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > > ContainerBackgroundProcessor.
> > > > > > > > > processChildren(ContainerBase.java:1388)
> > > > > > > > > at
> > > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > > ContainerBackgroundProcessor.
> > > > > > > > > processChildren(ContainerBase.java:1392)
> > > > > > > > > at
> > > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > > ContainerBackgroundProcessor.
> > > > > > > > > run(ContainerBase.java:1360)
> > > > > > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > > > > > Caused by: java.lang.ClassNotFoundException:
> > > org.hsqldb.jdbcDriver
> > > > > > > > > at
> java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> > > > > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > > > > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > > > > > > > > at java.lang.Class.forName0(Native Method)
> > > > > > > > > at java.lang.Class.forName(Class.java:348)
> > > > > > > > > at
> > > > > > > > >
> > > > > > >
> > > > > org.apache.xbean.propertyeditor.ClassEditor.
> > > toObjectImpl(ClassEditor.java:
> > > > > > > > > 40)
> > > > > > > > > ... 24 more
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Romain Manni-Bucau
> > > > > > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > > > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > > > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > > > > > > https://github.com/rmannibucau> |
> > > > > > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> |
> JavaEE
> > > > > Factory
> > > > > > > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > > > > > > >
> > > > > > > > > > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <
> > > > > violetagg@apache.org
> > > > > >:
> > > > > > > > > >
> > > > > > > > > > > Hi,
> > > > > > > > > > >
> > > > > > > > > > > I have WAR archive that contains a driver, located in
> > > > > WEB-INF/lib
> > > > > > > and
> > > > > > > > > > > resources.xml, located in WEB-INF. The WAR file is
> packaged
> > > in
> > > > > an
> > > > > > > EAR
> > > > > > > > > file.
> > > > > > > > > > > When I deploy the EAR file I receive an exception that
> the
> > > > > driver
> > > > > > > > > cannot be
> > > > > > > > > > > located (ClassNotFoundException).
> > > > > > > > > > > Isn't it possible to provide a driver with my WAR
> archive?
> > > > > > > > > > > I'm using TomEE WebProfile 7.0.3.
> > > > > > > > > > >
> > > > > > > > > > > Thanks a lot,
> > > > > > > > > > > Violeta
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > --
> > > > > > > > > > > View this message in context:
> http://tomee-openejb.979440.
> > > > > > > > > > > n4.nabble.com/Driver-location-
> > > in-an-EAR-file-tp4681675.html
> > > > > > > > > > > Sent from the TomEE Users mailing list archive at
> > > Nabble.com.
> > > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > >
> > >
>

Re: Driver location in an EAR file

Posted by Violeta Georgieva <vi...@apache.org>.
2017-05-09 13:48 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
>
> Hmm, feel like I'm missing something so let me dump few pointers hopefully
> helping to identify that:

Here is the scenario:
- the user provides its EAR file which may or may not contain a driver file.
- the first phase is a "staging" phase. During this phase only
configurations will happen. The EAR will be analyzed.
If the EAR doesn't contain a driver for the database (EAR/lib will be
evaluated), a driver will be downloaded and placed in EAR/lib (or
TomEE/lib), otherwise such download will not be performed.
There might be other configuration that will be applied.
- the second phase is the phase when TomEE will be started with all
configurations and additional libraries in place and with the application
of course.


>
> - if you don't own the app then you can only customize the server and
> therefore don't hit this limitation, no?
> - how would you handle "if there use it, if not use another one", with
> openejb.classloader.forced-load?
> - I'm still reading it as you customize the container and therefore don't
> hit this issue since you add drivers in the container
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <
https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
>
> 2017-05-09 12:45 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
>
> > 2017-05-09 13:24 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> > >
> > > 2017-05-09 12:18 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> > >
> > > > 2017-05-09 11:32 GMT+03:00 Romain Manni-Bucau <rmannibucau@gmail.com
>:
> > > > >
> > > > > Right, lazy will not activate it early enough for JPA.
> > > > >
> > > > > Issue is we don't have the ear classloader (or webapp ones) when
> > wiring
> > > > the
> > > > > EE application, we can let JPA lazy retrieve the datasource if
needed
> > but
> > > > > will still rely on lazy flag.
> > > >
> > > > Ok
> > > >
> > > > >
> > > > > Side note: think it is still recommanded to not load drivers from
sub
> > JVM
> > > > > classloader cause they can't always be unloaded, isn't it?
> > > >
> > > > My use case is a container that holds TomEE + EAR application.
> > > > When it is started everything is started.
> > > > When it is stopped everything is stopped.
> > > >
> > > >
> > > If you own the container then you can define it in tomee.xml and use
> > > tomee/lib no? Did it get it wrong?
> >
> > I do not own the app.
> > I wanted to achieve the following:
> > - If the app has a driver packaged in an EAR to use it as is
> > - If the app does not have a driver to supply such.
> >
> > >
> > >
> > > > Thanks,
> > > > Violeta
> > > >
> > > > >
> > > > > Romain Manni-Bucau
> > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > https://github.com/rmannibucau> |
> > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE
Factory
> > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > >
> > > > > 2017-05-09 10:26 GMT+02:00 Violeta Georgieva <violetagg@apache.org
>:
> > > > >
> > > > > > 2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau <
> > rmannibucau@gmail.com
> > >:
> > > > > > >
> > > > > > > Guess you can still use Lazy=true.
> > > > > >
> > > > > > With Lazy flag I'm receiving the exception below. I tried
> > > > > > also UseAppClassLoader = true the exception is the same as
below.
> > > > > >
> > > > > > org.apache.openejb.OpenEJBException: Could not lookup
> > > > <jta-data-source>
> > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > > > resolve
> > > > > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > > > resolve
> > > > > > class org.hsqldb.jdbcDriver
> > > > > > at
> > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > createApplication(Assembler.java:1042)
> > > > > > at
> > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > createApplication(Assembler.java:718)
> > > > > > at
> > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > createApplication(Assembler.java:714)
> > > > > > at
> > > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > > TomcatWebAppBuilder.java:2223)
> > > > > > at
> > > > > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > > > > > GlobalListenerSupport.java:141)
> > > > > > at
> > > > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > > LifecycleBase.java:94)
> > > > > > at
> > > > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > > ContainerBase.java:1164)
> > > > > > at
> > > > > > org.apache.catalina.core.ContainerBase$
> > ContainerBackgroundProcessor.
> > > > > > processChildren(ContainerBase.java:1388)
> > > > > > at
> > > > > > org.apache.catalina.core.ContainerBase$
> > ContainerBackgroundProcessor.
> > > > > > processChildren(ContainerBase.java:1392)
> > > > > > at
> > > > > > org.apache.catalina.core.ContainerBase$
> > ContainerBackgroundProcessor.
> > > > > > run(ContainerBase.java:1360)
> > > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > > Caused by: org.apache.openejb.OpenEJBException:
> > > > > > org.apache.openejb.OpenEJBException: Could not lookup
> > > > <jta-data-source>
> > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > > > resolve
> > > > > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > > > resolve
> > > > > > class org.hsqldb.jdbcDriver
> > > > > > at
> > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > createApplication(Assembler.java:873)
> > > > > > ... 10 more
> > > > > > Caused by: org.apache.openejb.OpenEJBException: Could not lookup
> > > > > > <jta-data-source> 'openejb/Resource/eartest/jdbc/mydb' for unit
> > > > 'mydb':
> > > > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > > > at
> > > > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > > > createEntityManagerFactory(PersistenceBuilder.java:96)
> > > > > > at
> > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > createApplication(Assembler.java:867)
> > > > > > ... 10 more
> > > > > > Caused by:
> > > > > > org.apache.openejb.core.ivm.naming.LazyObjectReference$
> > > > > > LazyNamingException:
> > > > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > > > at
> > > > > > org.apache.openejb.core.ivm.naming.LazyObjectReference.
> > > > > > getObject(LazyObjectReference.java:39)
> > > > > > at org.apache.openejb.core.ivm.naming.IvmContext.lookup(
> > > > > > IvmContext.java:176)
> > > > > > at
> > > > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > > > createEntityManagerFactory(PersistenceBuilder.java:90)
> > > > > > ... 11 more
> > > > > >
> > > > > >
> > > > > > >
> > > > > > > 2017-05-09 9:52 GMT+02:00 Violeta Georgieva <
> > violetagg@apache.org
> > >:
> > > > > > >
> > > > > > > > Hi,
> > > > > > > >
> > > > > > > > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <
> > > > rmannibucau@gmail.com
> > > > >:
> > > > > > > > >
> > > > > > > > > Hi Violeta,
> > > > > > > > >
> > > > > > > > > yes for ears intent was to put the descriptor in META-INF
and
> > the
> > > > > > driver
> > > > > > > > in
> > > > > > > > > ear/lib. That said you can add Lazy=true to support wars.
> > > > > > > >
> > > > > > > > I tried to put the driver in the EAR/lib and the
resources.xml
> > file
> > > > in
> > > > > > > > EAR/META-INF.
> > > > > > > > Unfortunately the driver still cannot be found. (exception
> > below, I
> > > > > > > > intentionally removed the hsqldb from TomEE/lib)
> > > > > > > >
> > > > > > > > Debugging the code I saw that the context class loader was
used
> > > > [1].
> > > > > > The
> > > > > > > > context class loader was the loader that contains TomEE/lib
and
> > not
> > > > the
> > > > > > > > EAR/lib.
> > > > > > > >
> > > > > > > > Shouldn't it use the EAR class loader?
> > > > > > > >
> > > > > > > > Regards,
> > > > > > > > Violeta
> > > > > > > >
> > > > > > > > [1]
> > > > > > > > https://github.com/apache/tomee/blob/master/container/
> > > > > > > > openejb-core/src/main/java/org/apache/openejb/assembler/
> > > > > > > > classic/Assembler.java#L2949
> > > > > > > >
> > > > > > > >  org.apache.xbean.propertyeditor.PropertyEditorException:
> > Unable
> > > > to
> > > > > > > > resolve
> > > > > > > > class org.hsqldb.jdbcDriver
> > > > > > > > at
> > > > > > > >
> > > > > >
> > > > org.apache.xbean.propertyeditor.ClassEditor.
> > toObjectImpl(ClassEditor.java:
> > > > > > > > 43)
> > > > > > > > at
> > > > > > > > org.apache.xbean.propertyeditor.AbstractConverter.toObject(
> > > > > > > > AbstractConverter.java:86)
> > > > > > > > at
> > > > > > > > org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> > > > > > > > PropertyEditors.java:284)
> > > > > > > > at
> > > > org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:181)
> > > > > > > > at
> > > > > > > > org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(
> > > > > > > > ObjectRecipe.java:592)
> > > > > > > > at
> > > > > > > >
> > > > > >
> > > > org.apache.xbean.recipe.ObjectRecipe.internalCreate(
> > ObjectRecipe.java:275)
> > > > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > > > AbstractRecipe.java:96)
> > > > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > > > AbstractRecipe.java:61)
> > > > > > > > at
> > > > > > > >
> > > > > >
> > > > org.apache.openejb.assembler.classic.Assembler.
> > doCreateResource(Assembler.
> > > > > > > > java:2970)
> > > > > > > > at
> > > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > > createResource(Assembler.java:2803)
> > > > > > > > at
> > > > > > > > org.apache.openejb.config.ConfigurationFactory.doInstall(
> > > > > > > > ConfigurationFactory.java:466)
> > > > > > > > at
> > > > > > > > org.apache.openejb.config.ConfigurationFactory.install(
> > > > > > > > ConfigurationFactory.java:459)
> > > > > > > > at
> > > > > > > >
> > > > > >
> > > > org.apache.openejb.config.AutoConfig.installResource(
> > AutoConfig.java:2194)
> > > > > > > > at
> > > > > > > > org.apache.openejb.config.AutoConfig.
> > processApplicationResources(
> > > > > > > > AutoConfig.java:1026)
> > > > > > > > at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.
> > > > java:190)
> > > > > > > > at
> > > > > > > > org.apache.openejb.config.ConfigurationFactory$Chain.
> > > > > > > > deploy(ConfigurationFactory.java:420)
> > > > > > > > at
> > > > > > > > org.apache.openejb.config.ConfigurationFactory.
> > > > configureApplication(
> > > > > > > > ConfigurationFactory.java:1037)
> > > > > > > > at
> > > > > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > > > > TomcatWebAppBuilder.java:2204)
> > > > > > > > at
> > > > > > > > org.apache.tomee.catalina.GlobalListenerSupport.
> > lifecycleEvent(
> > > > > > > > GlobalListenerSupport.java:141)
> > > > > > > > at
> > > > > > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > > > > LifecycleBase.java:94)
> > > > > > > > at
> > > > > > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > > > > ContainerBase.java:1164)
> > > > > > > > at
> > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > ContainerBackgroundProcessor.
> > > > > > > > processChildren(ContainerBase.java:1388)
> > > > > > > > at
> > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > ContainerBackgroundProcessor.
> > > > > > > > processChildren(ContainerBase.java:1392)
> > > > > > > > at
> > > > > > > > org.apache.catalina.core.ContainerBase$
> > > > ContainerBackgroundProcessor.
> > > > > > > > run(ContainerBase.java:1360)
> > > > > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > > > > Caused by: java.lang.ClassNotFoundException:
> > org.hsqldb.jdbcDriver
> > > > > > > > at
java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> > > > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > > > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > > > > > > > at java.lang.Class.forName0(Native Method)
> > > > > > > > at java.lang.Class.forName(Class.java:348)
> > > > > > > > at
> > > > > > > >
> > > > > >
> > > > org.apache.xbean.propertyeditor.ClassEditor.
> > toObjectImpl(ClassEditor.java:
> > > > > > > > 40)
> > > > > > > > ... 24 more
> > > > > > > >
> > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Romain Manni-Bucau
> > > > > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > > > > > https://github.com/rmannibucau> |
> > > > > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> |
JavaEE
> > > > Factory
> > > > > > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > > > > > >
> > > > > > > > > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <
> > > > violetagg@apache.org
> > > > >:
> > > > > > > > >
> > > > > > > > > > Hi,
> > > > > > > > > >
> > > > > > > > > > I have WAR archive that contains a driver, located in
> > > > WEB-INF/lib
> > > > > > and
> > > > > > > > > > resources.xml, located in WEB-INF. The WAR file is
packaged
> > in
> > > > an
> > > > > > EAR
> > > > > > > > file.
> > > > > > > > > > When I deploy the EAR file I receive an exception that
the
> > > > driver
> > > > > > > > cannot be
> > > > > > > > > > located (ClassNotFoundException).
> > > > > > > > > > Isn't it possible to provide a driver with my WAR
archive?
> > > > > > > > > > I'm using TomEE WebProfile 7.0.3.
> > > > > > > > > >
> > > > > > > > > > Thanks a lot,
> > > > > > > > > > Violeta
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > > View this message in context:
http://tomee-openejb.979440.
> > > > > > > > > > n4.nabble.com/Driver-location-
> > in-an-EAR-file-tp4681675.html
> > > > > > > > > > Sent from the TomEE Users mailing list archive at
> > Nabble.com.
> > > > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> >

Re: Driver location in an EAR file

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hmm, feel like I'm missing something so let me dump few pointers hopefully
helping to identify that:

- if you don't own the app then you can only customize the server and
therefore don't hit this limitation, no?
- how would you handle "if there use it, if not use another one", with
openejb.classloader.forced-load?
- I'm still reading it as you customize the container and therefore don't
hit this issue since you add drivers in the container


Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://blog-rmannibucau.rhcloud.com> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
<https://javaeefactory-rmannibucau.rhcloud.com>

2017-05-09 12:45 GMT+02:00 Violeta Georgieva <vi...@apache.org>:

> 2017-05-09 13:24 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> >
> > 2017-05-09 12:18 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> >
> > > 2017-05-09 11:32 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> > > >
> > > > Right, lazy will not activate it early enough for JPA.
> > > >
> > > > Issue is we don't have the ear classloader (or webapp ones) when
> wiring
> > > the
> > > > EE application, we can let JPA lazy retrieve the datasource if needed
> but
> > > > will still rely on lazy flag.
> > >
> > > Ok
> > >
> > > >
> > > > Side note: think it is still recommanded to not load drivers from sub
> JVM
> > > > classloader cause they can't always be unloaded, isn't it?
> > >
> > > My use case is a container that holds TomEE + EAR application.
> > > When it is started everything is started.
> > > When it is stopped everything is stopped.
> > >
> > >
> > If you own the container then you can define it in tomee.xml and use
> > tomee/lib no? Did it get it wrong?
>
> I do not own the app.
> I wanted to achieve the following:
> - If the app has a driver packaged in an EAR to use it as is
> - If the app does not have a driver to supply such.
>
> >
> >
> > > Thanks,
> > > Violeta
> > >
> > > >
> > > > Romain Manni-Bucau
> > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > <http://rmannibucau.wordpress.com> | Github <
> > > https://github.com/rmannibucau> |
> > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > >
> > > > 2017-05-09 10:26 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> > > >
> > > > > 2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau <
> rmannibucau@gmail.com
> >:
> > > > > >
> > > > > > Guess you can still use Lazy=true.
> > > > >
> > > > > With Lazy flag I'm receiving the exception below. I tried
> > > > > also UseAppClassLoader = true the exception is the same as below.
> > > > >
> > > > > org.apache.openejb.OpenEJBException: Could not lookup
> > > <jta-data-source>
> > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > > resolve
> > > > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > > resolve
> > > > > class org.hsqldb.jdbcDriver
> > > > > at
> > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > createApplication(Assembler.java:1042)
> > > > > at
> > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > createApplication(Assembler.java:718)
> > > > > at
> > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > createApplication(Assembler.java:714)
> > > > > at
> > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > TomcatWebAppBuilder.java:2223)
> > > > > at
> > > > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > > > > GlobalListenerSupport.java:141)
> > > > > at
> > > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > LifecycleBase.java:94)
> > > > > at
> > > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > ContainerBase.java:1164)
> > > > > at
> > > > > org.apache.catalina.core.ContainerBase$
> ContainerBackgroundProcessor.
> > > > > processChildren(ContainerBase.java:1388)
> > > > > at
> > > > > org.apache.catalina.core.ContainerBase$
> ContainerBackgroundProcessor.
> > > > > processChildren(ContainerBase.java:1392)
> > > > > at
> > > > > org.apache.catalina.core.ContainerBase$
> ContainerBackgroundProcessor.
> > > > > run(ContainerBase.java:1360)
> > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > Caused by: org.apache.openejb.OpenEJBException:
> > > > > org.apache.openejb.OpenEJBException: Could not lookup
> > > <jta-data-source>
> > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > > resolve
> > > > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > > resolve
> > > > > class org.hsqldb.jdbcDriver
> > > > > at
> > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > createApplication(Assembler.java:873)
> > > > > ... 10 more
> > > > > Caused by: org.apache.openejb.OpenEJBException: Could not lookup
> > > > > <jta-data-source> 'openejb/Resource/eartest/jdbc/mydb' for unit
> > > 'mydb':
> > > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > > at
> > > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > > createEntityManagerFactory(PersistenceBuilder.java:96)
> > > > > at
> > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > createApplication(Assembler.java:867)
> > > > > ... 10 more
> > > > > Caused by:
> > > > > org.apache.openejb.core.ivm.naming.LazyObjectReference$
> > > > > LazyNamingException:
> > > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > > at
> > > > > org.apache.openejb.core.ivm.naming.LazyObjectReference.
> > > > > getObject(LazyObjectReference.java:39)
> > > > > at org.apache.openejb.core.ivm.naming.IvmContext.lookup(
> > > > > IvmContext.java:176)
> > > > > at
> > > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > > createEntityManagerFactory(PersistenceBuilder.java:90)
> > > > > ... 11 more
> > > > >
> > > > >
> > > > > >
> > > > > > 2017-05-09 9:52 GMT+02:00 Violeta Georgieva <
> violetagg@apache.org
> >:
> > > > > >
> > > > > > > Hi,
> > > > > > >
> > > > > > > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <
> > > rmannibucau@gmail.com
> > > >:
> > > > > > > >
> > > > > > > > Hi Violeta,
> > > > > > > >
> > > > > > > > yes for ears intent was to put the descriptor in META-INF and
> the
> > > > > driver
> > > > > > > in
> > > > > > > > ear/lib. That said you can add Lazy=true to support wars.
> > > > > > >
> > > > > > > I tried to put the driver in the EAR/lib and the resources.xml
> file
> > > in
> > > > > > > EAR/META-INF.
> > > > > > > Unfortunately the driver still cannot be found. (exception
> below, I
> > > > > > > intentionally removed the hsqldb from TomEE/lib)
> > > > > > >
> > > > > > > Debugging the code I saw that the context class loader was used
> > > [1].
> > > > > The
> > > > > > > context class loader was the loader that contains TomEE/lib and
> not
> > > the
> > > > > > > EAR/lib.
> > > > > > >
> > > > > > > Shouldn't it use the EAR class loader?
> > > > > > >
> > > > > > > Regards,
> > > > > > > Violeta
> > > > > > >
> > > > > > > [1]
> > > > > > > https://github.com/apache/tomee/blob/master/container/
> > > > > > > openejb-core/src/main/java/org/apache/openejb/assembler/
> > > > > > > classic/Assembler.java#L2949
> > > > > > >
> > > > > > >  org.apache.xbean.propertyeditor.PropertyEditorException:
> Unable
> > > to
> > > > > > > resolve
> > > > > > > class org.hsqldb.jdbcDriver
> > > > > > > at
> > > > > > >
> > > > >
> > > org.apache.xbean.propertyeditor.ClassEditor.
> toObjectImpl(ClassEditor.java:
> > > > > > > 43)
> > > > > > > at
> > > > > > > org.apache.xbean.propertyeditor.AbstractConverter.toObject(
> > > > > > > AbstractConverter.java:86)
> > > > > > > at
> > > > > > > org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> > > > > > > PropertyEditors.java:284)
> > > > > > > at
> > > org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:181)
> > > > > > > at
> > > > > > > org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(
> > > > > > > ObjectRecipe.java:592)
> > > > > > > at
> > > > > > >
> > > > >
> > > org.apache.xbean.recipe.ObjectRecipe.internalCreate(
> ObjectRecipe.java:275)
> > > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > > AbstractRecipe.java:96)
> > > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > > AbstractRecipe.java:61)
> > > > > > > at
> > > > > > >
> > > > >
> > > org.apache.openejb.assembler.classic.Assembler.
> doCreateResource(Assembler.
> > > > > > > java:2970)
> > > > > > > at
> > > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > > createResource(Assembler.java:2803)
> > > > > > > at
> > > > > > > org.apache.openejb.config.ConfigurationFactory.doInstall(
> > > > > > > ConfigurationFactory.java:466)
> > > > > > > at
> > > > > > > org.apache.openejb.config.ConfigurationFactory.install(
> > > > > > > ConfigurationFactory.java:459)
> > > > > > > at
> > > > > > >
> > > > >
> > > org.apache.openejb.config.AutoConfig.installResource(
> AutoConfig.java:2194)
> > > > > > > at
> > > > > > > org.apache.openejb.config.AutoConfig.
> processApplicationResources(
> > > > > > > AutoConfig.java:1026)
> > > > > > > at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.
> > > java:190)
> > > > > > > at
> > > > > > > org.apache.openejb.config.ConfigurationFactory$Chain.
> > > > > > > deploy(ConfigurationFactory.java:420)
> > > > > > > at
> > > > > > > org.apache.openejb.config.ConfigurationFactory.
> > > configureApplication(
> > > > > > > ConfigurationFactory.java:1037)
> > > > > > > at
> > > > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > > > TomcatWebAppBuilder.java:2204)
> > > > > > > at
> > > > > > > org.apache.tomee.catalina.GlobalListenerSupport.
> lifecycleEvent(
> > > > > > > GlobalListenerSupport.java:141)
> > > > > > > at
> > > > > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > > > LifecycleBase.java:94)
> > > > > > > at
> > > > > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > > > ContainerBase.java:1164)
> > > > > > > at
> > > > > > > org.apache.catalina.core.ContainerBase$
> > > ContainerBackgroundProcessor.
> > > > > > > processChildren(ContainerBase.java:1388)
> > > > > > > at
> > > > > > > org.apache.catalina.core.ContainerBase$
> > > ContainerBackgroundProcessor.
> > > > > > > processChildren(ContainerBase.java:1392)
> > > > > > > at
> > > > > > > org.apache.catalina.core.ContainerBase$
> > > ContainerBackgroundProcessor.
> > > > > > > run(ContainerBase.java:1360)
> > > > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > > > Caused by: java.lang.ClassNotFoundException:
> org.hsqldb.jdbcDriver
> > > > > > > at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> > > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > > > > > > at java.lang.Class.forName0(Native Method)
> > > > > > > at java.lang.Class.forName(Class.java:348)
> > > > > > > at
> > > > > > >
> > > > >
> > > org.apache.xbean.propertyeditor.ClassEditor.
> toObjectImpl(ClassEditor.java:
> > > > > > > 40)
> > > > > > > ... 24 more
> > > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > Romain Manni-Bucau
> > > > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > > > > https://github.com/rmannibucau> |
> > > > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE
> > > Factory
> > > > > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > > > > >
> > > > > > > > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <
> > > violetagg@apache.org
> > > >:
> > > > > > > >
> > > > > > > > > Hi,
> > > > > > > > >
> > > > > > > > > I have WAR archive that contains a driver, located in
> > > WEB-INF/lib
> > > > > and
> > > > > > > > > resources.xml, located in WEB-INF. The WAR file is packaged
> in
> > > an
> > > > > EAR
> > > > > > > file.
> > > > > > > > > When I deploy the EAR file I receive an exception that the
> > > driver
> > > > > > > cannot be
> > > > > > > > > located (ClassNotFoundException).
> > > > > > > > > Isn't it possible to provide a driver with my WAR archive?
> > > > > > > > > I'm using TomEE WebProfile 7.0.3.
> > > > > > > > >
> > > > > > > > > Thanks a lot,
> > > > > > > > > Violeta
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > View this message in context: http://tomee-openejb.979440.
> > > > > > > > > n4.nabble.com/Driver-location-
> in-an-EAR-file-tp4681675.html
> > > > > > > > > Sent from the TomEE Users mailing list archive at
> Nabble.com.
> > > > > > > > >
> > > > > > >
> > > > >
> > >
>

Re: Driver location in an EAR file

Posted by Violeta Georgieva <vi...@apache.org>.
2017-05-09 13:24 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
>
> 2017-05-09 12:18 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
>
> > 2017-05-09 11:32 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> > >
> > > Right, lazy will not activate it early enough for JPA.
> > >
> > > Issue is we don't have the ear classloader (or webapp ones) when
wiring
> > the
> > > EE application, we can let JPA lazy retrieve the datasource if needed
but
> > > will still rely on lazy flag.
> >
> > Ok
> >
> > >
> > > Side note: think it is still recommanded to not load drivers from sub
JVM
> > > classloader cause they can't always be unloaded, isn't it?
> >
> > My use case is a container that holds TomEE + EAR application.
> > When it is started everything is started.
> > When it is stopped everything is stopped.
> >
> >
> If you own the container then you can define it in tomee.xml and use
> tomee/lib no? Did it get it wrong?

I do not own the app.
I wanted to achieve the following:
- If the app has a driver packaged in an EAR to use it as is
- If the app does not have a driver to supply such.

>
>
> > Thanks,
> > Violeta
> >
> > >
> > > Romain Manni-Bucau
> > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > <http://rmannibucau.wordpress.com> | Github <
> > https://github.com/rmannibucau> |
> > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > >
> > > 2017-05-09 10:26 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> > >
> > > > 2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau <rmannibucau@gmail.com
>:
> > > > >
> > > > > Guess you can still use Lazy=true.
> > > >
> > > > With Lazy flag I'm receiving the exception below. I tried
> > > > also UseAppClassLoader = true the exception is the same as below.
> > > >
> > > > org.apache.openejb.OpenEJBException: Could not lookup
> > <jta-data-source>
> > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > resolve
> > > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > resolve
> > > > class org.hsqldb.jdbcDriver
> > > > at
> > > > org.apache.openejb.assembler.classic.Assembler.
> > > > createApplication(Assembler.java:1042)
> > > > at
> > > > org.apache.openejb.assembler.classic.Assembler.
> > > > createApplication(Assembler.java:718)
> > > > at
> > > > org.apache.openejb.assembler.classic.Assembler.
> > > > createApplication(Assembler.java:714)
> > > > at
> > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > TomcatWebAppBuilder.java:2223)
> > > > at
> > > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > > > GlobalListenerSupport.java:141)
> > > > at
> > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > LifecycleBase.java:94)
> > > > at
> > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > ContainerBase.java:1164)
> > > > at
> > > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > > processChildren(ContainerBase.java:1388)
> > > > at
> > > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > > processChildren(ContainerBase.java:1392)
> > > > at
> > > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > > run(ContainerBase.java:1360)
> > > > at java.lang.Thread.run(Thread.java:745)
> > > > Caused by: org.apache.openejb.OpenEJBException:
> > > > org.apache.openejb.OpenEJBException: Could not lookup
> > <jta-data-source>
> > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > resolve
> > > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> > resolve
> > > > class org.hsqldb.jdbcDriver
> > > > at
> > > > org.apache.openejb.assembler.classic.Assembler.
> > > > createApplication(Assembler.java:873)
> > > > ... 10 more
> > > > Caused by: org.apache.openejb.OpenEJBException: Could not lookup
> > > > <jta-data-source> 'openejb/Resource/eartest/jdbc/mydb' for unit
> > 'mydb':
> > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > at
> > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > createEntityManagerFactory(PersistenceBuilder.java:96)
> > > > at
> > > > org.apache.openejb.assembler.classic.Assembler.
> > > > createApplication(Assembler.java:867)
> > > > ... 10 more
> > > > Caused by:
> > > > org.apache.openejb.core.ivm.naming.LazyObjectReference$
> > > > LazyNamingException:
> > > > Unable to resolve class org.hsqldb.jdbcDriver
> > > > at
> > > > org.apache.openejb.core.ivm.naming.LazyObjectReference.
> > > > getObject(LazyObjectReference.java:39)
> > > > at org.apache.openejb.core.ivm.naming.IvmContext.lookup(
> > > > IvmContext.java:176)
> > > > at
> > > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > > createEntityManagerFactory(PersistenceBuilder.java:90)
> > > > ... 11 more
> > > >
> > > >
> > > > >
> > > > > 2017-05-09 9:52 GMT+02:00 Violeta Georgieva <violetagg@apache.org
>:
> > > > >
> > > > > > Hi,
> > > > > >
> > > > > > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <
> > rmannibucau@gmail.com
> > >:
> > > > > > >
> > > > > > > Hi Violeta,
> > > > > > >
> > > > > > > yes for ears intent was to put the descriptor in META-INF and
the
> > > > driver
> > > > > > in
> > > > > > > ear/lib. That said you can add Lazy=true to support wars.
> > > > > >
> > > > > > I tried to put the driver in the EAR/lib and the resources.xml
file
> > in
> > > > > > EAR/META-INF.
> > > > > > Unfortunately the driver still cannot be found. (exception
below, I
> > > > > > intentionally removed the hsqldb from TomEE/lib)
> > > > > >
> > > > > > Debugging the code I saw that the context class loader was used
> > [1].
> > > > The
> > > > > > context class loader was the loader that contains TomEE/lib and
not
> > the
> > > > > > EAR/lib.
> > > > > >
> > > > > > Shouldn't it use the EAR class loader?
> > > > > >
> > > > > > Regards,
> > > > > > Violeta
> > > > > >
> > > > > > [1]
> > > > > > https://github.com/apache/tomee/blob/master/container/
> > > > > > openejb-core/src/main/java/org/apache/openejb/assembler/
> > > > > > classic/Assembler.java#L2949
> > > > > >
> > > > > >  org.apache.xbean.propertyeditor.PropertyEditorException: Unable
> > to
> > > > > > resolve
> > > > > > class org.hsqldb.jdbcDriver
> > > > > > at
> > > > > >
> > > >
> > org.apache.xbean.propertyeditor.ClassEditor.
toObjectImpl(ClassEditor.java:
> > > > > > 43)
> > > > > > at
> > > > > > org.apache.xbean.propertyeditor.AbstractConverter.toObject(
> > > > > > AbstractConverter.java:86)
> > > > > > at
> > > > > > org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> > > > > > PropertyEditors.java:284)
> > > > > > at
> > org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:181)
> > > > > > at
> > > > > > org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(
> > > > > > ObjectRecipe.java:592)
> > > > > > at
> > > > > >
> > > >
> > org.apache.xbean.recipe.ObjectRecipe.internalCreate(
ObjectRecipe.java:275)
> > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > AbstractRecipe.java:96)
> > > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > > AbstractRecipe.java:61)
> > > > > > at
> > > > > >
> > > >
> > org.apache.openejb.assembler.classic.Assembler.
doCreateResource(Assembler.
> > > > > > java:2970)
> > > > > > at
> > > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > > createResource(Assembler.java:2803)
> > > > > > at
> > > > > > org.apache.openejb.config.ConfigurationFactory.doInstall(
> > > > > > ConfigurationFactory.java:466)
> > > > > > at
> > > > > > org.apache.openejb.config.ConfigurationFactory.install(
> > > > > > ConfigurationFactory.java:459)
> > > > > > at
> > > > > >
> > > >
> > org.apache.openejb.config.AutoConfig.installResource(
AutoConfig.java:2194)
> > > > > > at
> > > > > > org.apache.openejb.config.AutoConfig.
processApplicationResources(
> > > > > > AutoConfig.java:1026)
> > > > > > at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.
> > java:190)
> > > > > > at
> > > > > > org.apache.openejb.config.ConfigurationFactory$Chain.
> > > > > > deploy(ConfigurationFactory.java:420)
> > > > > > at
> > > > > > org.apache.openejb.config.ConfigurationFactory.
> > configureApplication(
> > > > > > ConfigurationFactory.java:1037)
> > > > > > at
> > > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > > TomcatWebAppBuilder.java:2204)
> > > > > > at
> > > > > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > > > > > GlobalListenerSupport.java:141)
> > > > > > at
> > > > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > > LifecycleBase.java:94)
> > > > > > at
> > > > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > > ContainerBase.java:1164)
> > > > > > at
> > > > > > org.apache.catalina.core.ContainerBase$
> > ContainerBackgroundProcessor.
> > > > > > processChildren(ContainerBase.java:1388)
> > > > > > at
> > > > > > org.apache.catalina.core.ContainerBase$
> > ContainerBackgroundProcessor.
> > > > > > processChildren(ContainerBase.java:1392)
> > > > > > at
> > > > > > org.apache.catalina.core.ContainerBase$
> > ContainerBackgroundProcessor.
> > > > > > run(ContainerBase.java:1360)
> > > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > > Caused by: java.lang.ClassNotFoundException:
org.hsqldb.jdbcDriver
> > > > > > at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > > > > > at java.lang.Class.forName0(Native Method)
> > > > > > at java.lang.Class.forName(Class.java:348)
> > > > > > at
> > > > > >
> > > >
> > org.apache.xbean.propertyeditor.ClassEditor.
toObjectImpl(ClassEditor.java:
> > > > > > 40)
> > > > > > ... 24 more
> > > > > >
> > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Romain Manni-Bucau
> > > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > > > https://github.com/rmannibucau> |
> > > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE
> > Factory
> > > > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > > > >
> > > > > > > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <
> > violetagg@apache.org
> > >:
> > > > > > >
> > > > > > > > Hi,
> > > > > > > >
> > > > > > > > I have WAR archive that contains a driver, located in
> > WEB-INF/lib
> > > > and
> > > > > > > > resources.xml, located in WEB-INF. The WAR file is packaged
in
> > an
> > > > EAR
> > > > > > file.
> > > > > > > > When I deploy the EAR file I receive an exception that the
> > driver
> > > > > > cannot be
> > > > > > > > located (ClassNotFoundException).
> > > > > > > > Isn't it possible to provide a driver with my WAR archive?
> > > > > > > > I'm using TomEE WebProfile 7.0.3.
> > > > > > > >
> > > > > > > > Thanks a lot,
> > > > > > > > Violeta
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > View this message in context: http://tomee-openejb.979440.
> > > > > > > > n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675.html
> > > > > > > > Sent from the TomEE Users mailing list archive at
Nabble.com.
> > > > > > > >
> > > > > >
> > > >
> >

Re: Driver location in an EAR file

Posted by Romain Manni-Bucau <rm...@gmail.com>.
2017-05-09 12:18 GMT+02:00 Violeta Georgieva <vi...@apache.org>:

> 2017-05-09 11:32 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> >
> > Right, lazy will not activate it early enough for JPA.
> >
> > Issue is we don't have the ear classloader (or webapp ones) when wiring
> the
> > EE application, we can let JPA lazy retrieve the datasource if needed but
> > will still rely on lazy flag.
>
> Ok
>
> >
> > Side note: think it is still recommanded to not load drivers from sub JVM
> > classloader cause they can't always be unloaded, isn't it?
>
> My use case is a container that holds TomEE + EAR application.
> When it is started everything is started.
> When it is stopped everything is stopped.
>
>
If you own the container then you can define it in tomee.xml and use
tomee/lib no? Did it get it wrong?


> Thanks,
> Violeta
>
> >
> > Romain Manni-Bucau
> > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > <http://rmannibucau.wordpress.com> | Github <
> https://github.com/rmannibucau> |
> > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > <https://javaeefactory-rmannibucau.rhcloud.com>
> >
> > 2017-05-09 10:26 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> >
> > > 2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> > > >
> > > > Guess you can still use Lazy=true.
> > >
> > > With Lazy flag I'm receiving the exception below. I tried
> > > also UseAppClassLoader = true the exception is the same as below.
> > >
> > > org.apache.openejb.OpenEJBException: Could not lookup
> <jta-data-source>
> > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> resolve
> > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> resolve
> > > class org.hsqldb.jdbcDriver
> > > at
> > > org.apache.openejb.assembler.classic.Assembler.
> > > createApplication(Assembler.java:1042)
> > > at
> > > org.apache.openejb.assembler.classic.Assembler.
> > > createApplication(Assembler.java:718)
> > > at
> > > org.apache.openejb.assembler.classic.Assembler.
> > > createApplication(Assembler.java:714)
> > > at
> > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > TomcatWebAppBuilder.java:2223)
> > > at
> > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > > GlobalListenerSupport.java:141)
> > > at
> > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > LifecycleBase.java:94)
> > > at
> > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > ContainerBase.java:1164)
> > > at
> > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > processChildren(ContainerBase.java:1388)
> > > at
> > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > processChildren(ContainerBase.java:1392)
> > > at
> > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > run(ContainerBase.java:1360)
> > > at java.lang.Thread.run(Thread.java:745)
> > > Caused by: org.apache.openejb.OpenEJBException:
> > > org.apache.openejb.OpenEJBException: Could not lookup
> <jta-data-source>
> > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> resolve
> > > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to
> resolve
> > > class org.hsqldb.jdbcDriver
> > > at
> > > org.apache.openejb.assembler.classic.Assembler.
> > > createApplication(Assembler.java:873)
> > > ... 10 more
> > > Caused by: org.apache.openejb.OpenEJBException: Could not lookup
> > > <jta-data-source> 'openejb/Resource/eartest/jdbc/mydb' for unit
> 'mydb':
> > > Unable to resolve class org.hsqldb.jdbcDriver
> > > at
> > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > createEntityManagerFactory(PersistenceBuilder.java:96)
> > > at
> > > org.apache.openejb.assembler.classic.Assembler.
> > > createApplication(Assembler.java:867)
> > > ... 10 more
> > > Caused by:
> > > org.apache.openejb.core.ivm.naming.LazyObjectReference$
> > > LazyNamingException:
> > > Unable to resolve class org.hsqldb.jdbcDriver
> > > at
> > > org.apache.openejb.core.ivm.naming.LazyObjectReference.
> > > getObject(LazyObjectReference.java:39)
> > > at org.apache.openejb.core.ivm.naming.IvmContext.lookup(
> > > IvmContext.java:176)
> > > at
> > > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > > createEntityManagerFactory(PersistenceBuilder.java:90)
> > > ... 11 more
> > >
> > >
> > > >
> > > > 2017-05-09 9:52 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> > > >
> > > > > Hi,
> > > > >
> > > > > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <
> rmannibucau@gmail.com
> >:
> > > > > >
> > > > > > Hi Violeta,
> > > > > >
> > > > > > yes for ears intent was to put the descriptor in META-INF and the
> > > driver
> > > > > in
> > > > > > ear/lib. That said you can add Lazy=true to support wars.
> > > > >
> > > > > I tried to put the driver in the EAR/lib and the resources.xml file
> in
> > > > > EAR/META-INF.
> > > > > Unfortunately the driver still cannot be found. (exception below, I
> > > > > intentionally removed the hsqldb from TomEE/lib)
> > > > >
> > > > > Debugging the code I saw that the context class loader was used
> [1].
> > > The
> > > > > context class loader was the loader that contains TomEE/lib and not
> the
> > > > > EAR/lib.
> > > > >
> > > > > Shouldn't it use the EAR class loader?
> > > > >
> > > > > Regards,
> > > > > Violeta
> > > > >
> > > > > [1]
> > > > > https://github.com/apache/tomee/blob/master/container/
> > > > > openejb-core/src/main/java/org/apache/openejb/assembler/
> > > > > classic/Assembler.java#L2949
> > > > >
> > > > >  org.apache.xbean.propertyeditor.PropertyEditorException: Unable
> to
> > > > > resolve
> > > > > class org.hsqldb.jdbcDriver
> > > > > at
> > > > >
> > >
> org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> > > > > 43)
> > > > > at
> > > > > org.apache.xbean.propertyeditor.AbstractConverter.toObject(
> > > > > AbstractConverter.java:86)
> > > > > at
> > > > > org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> > > > > PropertyEditors.java:284)
> > > > > at
> org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:181)
> > > > > at
> > > > > org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(
> > > > > ObjectRecipe.java:592)
> > > > > at
> > > > >
> > >
> org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
> > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > AbstractRecipe.java:96)
> > > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > > AbstractRecipe.java:61)
> > > > > at
> > > > >
> > >
> org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.
> > > > > java:2970)
> > > > > at
> > > > > org.apache.openejb.assembler.classic.Assembler.
> > > > > createResource(Assembler.java:2803)
> > > > > at
> > > > > org.apache.openejb.config.ConfigurationFactory.doInstall(
> > > > > ConfigurationFactory.java:466)
> > > > > at
> > > > > org.apache.openejb.config.ConfigurationFactory.install(
> > > > > ConfigurationFactory.java:459)
> > > > > at
> > > > >
> > >
> org.apache.openejb.config.AutoConfig.installResource(AutoConfig.java:2194)
> > > > > at
> > > > > org.apache.openejb.config.AutoConfig.processApplicationResources(
> > > > > AutoConfig.java:1026)
> > > > > at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.
> java:190)
> > > > > at
> > > > > org.apache.openejb.config.ConfigurationFactory$Chain.
> > > > > deploy(ConfigurationFactory.java:420)
> > > > > at
> > > > > org.apache.openejb.config.ConfigurationFactory.
> configureApplication(
> > > > > ConfigurationFactory.java:1037)
> > > > > at
> > > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > > TomcatWebAppBuilder.java:2204)
> > > > > at
> > > > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > > > > GlobalListenerSupport.java:141)
> > > > > at
> > > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > > LifecycleBase.java:94)
> > > > > at
> > > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > > ContainerBase.java:1164)
> > > > > at
> > > > > org.apache.catalina.core.ContainerBase$
> ContainerBackgroundProcessor.
> > > > > processChildren(ContainerBase.java:1388)
> > > > > at
> > > > > org.apache.catalina.core.ContainerBase$
> ContainerBackgroundProcessor.
> > > > > processChildren(ContainerBase.java:1392)
> > > > > at
> > > > > org.apache.catalina.core.ContainerBase$
> ContainerBackgroundProcessor.
> > > > > run(ContainerBase.java:1360)
> > > > > at java.lang.Thread.run(Thread.java:745)
> > > > > Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver
> > > > > at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > > > > at java.lang.Class.forName0(Native Method)
> > > > > at java.lang.Class.forName(Class.java:348)
> > > > > at
> > > > >
> > >
> org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> > > > > 40)
> > > > > ... 24 more
> > > > >
> > > > >
> > > > > >
> > > > > >
> > > > > > Romain Manni-Bucau
> > > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > > https://github.com/rmannibucau> |
> > > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE
> Factory
> > > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > > >
> > > > > > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <
> violetagg@apache.org
> >:
> > > > > >
> > > > > > > Hi,
> > > > > > >
> > > > > > > I have WAR archive that contains a driver, located in
> WEB-INF/lib
> > > and
> > > > > > > resources.xml, located in WEB-INF. The WAR file is packaged in
> an
> > > EAR
> > > > > file.
> > > > > > > When I deploy the EAR file I receive an exception that the
> driver
> > > > > cannot be
> > > > > > > located (ClassNotFoundException).
> > > > > > > Isn't it possible to provide a driver with my WAR archive?
> > > > > > > I'm using TomEE WebProfile 7.0.3.
> > > > > > >
> > > > > > > Thanks a lot,
> > > > > > > Violeta
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > View this message in context: http://tomee-openejb.979440.
> > > > > > > n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675.html
> > > > > > > Sent from the TomEE Users mailing list archive at Nabble.com.
> > > > > > >
> > > > >
> > >
>

Re: Driver location in an EAR file

Posted by Violeta Georgieva <vi...@apache.org>.
2017-05-09 11:32 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
>
> Right, lazy will not activate it early enough for JPA.
>
> Issue is we don't have the ear classloader (or webapp ones) when wiring
the
> EE application, we can let JPA lazy retrieve the datasource if needed but
> will still rely on lazy flag.

Ok

>
> Side note: think it is still recommanded to not load drivers from sub JVM
> classloader cause they can't always be unloaded, isn't it?

My use case is a container that holds TomEE + EAR application.
When it is started everything is started.
When it is stopped everything is stopped.

Thanks,
Violeta

>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <
https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
>
> 2017-05-09 10:26 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
>
> > 2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> > >
> > > Guess you can still use Lazy=true.
> >
> > With Lazy flag I'm receiving the exception below. I tried
> > also UseAppClassLoader = true the exception is the same as below.
> >
> > org.apache.openejb.OpenEJBException: Could not lookup <jta-data-source>
> > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
> > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
> > class org.hsqldb.jdbcDriver
> > at
> > org.apache.openejb.assembler.classic.Assembler.
> > createApplication(Assembler.java:1042)
> > at
> > org.apache.openejb.assembler.classic.Assembler.
> > createApplication(Assembler.java:718)
> > at
> > org.apache.openejb.assembler.classic.Assembler.
> > createApplication(Assembler.java:714)
> > at
> > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > TomcatWebAppBuilder.java:2223)
> > at
> > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > GlobalListenerSupport.java:141)
> > at
> > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > LifecycleBase.java:94)
> > at
> > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > ContainerBase.java:1164)
> > at
> > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > processChildren(ContainerBase.java:1388)
> > at
> > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > processChildren(ContainerBase.java:1392)
> > at
> > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > run(ContainerBase.java:1360)
> > at java.lang.Thread.run(Thread.java:745)
> > Caused by: org.apache.openejb.OpenEJBException:
> > org.apache.openejb.OpenEJBException: Could not lookup <jta-data-source>
> > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
> > class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> > 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
> > class org.hsqldb.jdbcDriver
> > at
> > org.apache.openejb.assembler.classic.Assembler.
> > createApplication(Assembler.java:873)
> > ... 10 more
> > Caused by: org.apache.openejb.OpenEJBException: Could not lookup
> > <jta-data-source> 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb':
> > Unable to resolve class org.hsqldb.jdbcDriver
> > at
> > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > createEntityManagerFactory(PersistenceBuilder.java:96)
> > at
> > org.apache.openejb.assembler.classic.Assembler.
> > createApplication(Assembler.java:867)
> > ... 10 more
> > Caused by:
> > org.apache.openejb.core.ivm.naming.LazyObjectReference$
> > LazyNamingException:
> > Unable to resolve class org.hsqldb.jdbcDriver
> > at
> > org.apache.openejb.core.ivm.naming.LazyObjectReference.
> > getObject(LazyObjectReference.java:39)
> > at org.apache.openejb.core.ivm.naming.IvmContext.lookup(
> > IvmContext.java:176)
> > at
> > org.apache.openejb.assembler.classic.PersistenceBuilder.
> > createEntityManagerFactory(PersistenceBuilder.java:90)
> > ... 11 more
> >
> >
> > >
> > > 2017-05-09 9:52 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> > >
> > > > Hi,
> > > >
> > > > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <rmannibucau@gmail.com
>:
> > > > >
> > > > > Hi Violeta,
> > > > >
> > > > > yes for ears intent was to put the descriptor in META-INF and the
> > driver
> > > > in
> > > > > ear/lib. That said you can add Lazy=true to support wars.
> > > >
> > > > I tried to put the driver in the EAR/lib and the resources.xml file
in
> > > > EAR/META-INF.
> > > > Unfortunately the driver still cannot be found. (exception below, I
> > > > intentionally removed the hsqldb from TomEE/lib)
> > > >
> > > > Debugging the code I saw that the context class loader was used [1].
> > The
> > > > context class loader was the loader that contains TomEE/lib and not
the
> > > > EAR/lib.
> > > >
> > > > Shouldn't it use the EAR class loader?
> > > >
> > > > Regards,
> > > > Violeta
> > > >
> > > > [1]
> > > > https://github.com/apache/tomee/blob/master/container/
> > > > openejb-core/src/main/java/org/apache/openejb/assembler/
> > > > classic/Assembler.java#L2949
> > > >
> > > >  org.apache.xbean.propertyeditor.PropertyEditorException: Unable to
> > > > resolve
> > > > class org.hsqldb.jdbcDriver
> > > > at
> > > >
> >
org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> > > > 43)
> > > > at
> > > > org.apache.xbean.propertyeditor.AbstractConverter.toObject(
> > > > AbstractConverter.java:86)
> > > > at
> > > > org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> > > > PropertyEditors.java:284)
> > > > at
org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:181)
> > > > at
> > > > org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(
> > > > ObjectRecipe.java:592)
> > > > at
> > > >
> >
org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
> > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > AbstractRecipe.java:96)
> > > > at org.apache.xbean.recipe.AbstractRecipe.create(
> > AbstractRecipe.java:61)
> > > > at
> > > >
> >
org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.
> > > > java:2970)
> > > > at
> > > > org.apache.openejb.assembler.classic.Assembler.
> > > > createResource(Assembler.java:2803)
> > > > at
> > > > org.apache.openejb.config.ConfigurationFactory.doInstall(
> > > > ConfigurationFactory.java:466)
> > > > at
> > > > org.apache.openejb.config.ConfigurationFactory.install(
> > > > ConfigurationFactory.java:459)
> > > > at
> > > >
> >
org.apache.openejb.config.AutoConfig.installResource(AutoConfig.java:2194)
> > > > at
> > > > org.apache.openejb.config.AutoConfig.processApplicationResources(
> > > > AutoConfig.java:1026)
> > > > at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:190)
> > > > at
> > > > org.apache.openejb.config.ConfigurationFactory$Chain.
> > > > deploy(ConfigurationFactory.java:420)
> > > > at
> > > > org.apache.openejb.config.ConfigurationFactory.configureApplication(
> > > > ConfigurationFactory.java:1037)
> > > > at
> > > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > > TomcatWebAppBuilder.java:2204)
> > > > at
> > > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > > > GlobalListenerSupport.java:141)
> > > > at
> > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > > LifecycleBase.java:94)
> > > > at
> > > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > > ContainerBase.java:1164)
> > > > at
> > > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > > processChildren(ContainerBase.java:1388)
> > > > at
> > > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > > processChildren(ContainerBase.java:1392)
> > > > at
> > > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > > run(ContainerBase.java:1360)
> > > > at java.lang.Thread.run(Thread.java:745)
> > > > Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver
> > > > at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > > > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > > > at java.lang.Class.forName0(Native Method)
> > > > at java.lang.Class.forName(Class.java:348)
> > > > at
> > > >
> >
org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> > > > 40)
> > > > ... 24 more
> > > >
> > > >
> > > > >
> > > > >
> > > > > Romain Manni-Bucau
> > > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > > <http://rmannibucau.wordpress.com> | Github <
> > > > https://github.com/rmannibucau> |
> > > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE
Factory
> > > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > > >
> > > > > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <violetagg@apache.org
>:
> > > > >
> > > > > > Hi,
> > > > > >
> > > > > > I have WAR archive that contains a driver, located in
WEB-INF/lib
> > and
> > > > > > resources.xml, located in WEB-INF. The WAR file is packaged in
an
> > EAR
> > > > file.
> > > > > > When I deploy the EAR file I receive an exception that the
driver
> > > > cannot be
> > > > > > located (ClassNotFoundException).
> > > > > > Isn't it possible to provide a driver with my WAR archive?
> > > > > > I'm using TomEE WebProfile 7.0.3.
> > > > > >
> > > > > > Thanks a lot,
> > > > > > Violeta
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > View this message in context: http://tomee-openejb.979440.
> > > > > > n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675.html
> > > > > > Sent from the TomEE Users mailing list archive at Nabble.com.
> > > > > >
> > > >
> >

Re: Driver location in an EAR file

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Right, lazy will not activate it early enough for JPA.

Issue is we don't have the ear classloader (or webapp ones) when wiring the
EE application, we can let JPA lazy retrieve the datasource if needed but
will still rely on lazy flag.

Side note: think it is still recommanded to not load drivers from sub JVM
classloader cause they can't always be unloaded, isn't it?


Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://blog-rmannibucau.rhcloud.com> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
<https://javaeefactory-rmannibucau.rhcloud.com>

2017-05-09 10:26 GMT+02:00 Violeta Georgieva <vi...@apache.org>:

> 2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> >
> > Guess you can still use Lazy=true.
>
> With Lazy flag I'm receiving the exception below. I tried
> also UseAppClassLoader = true the exception is the same as below.
>
> org.apache.openejb.OpenEJBException: Could not lookup <jta-data-source>
> 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
> class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
> class org.hsqldb.jdbcDriver
> at
> org.apache.openejb.assembler.classic.Assembler.
> createApplication(Assembler.java:1042)
> at
> org.apache.openejb.assembler.classic.Assembler.
> createApplication(Assembler.java:718)
> at
> org.apache.openejb.assembler.classic.Assembler.
> createApplication(Assembler.java:714)
> at
> org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> TomcatWebAppBuilder.java:2223)
> at
> org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> GlobalListenerSupport.java:141)
> at
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> LifecycleBase.java:94)
> at
> org.apache.catalina.core.ContainerBase.backgroundProcess(
> ContainerBase.java:1164)
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> processChildren(ContainerBase.java:1388)
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> processChildren(ContainerBase.java:1392)
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> run(ContainerBase.java:1360)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: org.apache.openejb.OpenEJBException:
> org.apache.openejb.OpenEJBException: Could not lookup <jta-data-source>
> 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
> class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
> 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
> class org.hsqldb.jdbcDriver
> at
> org.apache.openejb.assembler.classic.Assembler.
> createApplication(Assembler.java:873)
> ... 10 more
> Caused by: org.apache.openejb.OpenEJBException: Could not lookup
> <jta-data-source> 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb':
> Unable to resolve class org.hsqldb.jdbcDriver
> at
> org.apache.openejb.assembler.classic.PersistenceBuilder.
> createEntityManagerFactory(PersistenceBuilder.java:96)
> at
> org.apache.openejb.assembler.classic.Assembler.
> createApplication(Assembler.java:867)
> ... 10 more
> Caused by:
> org.apache.openejb.core.ivm.naming.LazyObjectReference$
> LazyNamingException:
> Unable to resolve class org.hsqldb.jdbcDriver
> at
> org.apache.openejb.core.ivm.naming.LazyObjectReference.
> getObject(LazyObjectReference.java:39)
> at org.apache.openejb.core.ivm.naming.IvmContext.lookup(
> IvmContext.java:176)
> at
> org.apache.openejb.assembler.classic.PersistenceBuilder.
> createEntityManagerFactory(PersistenceBuilder.java:90)
> ... 11 more
>
>
> >
> > 2017-05-09 9:52 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> >
> > > Hi,
> > >
> > > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> > > >
> > > > Hi Violeta,
> > > >
> > > > yes for ears intent was to put the descriptor in META-INF and the
> driver
> > > in
> > > > ear/lib. That said you can add Lazy=true to support wars.
> > >
> > > I tried to put the driver in the EAR/lib and the resources.xml file in
> > > EAR/META-INF.
> > > Unfortunately the driver still cannot be found. (exception below, I
> > > intentionally removed the hsqldb from TomEE/lib)
> > >
> > > Debugging the code I saw that the context class loader was used [1].
> The
> > > context class loader was the loader that contains TomEE/lib and not the
> > > EAR/lib.
> > >
> > > Shouldn't it use the EAR class loader?
> > >
> > > Regards,
> > > Violeta
> > >
> > > [1]
> > > https://github.com/apache/tomee/blob/master/container/
> > > openejb-core/src/main/java/org/apache/openejb/assembler/
> > > classic/Assembler.java#L2949
> > >
> > >  org.apache.xbean.propertyeditor.PropertyEditorException: Unable to
> > > resolve
> > > class org.hsqldb.jdbcDriver
> > > at
> > >
> org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> > > 43)
> > > at
> > > org.apache.xbean.propertyeditor.AbstractConverter.toObject(
> > > AbstractConverter.java:86)
> > > at
> > > org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> > > PropertyEditors.java:284)
> > > at org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:181)
> > > at
> > > org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(
> > > ObjectRecipe.java:592)
> > > at
> > >
> org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
> > > at org.apache.xbean.recipe.AbstractRecipe.create(
> AbstractRecipe.java:96)
> > > at org.apache.xbean.recipe.AbstractRecipe.create(
> AbstractRecipe.java:61)
> > > at
> > >
> org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.
> > > java:2970)
> > > at
> > > org.apache.openejb.assembler.classic.Assembler.
> > > createResource(Assembler.java:2803)
> > > at
> > > org.apache.openejb.config.ConfigurationFactory.doInstall(
> > > ConfigurationFactory.java:466)
> > > at
> > > org.apache.openejb.config.ConfigurationFactory.install(
> > > ConfigurationFactory.java:459)
> > > at
> > >
> org.apache.openejb.config.AutoConfig.installResource(AutoConfig.java:2194)
> > > at
> > > org.apache.openejb.config.AutoConfig.processApplicationResources(
> > > AutoConfig.java:1026)
> > > at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:190)
> > > at
> > > org.apache.openejb.config.ConfigurationFactory$Chain.
> > > deploy(ConfigurationFactory.java:420)
> > > at
> > > org.apache.openejb.config.ConfigurationFactory.configureApplication(
> > > ConfigurationFactory.java:1037)
> > > at
> > > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > > TomcatWebAppBuilder.java:2204)
> > > at
> > > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > > GlobalListenerSupport.java:141)
> > > at
> > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > > LifecycleBase.java:94)
> > > at
> > > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > > ContainerBase.java:1164)
> > > at
> > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > processChildren(ContainerBase.java:1388)
> > > at
> > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > processChildren(ContainerBase.java:1392)
> > > at
> > > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > > run(ContainerBase.java:1360)
> > > at java.lang.Thread.run(Thread.java:745)
> > > Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver
> > > at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> > > at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > > at java.lang.Class.forName0(Native Method)
> > > at java.lang.Class.forName(Class.java:348)
> > > at
> > >
> org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> > > 40)
> > > ... 24 more
> > >
> > >
> > > >
> > > >
> > > > Romain Manni-Bucau
> > > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > > <http://rmannibucau.wordpress.com> | Github <
> > > https://github.com/rmannibucau> |
> > > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > > >
> > > > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> > > >
> > > > > Hi,
> > > > >
> > > > > I have WAR archive that contains a driver, located in WEB-INF/lib
> and
> > > > > resources.xml, located in WEB-INF. The WAR file is packaged in an
> EAR
> > > file.
> > > > > When I deploy the EAR file I receive an exception that the driver
> > > cannot be
> > > > > located (ClassNotFoundException).
> > > > > Isn't it possible to provide a driver with my WAR archive?
> > > > > I'm using TomEE WebProfile 7.0.3.
> > > > >
> > > > > Thanks a lot,
> > > > > Violeta
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > View this message in context: http://tomee-openejb.979440.
> > > > > n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675.html
> > > > > Sent from the TomEE Users mailing list archive at Nabble.com.
> > > > >
> > >
>

Re: Driver location in an EAR file

Posted by Violeta Georgieva <vi...@apache.org>.
2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
>
> Guess you can still use Lazy=true.

With Lazy flag I'm receiving the exception below. I tried
also UseAppClassLoader = true the exception is the same as below.

org.apache.openejb.OpenEJBException: Could not lookup <jta-data-source>
'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
class org.hsqldb.jdbcDriver
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:1042)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:718)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:714)
at
org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(TomcatWebAppBuilder.java:2223)
at
org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:141)
at
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1164)
at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1388)
at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1392)
at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1360)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.openejb.OpenEJBException:
org.apache.openejb.OpenEJBException: Could not lookup <jta-data-source>
'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
class org.hsqldb.jdbcDriver: Could not lookup <jta-data-source>
'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb': Unable to resolve
class org.hsqldb.jdbcDriver
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:873)
... 10 more
Caused by: org.apache.openejb.OpenEJBException: Could not lookup
<jta-data-source> 'openejb/Resource/eartest/jdbc/mydb' for unit 'mydb':
Unable to resolve class org.hsqldb.jdbcDriver
at
org.apache.openejb.assembler.classic.PersistenceBuilder.createEntityManagerFactory(PersistenceBuilder.java:96)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:867)
... 10 more
Caused by:
org.apache.openejb.core.ivm.naming.LazyObjectReference$LazyNamingException:
Unable to resolve class org.hsqldb.jdbcDriver
at
org.apache.openejb.core.ivm.naming.LazyObjectReference.getObject(LazyObjectReference.java:39)
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:176)
at
org.apache.openejb.assembler.classic.PersistenceBuilder.createEntityManagerFactory(PersistenceBuilder.java:90)
... 11 more


>
> 2017-05-09 9:52 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
>
> > Hi,
> >
> > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> > >
> > > Hi Violeta,
> > >
> > > yes for ears intent was to put the descriptor in META-INF and the
driver
> > in
> > > ear/lib. That said you can add Lazy=true to support wars.
> >
> > I tried to put the driver in the EAR/lib and the resources.xml file in
> > EAR/META-INF.
> > Unfortunately the driver still cannot be found. (exception below, I
> > intentionally removed the hsqldb from TomEE/lib)
> >
> > Debugging the code I saw that the context class loader was used [1]. The
> > context class loader was the loader that contains TomEE/lib and not the
> > EAR/lib.
> >
> > Shouldn't it use the EAR class loader?
> >
> > Regards,
> > Violeta
> >
> > [1]
> > https://github.com/apache/tomee/blob/master/container/
> > openejb-core/src/main/java/org/apache/openejb/assembler/
> > classic/Assembler.java#L2949
> >
> >  org.apache.xbean.propertyeditor.PropertyEditorException: Unable to
> > resolve
> > class org.hsqldb.jdbcDriver
> > at
> >
org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> > 43)
> > at
> > org.apache.xbean.propertyeditor.AbstractConverter.toObject(
> > AbstractConverter.java:86)
> > at
> > org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> > PropertyEditors.java:284)
> > at org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:181)
> > at
> > org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(
> > ObjectRecipe.java:592)
> > at
> >
org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
> > at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
> > at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
> > at
> >
org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.
> > java:2970)
> > at
> > org.apache.openejb.assembler.classic.Assembler.
> > createResource(Assembler.java:2803)
> > at
> > org.apache.openejb.config.ConfigurationFactory.doInstall(
> > ConfigurationFactory.java:466)
> > at
> > org.apache.openejb.config.ConfigurationFactory.install(
> > ConfigurationFactory.java:459)
> > at
> >
org.apache.openejb.config.AutoConfig.installResource(AutoConfig.java:2194)
> > at
> > org.apache.openejb.config.AutoConfig.processApplicationResources(
> > AutoConfig.java:1026)
> > at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:190)
> > at
> > org.apache.openejb.config.ConfigurationFactory$Chain.
> > deploy(ConfigurationFactory.java:420)
> > at
> > org.apache.openejb.config.ConfigurationFactory.configureApplication(
> > ConfigurationFactory.java:1037)
> > at
> > org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> > TomcatWebAppBuilder.java:2204)
> > at
> > org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> > GlobalListenerSupport.java:141)
> > at
> > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> > LifecycleBase.java:94)
> > at
> > org.apache.catalina.core.ContainerBase.backgroundProcess(
> > ContainerBase.java:1164)
> > at
> > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > processChildren(ContainerBase.java:1388)
> > at
> > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > processChildren(ContainerBase.java:1392)
> > at
> > org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> > run(ContainerBase.java:1360)
> > at java.lang.Thread.run(Thread.java:745)
> > Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver
> > at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> > at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> > at java.lang.Class.forName0(Native Method)
> > at java.lang.Class.forName(Class.java:348)
> > at
> >
org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> > 40)
> > ... 24 more
> >
> >
> > >
> > >
> > > Romain Manni-Bucau
> > > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > > <http://rmannibucau.wordpress.com> | Github <
> > https://github.com/rmannibucau> |
> > > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > > <https://javaeefactory-rmannibucau.rhcloud.com>
> > >
> > > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> > >
> > > > Hi,
> > > >
> > > > I have WAR archive that contains a driver, located in WEB-INF/lib
and
> > > > resources.xml, located in WEB-INF. The WAR file is packaged in an
EAR
> > file.
> > > > When I deploy the EAR file I receive an exception that the driver
> > cannot be
> > > > located (ClassNotFoundException).
> > > > Isn't it possible to provide a driver with my WAR archive?
> > > > I'm using TomEE WebProfile 7.0.3.
> > > >
> > > > Thanks a lot,
> > > > Violeta
> > > >
> > > >
> > > >
> > > > --
> > > > View this message in context: http://tomee-openejb.979440.
> > > > n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675.html
> > > > Sent from the TomEE Users mailing list archive at Nabble.com.
> > > >
> >

Re: Driver location in an EAR file

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Guess you can still use Lazy=true.

2017-05-09 9:52 GMT+02:00 Violeta Georgieva <vi...@apache.org>:

> Hi,
>
> 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
> >
> > Hi Violeta,
> >
> > yes for ears intent was to put the descriptor in META-INF and the driver
> in
> > ear/lib. That said you can add Lazy=true to support wars.
>
> I tried to put the driver in the EAR/lib and the resources.xml file in
> EAR/META-INF.
> Unfortunately the driver still cannot be found. (exception below, I
> intentionally removed the hsqldb from TomEE/lib)
>
> Debugging the code I saw that the context class loader was used [1]. The
> context class loader was the loader that contains TomEE/lib and not the
> EAR/lib.
>
> Shouldn't it use the EAR class loader?
>
> Regards,
> Violeta
>
> [1]
> https://github.com/apache/tomee/blob/master/container/
> openejb-core/src/main/java/org/apache/openejb/assembler/
> classic/Assembler.java#L2949
>
>  org.apache.xbean.propertyeditor.PropertyEditorException: Unable to
> resolve
> class org.hsqldb.jdbcDriver
> at
> org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> 43)
> at
> org.apache.xbean.propertyeditor.AbstractConverter.toObject(
> AbstractConverter.java:86)
> at
> org.apache.xbean.propertyeditor.PropertyEditors.getValue(
> PropertyEditors.java:284)
> at org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:181)
> at
> org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(
> ObjectRecipe.java:592)
> at
> org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
> at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
> at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
> at
> org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.
> java:2970)
> at
> org.apache.openejb.assembler.classic.Assembler.
> createResource(Assembler.java:2803)
> at
> org.apache.openejb.config.ConfigurationFactory.doInstall(
> ConfigurationFactory.java:466)
> at
> org.apache.openejb.config.ConfigurationFactory.install(
> ConfigurationFactory.java:459)
> at
> org.apache.openejb.config.AutoConfig.installResource(AutoConfig.java:2194)
> at
> org.apache.openejb.config.AutoConfig.processApplicationResources(
> AutoConfig.java:1026)
> at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:190)
> at
> org.apache.openejb.config.ConfigurationFactory$Chain.
> deploy(ConfigurationFactory.java:420)
> at
> org.apache.openejb.config.ConfigurationFactory.configureApplication(
> ConfigurationFactory.java:1037)
> at
> org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(
> TomcatWebAppBuilder.java:2204)
> at
> org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(
> GlobalListenerSupport.java:141)
> at
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(
> LifecycleBase.java:94)
> at
> org.apache.catalina.core.ContainerBase.backgroundProcess(
> ContainerBase.java:1164)
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> processChildren(ContainerBase.java:1388)
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> processChildren(ContainerBase.java:1392)
> at
> org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.
> run(ContainerBase.java:1360)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver
> at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
> at java.lang.Class.forName0(Native Method)
> at java.lang.Class.forName(Class.java:348)
> at
> org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:
> 40)
> ... 24 more
>
>
> >
> >
> > Romain Manni-Bucau
> > @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> > <https://blog-rmannibucau.rhcloud.com> | Old Blog
> > <http://rmannibucau.wordpress.com> | Github <
> https://github.com/rmannibucau> |
> > LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> > <https://javaeefactory-rmannibucau.rhcloud.com>
> >
> > 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
> >
> > > Hi,
> > >
> > > I have WAR archive that contains a driver, located in WEB-INF/lib and
> > > resources.xml, located in WEB-INF. The WAR file is packaged in an EAR
> file.
> > > When I deploy the EAR file I receive an exception that the driver
> cannot be
> > > located (ClassNotFoundException).
> > > Isn't it possible to provide a driver with my WAR archive?
> > > I'm using TomEE WebProfile 7.0.3.
> > >
> > > Thanks a lot,
> > > Violeta
> > >
> > >
> > >
> > > --
> > > View this message in context: http://tomee-openejb.979440.
> > > n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675.html
> > > Sent from the TomEE Users mailing list archive at Nabble.com.
> > >
>

Re: Driver location in an EAR file

Posted by Violeta Georgieva <vi...@apache.org>.
Hi,

2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau <rm...@gmail.com>:
>
> Hi Violeta,
>
> yes for ears intent was to put the descriptor in META-INF and the driver
in
> ear/lib. That said you can add Lazy=true to support wars.

I tried to put the driver in the EAR/lib and the resources.xml file in
EAR/META-INF.
Unfortunately the driver still cannot be found. (exception below, I
intentionally removed the hsqldb from TomEE/lib)

Debugging the code I saw that the context class loader was used [1]. The
context class loader was the loader that contains TomEE/lib and not the
EAR/lib.

Shouldn't it use the EAR class loader?

Regards,
Violeta

[1]
https://github.com/apache/tomee/blob/master/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java#L2949

 org.apache.xbean.propertyeditor.PropertyEditorException: Unable to resolve
class org.hsqldb.jdbcDriver
at
org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:43)
at
org.apache.xbean.propertyeditor.AbstractConverter.toObject(AbstractConverter.java:86)
at
org.apache.xbean.propertyeditor.PropertyEditors.getValue(PropertyEditors.java:284)
at org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:181)
at
org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(ObjectRecipe.java:592)
at
org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
at
org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.java:2970)
at
org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2803)
at
org.apache.openejb.config.ConfigurationFactory.doInstall(ConfigurationFactory.java:466)
at
org.apache.openejb.config.ConfigurationFactory.install(ConfigurationFactory.java:459)
at
org.apache.openejb.config.AutoConfig.installResource(AutoConfig.java:2194)
at
org.apache.openejb.config.AutoConfig.processApplicationResources(AutoConfig.java:1026)
at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:190)
at
org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:420)
at
org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:1037)
at
org.apache.tomee.catalina.TomcatWebAppBuilder.checkHost(TomcatWebAppBuilder.java:2204)
at
org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:141)
at
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
at
org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1164)
at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1388)
at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1392)
at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1360)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at
org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:40)
... 24 more


>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
> <https://blog-rmannibucau.rhcloud.com> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <
https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
> <https://javaeefactory-rmannibucau.rhcloud.com>
>
> 2017-05-08 23:04 GMT+02:00 Violeta Georgieva <vi...@apache.org>:
>
> > Hi,
> >
> > I have WAR archive that contains a driver, located in WEB-INF/lib and
> > resources.xml, located in WEB-INF. The WAR file is packaged in an EAR
file.
> > When I deploy the EAR file I receive an exception that the driver
cannot be
> > located (ClassNotFoundException).
> > Isn't it possible to provide a driver with my WAR archive?
> > I'm using TomEE WebProfile 7.0.3.
> >
> > Thanks a lot,
> > Violeta
> >
> >
> >
> > --
> > View this message in context: http://tomee-openejb.979440.
> > n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675.html
> > Sent from the TomEE Users mailing list archive at Nabble.com.
> >

Re: Driver location in an EAR file

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi Violeta,

yes for ears intent was to put the descriptor in META-INF and the driver in
ear/lib. That said you can add Lazy=true to support wars.


Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://blog-rmannibucau.rhcloud.com> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
<https://javaeefactory-rmannibucau.rhcloud.com>

2017-05-08 23:04 GMT+02:00 Violeta Georgieva <vi...@apache.org>:

> Hi,
>
> I have WAR archive that contains a driver, located in WEB-INF/lib and
> resources.xml, located in WEB-INF. The WAR file is packaged in an EAR file.
> When I deploy the EAR file I receive an exception that the driver cannot be
> located (ClassNotFoundException).
> Isn't it possible to provide a driver with my WAR archive?
> I'm using TomEE WebProfile 7.0.3.
>
> Thanks a lot,
> Violeta
>
>
>
> --
> View this message in context: http://tomee-openejb.979440.
> n4.nabble.com/Driver-location-in-an-EAR-file-tp4681675.html
> Sent from the TomEE Users mailing list archive at Nabble.com.
>