2017-05-09 13:48 GMT+03:00 Romain Manni-Bucau <[email protected]>: > > 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 <[email protected]>: > > > 2017-05-09 13:24 GMT+03:00 Romain Manni-Bucau <[email protected]>: > > > > > > 2017-05-09 12:18 GMT+02:00 Violeta Georgieva <[email protected]>: > > > > > > > 2017-05-09 11:32 GMT+03:00 Romain Manni-Bucau <[email protected] >: > > > > > > > > > > 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 <[email protected] >: > > > > > > > > > > > 2017-05-09 11:04 GMT+03:00 Romain Manni-Bucau < > > [email protected] > > >: > > > > > > > > > > > > > > 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 < > > [email protected] > > >: > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > 2017-05-09 10:02 GMT+03:00 Romain Manni-Bucau < > > > > [email protected] > > > > >: > > > > > > > > > > > > > > > > > > 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 < > > > > [email protected] > > > > >: > > > > > > > > > > > > > > > > > > > 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. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
