Hmm maybe i got it wrong but in an ear you can share ejb for webapps so putting all ejb in ejbmodules of the ear instead of war will make it consistent Le 3 sept. 2012 18:29, "Luca Merolla" <[email protected]> a écrit :
> They are inside an EAR folder. Would it make any difference if I do a > packaged EAR? > > On Mon, Sep 3, 2012 at 3:33 PM, Romain Manni-Bucau <[email protected] > >wrote: > > > Hmm, either managing this case or packaging an ear should solve it IMO > > Le 3 sept. 2012 14:18, "Luca Merolla" <[email protected]> a écrit : > > > > > I changed a bit the code and I gave a try with @EJB and I get the same > > > exception. > > > > > > The reason why there was JNDI lookups is because we are calling > actually > > 2 > > > ejbs in 2 different wars that implements the same interface > > > > > > private BroadcasterBeanLocal warBroadcaster; > > > private BroadcasterBeanLocal war2Broadcaster; > > > > > > probably that can be solved with @EJB(name="") or something similar. > > > > > > However, I think the problem is related to the order of deployment. > > > Basically when the EJB application (jar) is deployed, it starts with > > Quartz > > > for the timers, but at that time the WAR application hasn't been > deployed > > > yet so the warBroadcaster beans are not available and the deployment > > fails > > > with: > > > > > > SEVERE: Application could not be deployed: > > > /home/luca/bin/apache-tomee-snapshot/apps/Test.ear > > > org.apache.openejb.OpenEJBException: Creating application failed: > > > /home/luca/bin/apache-tomee-snapshot/apps/Test.ear: Error building bean > > > 'WarBroadcasterBean'. Exception: class org.apache.openejb.OpenE > > > JBException: Error while loading bean class > > > org.test.galaxy.WarBroadcasterBean for bean WarBroadcasterBean. > Received > > > message: Cannot locate the class org.test.galaxy.WarBroadcasterBean > from > > > the codebase > > > [/home/luca/bin/apache-tomee-snapshot/apps/Test.ear/pn-galaxy]: Error > > while > > > loading bean class org.test.galaxy.WarBroadcasterBean for bean > > > WarBroadcasterBean. Received message: C > > > annot locate the class org.test.galaxy.WarBroadcasterBean from the > > codebase > > > [/home/luca/bin/apache-tomee-snapshot/apps/Test.ear/pn-galaxy] > > > at > > > > > > > > > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:929) > > > at > > > > > > > > > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:521) > > > at > > > > > > > > > org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:422) > > > at > > > > org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:330) > > > at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:144) > > > at org.apache.openejb.OpenEJB.init(OpenEJB.java:290) > > > at > > > > org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:231) > > > at > > > org.apache.tomee.catalina.TomcatLoader.init(TomcatLoader.java:131) > > > at > > > > > > > > > org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:113) > > > 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:401) > > > at > > > org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110) > > > at org.apache.catalina.startup.Catalina.load(Catalina.java:624) > > > at org.apache.catalina.startup.Catalina.load(Catalina.java:649) > > > 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:450) > > > Caused by: org.apache.openejb.OpenEJBException: Error building bean > > > 'WarBroadcasterBean'. Exception: class > > > org.apache.openejb.OpenEJBException: Error while loading bean class > > > org.test.galaxy.WarBroadcasterBean for bean WarBroadcasterBean. > Received > > > message: Cannot locate the class org.test.galaxy.WarBroadcasterBean > from > > > the codebase > > > [/home/luca/bin/apache-tomee-snapshot/apps/Test.ear/pn-galaxy]: Error > > while > > > loading bean class org.test.galaxy.WarBroadcasterBean for bean > > > WarBroadcasterBean. Received message: Cannot locate the class > > > org.test.galaxy.WarBroadcasterBean from the codebase > > > [/home/luca/bin/apache-tomee-snapshot/apps/Test.ear/pn-galaxy] > > > at > > > > > > > > > org.apache.openejb.assembler.classic.EjbJarBuilder.build(EjbJarBuilder.java:81) > > > at > > > > > > > > > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:689) > > > ... 20 more > > > Caused by: org.apache.openejb.OpenEJBException: Error while loading > bean > > > class org.test.galaxy.WarBroadcasterBean for bean WarBroadcasterBean. > > > Received message: Cannot locate the class > > > org.test.galaxy.WarBroadcasterBean from the codebase > > > [/home/luca/bin/apache-tomee-snapshot/apps/Test.ear/pn-galaxy] > > > at > > > > > > > > > org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.load(EnterpriseBeanBuilder.java:428) > > > at > > > > > > > > > org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.loadClass(EnterpriseBeanBuilder.java:405) > > > at > > > > > > > > > org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.build(EnterpriseBeanBuilder.java:81) > > > at > > > > > > > > > org.apache.openejb.assembler.classic.EjbJarBuilder.build(EjbJarBuilder.java:66) > > > ... 21 more > > > > > > > > > > > > > > > On Mon, Sep 3, 2012 at 1:47 PM, Thiago Veronezi <[email protected]> > > > wrote: > > > > > > > You could remove the init method altogether and simple inject the > bean > > in > > > > your object... > > > > > > > > @EJB > > > > private WarBroadcaster warBroadcaster; > > > > > > > > This way you avoid JNDI lookups. > > > > > > > > []s, > > > > Thiago. > > > > > > > > > > > > On Mon, Sep 3, 2012 at 7:10 AM, Luca Merolla <[email protected] > > > > > > wrote: > > > > > > > > > Hi, > > > > > > > > > > I have a piece of code that I would like to port from JBoss to > TomEE. > > > > > The old code, which was working on JBoss, is like that. Inside the > > same > > > > EAR > > > > > folder I have: > > > > > > > > > > - EJB jar (with EJBs and timers) > > > > > - WAR (web application, with 1 EJB) > > > > > > > > > > I have a requirement that the ejb timers (a method annotated with > > > > > @Schedule) > > > > > will perform a task every X seconds. > > > > > This method calls an EJB (inside the jar) that will call another > EJB, > > > but > > > > > this time in a WAR application. > > > > > > > > > > Basically the EJB in the jar has something like that: > > > > > > > > > > @PostConstruct > > > > > public void init() { > > > > > log.info("INIT-BROADCASTERS"); > > > > > try { > > > > > warBroadcaster = (BroadcasterBeanLocal) initialContext > > > > > .lookup("java:app/pn-test/WarBroadcasterBean"); > > > > > } catch (NamingException e) { > > > > > log.error("Problem looking up for broadcasters", e); > > > > > } > > > > > } > > > > > > > > > > This approach seems to not work on TomEE. I have tried to add: > > > > > > > > > > Properties p = new Properties(); > > > > > p.put(Context.INITIAL_CONTEXT_FACTORY, > > > > > "org.apache.openejb.client.LocalInitialContextFactory"); > > > > > final InitialContext initialContext = new InitialContext(p); > > > > > > > > > > But still it can't find the bean. I don't know if it's possible to > do > > > > > something like that but anyway if you have any suggestions or > > different > > > > > approach I would be very keen to refactor this code to make it work > > > > > properly on TomEE. > > > > > > > > > > Thanks in advance, > > > > > Luca > > > > > > > > > > > > > > >
