tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Romain Manni-Bucau <rmannibu...@gmail.com>
Subject Re: Driver location in an EAR file
Date Tue, 09 May 2017 12:24:15 GMT
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 <violetagg@apache.org>:

> 2017-05-09 13:48 GMT+03:00 Romain Manni-Bucau <rmannibucau@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 <violetagg@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.
> > > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > >
> > >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message