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
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >
>

Reply via email to