Thanks for the speedy response Romain.

Looking at the jrebel logs I found it was able to pick up the rebel.xml in
the lib directory.

Unfortunately the tomcat loaders doesn't like it as it expects only jars in
this directory. After debugging into the tomee/tomcat code I found that I
could prevent this by adding "rebel.xml" onto the end of
the tomcat.util.scan.DefaultJarScanner.jarsToSki property defined in
conf/catalina.properties. A complete hack, but it worked. Here's the error
I was getting:

WARNING: Failed to scan JAR [file:xxxx/my-ear/APP-INF/lib/rebel.xml] from
WEB-INF/lib
java.util.zip.ZipException: error in opening zip file
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:127)
        at java.util.jar.JarFile.<init>(JarFile.java:135)
        at java.util.jar.JarFile.<init>(JarFile.java:72)
        at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:72)
        at
sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:48)
        at
sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:70)
        at
sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
        at
sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71)
        at org.apache.tomcat.util.scan.FileUrlJar.<init>(FileUrlJar.java:41)
        at
org.apache.tomcat.util.scan.JarFactory.newInstance(JarFactory.java:34)
        at
org.apache.catalina.startup.ContextConfig$FragmentJarScannerCallback.scan(ContextConfig.java:2664)
        at
org.apache.tomee.loader.EmbeddedJarScanner.process(EmbeddedJarScanner.java:140)
        at
org.apache.tomee.loader.EmbeddedJarScanner.scan(EmbeddedJarScanner.java:83)
        at
org.apache.tomee.loader.TomEEJarScanner.scan(TomEEJarScanner.java:180)
        at
org.apache.catalina.startup.ContextConfig.processJarsForWebFragments(ContextConfig.java:1931)
        at
org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1261)
        at
org.apache.tomee.catalina.OpenEJBContextConfig.webConfig(OpenEJBContextConfig.java:353)
        at
org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
        at
org.apache.tomee.catalina.OpenEJBContextConfig.configureStart(OpenEJBContextConfig.java:103)
        at
org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)
        at
org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
        at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:680)

After that I found that jrebel was throwing classloading errors as it was
trying to mess around with some openejb classes. I think you're right on
the money when you say they're just supporting the basic tomcat
functionality. I have a contact within ZeroTurnaound so I'll hit them up
and see what their tomee support covers in more detail. Here's an example
error:

INFO: Existing thread singleton service in SystemInstance():
org.apache.openejb.cdi.ThreadSingletonServiceImpl@3fe9029b
2013-09-12 14:54:12 JRebel: Class
'org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler' could
not be processed by
org.zeroturnaround.jrebel.openwebbeans.cbp.NormalScopedBeanInterceptorHandlerCBP@org.apache.catalina.loader.StandardClassLoader
@564e4fc4
2013-09-12 14:54:12 JRebel: ERROR
org.zeroturnaround.bundled.javassist.CannotCompileException: [source error]
getReturnType() not found in javax.enterprise.inject.spi.Bean
        at org.zeroturnaround.bundled.javassist.CtNewMethod.make(JRebel:79)
        at org.zeroturnaround.bundled.javassist.CtNewMethod.make(JRebel:45)
        at
org.zeroturnaround.jrebel.openwebbeans.cbp.NormalScopedBeanInterceptorHandlerCBP.process(NormalScopedBeanInterceptorHandlerCBP.java:36)
        at
org.zeroturnaround.javarebel.integration.support.JavassistClassBytecodeProcessor.process(JRebel:62)
        at com.zeroturnaround.javarebel.DZ.a(JRebel:235)
        at com.zeroturnaround.javarebel.DZ.a(JRebel:224)
        at com.zeroturnaround.javarebel.DZ.a(JRebel:208)
        at
com.zeroturnaround.javarebel.SDKIntegrationImpl.runBytecodeProcessors(JRebel:121)
        at com.zeroturnaround.javarebel.DO.transform(JRebel:46)
        at java.lang.ClassLoader.defineClass(ClassLoader.java)
        at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
        at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:104)
        at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:43)
        at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:799)
        at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:613)
        at
org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:504)
        at
org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:410)
        at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:148)
        at org.apache.openejb.OpenEJB.init(OpenEJB.java:296)
        at
org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:245)
        at
org.apache.tomee.catalina.TomcatLoader.init(TomcatLoader.java:133)
        at
org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:122)
        at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at
org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at
org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
        at
org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:640)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:665)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455)
Caused by: compile error: getReturnType() not found in
javax.enterprise.inject.spi.Bean
        at
org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atMethodCallCore(JRebel:723)
        at
org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atCallExpr(JRebel:688)
        at
org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atCallExpr(JRebel:157)
        at
org.zeroturnaround.bundled.javassist.compiler.ast.CallExpr.accept(JRebel:46)
        at
org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atMethodArgs(JRebel:221)
        at
org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atMethodCallCore(JRebel:709)
        at
org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atCallExpr(JRebel:688)
        at
org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atCallExpr(JRebel:157)
        at
org.zeroturnaround.bundled.javassist.compiler.ast.CallExpr.accept(JRebel:46)
        at
org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atMethodArgs(JRebel:221)
        at
org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atMethodCallCore(JRebel:709)
        at
org.zeroturnaround.bundled.javassist.compiler.TypeChecker.atCallExpr(JRebel:688)
        at
org.zeroturnaround.bundled.javassist.compiler.JvstTypeChecker.atCallExpr(JRebel:157)
        at
org.zeroturnaround.bundled.javassist.compiler.ast.CallExpr.accept(JRebel:46)
        at
org.zeroturnaround.bundled.javassist.compiler.CodeGen.doTypeCheck(JRebel:242)
        at
org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:330)
        at
org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
        at
org.zeroturnaround.bundled.javassist.compiler.CodeGen.atStmnt(JRebel:351)
        at
org.zeroturnaround.bundled.javassist.compiler.ast.Stmnt.accept(JRebel:50)
        at
org.zeroturnaround.bundled.javassist.compiler.CodeGen.atMethodBody(JRebel:292)
        at
org.zeroturnaround.bundled.javassist.compiler.CodeGen.atMethodDecl(JRebel:274)
        at
org.zeroturnaround.bundled.javassist.compiler.ast.MethodDecl.accept(JRebel:44)
        at
org.zeroturnaround.bundled.javassist.compiler.Javac.compileMethod(JRebel:169)
        at
org.zeroturnaround.bundled.javassist.compiler.Javac.compile(JRebel:95)
        at org.zeroturnaround.bundled.javassist.CtNewMethod.make(JRebel:74)
        ... 51 more

Once we rid ourselves of a last few MDBs we could go plain tomcat, but
being able to deploy an ear rather than multiple war files and a bunch of
jars into tomcat's /lib directory is very convenient. However, if we can't
use JRebel that could be a show-stopper for us on TomEE. Our application
takes a while to load (lots of data caching on startup), so JRebel has
become a very valuable part of our day-to-day development process.

Thanks
Richard


On Fri, Sep 13, 2013 at 9:03 AM, Romain Manni-Bucau [via OpenEJB] <
[email protected]> wrote:

> Hi
>
> 1) APP-INF/lib/ should be supported (so it should be fine)
> 2) when i looked their support it was more or less the tomcat one (no
> more). Personally i used fakereplace with some success to hot replace
> my method bodies (https://github.com/fakereplace/fakereplace)
> Romain Manni-Bucau
> Twitter: @rmannibucau
> Blog: http://rmannibucau.wordpress.com/
> LinkedIn: http://fr.linkedin.com/in/rmannibucau
> Github: https://github.com/rmannibucau
>
>
>
> 2013/9/12 rsheldon <[hidden 
> email]<http://user/SendEmail.jtp?type=node&node=4665072&i=0>>:
>
>
> > All,
> >
> > I'm working to migrate an enterprise application EAR from weblogic to
> TomEE.
> > We currently use JRebel and would like to do so with TomEE.  I know that
> > they support 1.5.2 (I'm using 1.6.0-SNAPSHOT) and 1.0 (although I'm not
> sure
> > what their support covers)
> >
> > Here's my problem. We have a large number of libs in APP-INF/lib that I
> > would like to have JRebel monitor/reload. However, they want the
> rebel.xml
> > for this to live in APP-INF/classes. Weblogic supports this directory,
> but I
> > can't see any mention of it for TomEE.
> >
> > So I have 2 questions:
> >
> > 1. Does/could TomEE support an APP-INF/classes directory?
> >
> > 2. Is anyone successfully using TomEE+JRebel+EAR, and if so, where have
> you
> > put the rebel file for the libs that live in APP-INF/lib?
> >
> > Thanks,
> > Richard
> >
> >
> >
> > --
> > View this message in context:
> http://openejb.979440.n4.nabble.com/TomEE-JRebel-tp4665068.html
> > Sent from the OpenEJB User mailing list archive at Nabble.com.
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
> http://openejb.979440.n4.nabble.com/TomEE-JRebel-tp4665068p4665072.html
>  To unsubscribe from TomEE + JRebel, click 
> here<http://openejb.979440.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4665068&code=cnNoZWxkb243MkBnbWFpbC5jb218NDY2NTA2OHwtMTkzODkzMTIwNQ==>
> .
> NAML<http://openejb.979440.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>




--
View this message in context: 
http://openejb.979440.n4.nabble.com/TomEE-JRebel-tp4665068p4665074.html
Sent from the OpenEJB User mailing list archive at Nabble.com.

Reply via email to