I removed the queue as well. I basically did mange by using Infinispan as cache and share some objects among the WAR and EJBs. It should be much faster now.
On Fri, Sep 7, 2012 at 7:42 PM, Romain Manni-Bucau <rmannibu...@gmail.com>wrote: > A queue is maybe not the faster. If you manage to reproduce it in an hello > world i could have a look > Le 7 sept. 2012 19:33, "Luca Merolla" <luca.mero...@gmail.com> a écrit : > > > Hi Fernando, > > > > thanks for the review. The problem is related to loading and I think you > > got the point, in fact I had the same interface for multiple > > implementation. > > > > However, even changing this I had some stranger issues related to the > fact > > that it was not possible (due to classloading problems) to have EJBs in > > both the WAR and the jar inside the EAR. > > > > I have solved by going through a code refactor and eliminating the > > inconsistent design. Now there is no more need of having ejbs in the war > > and the whole design of the application is more JEE compliant so it > should > > work more easily on different AS. > > > > On Thu, Sep 6, 2012 at 4:55 PM, Fernando Lozano <ferna...@lozano.eti.br > > >wrote: > > > > > Hi, > > > > > > I haven't been following this thread since the start, but from the > quotes > > > on the lastest message I wonder wether you have a classloader problem. > > Have > > > you already considered this? > > > > > > Hope this long explanation is intelligible and helps. If not, please > > > forgive my intromission and my poor english. > > > > > > This is very common for developers moving from JBoss to another app > > > server, because the default config for JBoss (before 7.x) was the > > "unified > > > classloader" (UC), where each deployment could see classes from other > > > deployments. But the Java EE specs state that each deployment (and each > > > subdeployment, i.e. package inside the same EAR) gets it own > classloader > > > and won't be able to see classes from other deployments or > > subdeployments. > > > > > > See the error you got was a class loading exception: > > > > > > > > > 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]: > > > > > > Class WarBroadcasterBean is one of the implementations of interface > > > BroadcasterBeanLocal, i.e., one of the EJBs that implements the same > > > interface, am I right? It looks like either one of the subdeployments > > tried > > > to load the implementation class for the EJB (they shouln't) or the > > > implementation class itself has a dependency on some other > > class/interface > > > that is not on it's own subdeployment classloader. > > > > > > Usually, classes that are need for more than one subdeployment are > > > packaged in a library JAR inside the EAR, vich becomes visible by all > > other > > > subdeployment classloaders, and no other subdeployment includes the > same > > > class definitions. But JBoss developers are used to either copy the > same > > > classes to many subdeployments -- jboss UC will load the first > definition > > > found and ignore the others -- or having just one definition in the > > > implementation package for the EJBs, and other subdeployments see them > > > because of the UC. But both are packagings that violate the Java EE > > specs. > > > > > > Maybe if you review the packaging structure x classloaders and ejb > names > > > you'll find something inconsistent. > > > > > > > > > []s, Fernando Lozano > > > > > > > > > Yes, but even a plain EJB inside the war without any reference to > other > > >> EJB > > >> will fail. > > >> > > >> I solved by implementing JMS client on the WAR application, so the ejb > > and > > >> the war communicate through a queue. > > >> Not the best, but at least it should be more consistent and portable > > among > > >> different Application Servers. > > >> > > >> On Thu, Sep 6, 2012 at 12:18 PM, Romain Manni-Bucau > > >> <rmannibu...@gmail.com>wrote: > > >> > > >> Same reason i guess, you use cross ejb in your mdb? > > >>> Le 6 sept. 2012 11:47, "Luca Merolla" <luca.mero...@gmail.com> a > > écrit : > > >>> > > >>> I have tried to place an MDB in the WAR... It still fails in the > same > > >>>> way > > >>>> as for the Stateless bean. > > >>>> > > >>>> On Thu, Sep 6, 2012 at 8:04 AM, Romain Manni-Bucau < > > >>>> > > >>> rmannibu...@gmail.com > > >>> > > >>>> wrote: > > >>>>> It is but it leads to the kind of deployment lifecycle you have > (and > > >>>>> > > >>>> from a > > >>>> > > >>>>> spec point of view not sure it is well defined) > > >>>>> Le 6 sept. 2012 00:17, "Luca Merolla" <luca.mero...@gmail.com> a > > >>>>> > > >>>> écrit : > > >>> > > >>>> I have been investigating on this issue. The fact is failing not to > > >>>>>> > > >>>>> lookup > > >>>>> > > >>>>>> for the EJB that is inside the WAR, but it is failing while > building > > >>>>>> > > >>>>> it. > > >>>> > > >>>>> If I do remove @Stateless and the interface implementation from the > > >>>>>> WarBroadcasterBean it deploys fine and I guess WarBroadcaster is > > >>>>>> > > >>>>> considered > > >>>>> > > >>>>>> a CDI bean. > > >>>>>> But in this case I'm not able to retrieve it by lookup... > > >>>>>> > > >>>>>> It is not possible to have EJBs both inside a WAR and into a > library > > >>>>>> > > >>>>> in > > >>> > > >>>> the > > >>>>> > > >>>>>> same EAR? > > >>>>>> > > >>>>>> On Mon, Sep 3, 2012 at 6:44 PM, Romain Manni-Bucau < > > >>>>>> > > >>>>> rmannibu...@gmail.com > > >>>>> > > >>>>>> wrote: > > >>>>>>> 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" <luca.mero...@gmail.com> 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 < > > >>>>>>>> > > >>>>>>> rmannibu...@gmail.com > > >>>>>>> > > >>>>>>>> wrote: > > >>>>>>>>> Hmm, either managing this case or packaging an ear should solve > > >>>>>>>>> > > >>>>>>>> it > > >>>> > > >>>>> IMO > > >>>>>> > > >>>>>>> Le 3 sept. 2012 14:18, "Luca Merolla" <luca.mero...@gmail.com> > > >>>>>>>>> > > >>>>>>>> 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 < > > >>>>>>>>>> > > >>>>>>>>> thi...@veronezi.org > > >>>>>> > > >>>>>>> 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 < > > >>>>>>>>>>> > > >>>>>>>>>> luca.mero...@gmail.com > > >>>>>>> > > >>>>>>>> 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 > > >>>>>>>>>>>> > > >>>>>>>>>>> > > > > > >