Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: How to change remote JNDI-name in Jonas
Florent BENOIT <[email protected]> Fri, 26 Aug 2011 11:54:18 +0200
| Newsgroups | gmane.comp.java.objectweb.jonas |
|---|---|
| Message-ID | <[email protected]> |
Hi, You may apply the same rule for local bean Regards, Florent On 08/26/2011 11:28 AM, Stefaan Somers wrote: > Hi, > > using the ejb-jar.xml, and defining the same class as a different bean > using the mappedName worked. So I can access the remote bean now with > a specific name. > Now I have a similar problem with the local bean. Is there any way I > can make a difference in naming there??? > > Greetings, > > Stefaan Somers > > <?xml version="1.0" encoding="UTF-8"?> > <ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://java.sun.com/xml/ns/javaee > http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"> > <display-name> > EducationEJB3Beans</display-name> > <enterprise-beans> > <session> > <display-name>ParametersRemote</display-name> > <ejb-name>ParametersRemote</ejb-name> > <mapped-name>MyApp_ParametersRemote</mapped-name> > <business-remote>be.sso.test.ParametersRemote</business-remote> > <ejb-class>be.sso.test.Parameters</ejb-class> > <session-type>Stateless</session-type> > > </session> > <session> > <display-name>ParametersLocal</display-name> > <ejb-name>MyApp_ParametersLocal</ejb-name> > <mapped-name>MyApp_ParametersLocal</mapped-name> > <business-local>be.sso.test.ParametersLocal</business-local> > <ejb-class>be.sso.test.Parameters</ejb-class> > <session-type>Stateless</session-type> > > > > </session> > </enterprise-beans> > </ejb-jar> > > On 9 August 2011 14:52, Guillaume Sauthier (OW2) > <[email protected]> wrote: >> OK I think got it. >> The problem with mappedName attribute is that we have only 1 value that must >> be used for all our interfaces: local/remote/ws/... >> So, there are names clashes when you specify mappedname and you have >> multiple interfaces. >> EJB3 Spec is not good on this point :'( >> >> So it seems we have very few options right now: >> * Separate your applications on independant JOnAS (separate JNDI registry >> means no clashes) >> * Mutualize your EJB between your applications so that there is only 1 >> instance of your bean >> >> But this is an interesting use case that we would like to support, so i >> would be grateful if you could open a JIRA explaining the issue. >> For the more long term, we may come with a more elegant solution: >> Customize the naming strategy to differentiate JNDI names from beans in >> different applications: >> something that could be placed in the easybeans.xml file (either in global >> or ejbjar configuration) >> <strategy>${beanName}-${beanInterface}@${beanMode}</strategy> >> or >> <mapped-names> >> <local>MyLocalBean</local> >> <remote>MyRemoteBean</remote> >> </mapped-names> >> >> Thanks >> --G >> >> 2011/8/9 Stefaan Somers<[email protected]> >>> Guillaume, >>> >>> OK but if 2 Beans normally have the same package-name& ClassName in 2 >>> different applications (different jar-components), there can be only 1 >>> JNDI-entry for the remote interface. So there is the danger that 1 >>> application is going to the wrong JNDI-entry. >>> >>> >>> For example we have 2 applications with each an account-component >>> (with Account-bean that is used for logon information). Last time when >>> I deployed the 2 applications, the one application was using the >>> account-data from the other application. >>> >>> I hope it's a bit clear for you?? >>> >>> Greetings, >>> >>> Stefaan Somers >>> >>> On 9 August 2011 13:51, Guillaume Sauthier (OW2) >>> <[email protected]> wrote: >>>> EasyBeans (the EJB3 container in JOnAS) gives priority to beans found in >>>> the >>>> same application if there is multiple match. >>>> The EJB3 spec mandates that behavior so you're safe :) >>>> Just make a try. >>>> --G >>>> >>>> 2011/8/9 Stefaan Somers<[email protected]> >>>>> But, >>>>> >>>>> our applications are generated, so we can have for example 2 >>>>> account-beans in 2 different applications. Therefore we must be able >>>>> to uniquely identify the 2 remote JNDI interfaces to the 2 different >>>>> applications. That's why we are using "mappedName" >>>>> >>>>> Greetings, >>>>> >>>>> Stefaan Somers >>>>> >>>>> On 9 August 2011 11:55, Guillaume Sauthier (OW2) >>>>> <[email protected]> wrote: >>>>>> You should also remove your mapped names (don't needed anymore >>>>>> because >>>>>> you >>>>>> rely on the container to find the right interface for you). >>>>>> >>>>>> --G >>>>>> >>>>>> 2011/8/9 Stefaan Somers<[email protected]> >>>>>>> Hello, >>>>>>> >>>>>>> I'v tried that too, but it also injects the remote-bean then instead >>>>>>> of the local-bean. >>>>>>> >>>>>>> Greetings, >>>>>>> >>>>>>> Stefaan Somers >>>>>>> >>>>>>> On 9 August 2011 11:04, Guillaume Sauthier (OW2) >>>>>>> <[email protected]> wrote: >>>>>>>> Can't you change your Calculator.java to something like this: >>>>>>>> >>>>>>>> It's much more easier to read :) >>>>>>>> >>>>>>>> /** >>>>>>>> * Session Bean implementation class Calculator >>>>>>>> */ >>>>>>>> @Stateless >>>>>>>> public class Calculator implements CalculatorRemote, >>>>>>>> CalculatorLocal >>>>>>>> { >>>>>>>> >>>>>>>> @EJB >>>>>>>> private ParametersLocal params; >>>>>>>> >>>>>>>> >>>>>>>> /** >>>>>>>> * Default constructor. >>>>>>>> */ >>>>>>>> public Calculator() { >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> @Override >>>>>>>> public String returnMessage() { >>>>>>>> result = parameters.getParameter(); >>>>>>>> return "It's all being calculated :" + result; >>>>>>>> } >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> 2011/8/9 Stefaan Somers<[email protected]> >>>>>>>>> Hi Guillaume, >>>>>>>>> Thnks for responding. I'm already banging my head for a few days >>>>>>>>> with >>>>>>>>> this problem. So any help would be most welcome. >>>>>>>>> >>>>>>>>> I've included a sample project. For the Parameters-bean I use the >>>>>>>>> mappedName parameter, since I need to give it a unique-name. >>>>>>>>> >>>>>>>>> If I try to get the Local Parameters-bean with the >>>>>>>>> Calculator-bean, >>>>>>>>> it >>>>>>>>> gives me the following exception : >>>>>>>>> >>>>>>>>> java.lang.ClassCastException: $Proxy63 cannot be cast to >>>>>>>>> be.sso.test.ParametersLocal >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> be.sso.test.Calculator.original$EasyBeans$returnMessage(Calculator.java:34) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.gen.invocationcontext.be.sso.test.Calculator.EasyBeansInvocationContextImplreturnMessageAROUNDINVOKE1942950347.proceed(Unknown >>>>>>>>> Source) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.transaction.interceptors.CMTRequiredTransactionInterceptor.intercept(CMTRequiredTransactionInterceptor.java:110) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.gen.invocationcontext.be.sso.test.Calculator.EasyBeansInvocationContextImplreturnMessageAROUNDINVOKE1942950347.proceed(Unknown >>>>>>>>> Source) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.jonas.jndi.interceptors.impl.easybeans.ResourceCheckerInterceptor.intercept(ResourceCheckerInterceptor.java:103) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.gen.invocationcontext.be.sso.test.Calculator.EasyBeansInvocationContextImplreturnMessageAROUNDINVOKE1942950347.proceed(Unknown >>>>>>>>> Source) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.jonas.ejb.easybeans.JOnASENCInterceptor.intercept(JOnASENCInterceptor.java:67) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.gen.invocationcontext.be.sso.test.Calculator.EasyBeansInvocationContextImplreturnMessageAROUNDINVOKE1942950347.proceed(Unknown >>>>>>>>> Source) >>>>>>>>> at be.sso.test.Calculator.returnMessage(Calculator.java) >>>>>>>>> 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.ow2.easybeans.container.session.stateless.StatelessSessionFactory.localCall(StatelessSessionFactory.java:161) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.container.session.SessionFactory.rpcInvoke(SessionFactory.java:237) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.rpc.rmi.server.RMIServerRPCImpl.getEJBResponse(RMIServerRPCImpl.java:106) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.rpc.rmi.client.RMIClientRPC.sendEJBRequest(RMIClientRPC.java:105) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.proxy.client.ClientRPCInvocationHandler.invoke(ClientRPCInvocationHandler.java:195) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.easybeans.proxy.client.ClientRPCInvocationHandler.invoke(ClientRPCInvocationHandler.java:111) >>>>>>>>> at $Proxy62.returnMessage(Unknown Source) >>>>>>>>> at >>>>>>>>> be.sso.servlet.CalculateServlet.doGet(CalculateServlet.java:40) >>>>>>>>> at >>>>>>>>> javax.servlet.http.HttpServlet.service(HttpServlet.java:617) >>>>>>>>> at >>>>>>>>> javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.jonas.web.tomcat6.CheckOpenResourcesValve.invoke(CheckOpenResourcesValve.java:73) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.jonas.web.tomcat6.tx.TransactionValve.invoke(TransactionValve.java:90) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.ow2.jonas.web.tomcat6.ResetAuthenticationValve.invoke(ResetAuthenticationValve.java:95) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) >>>>>>>>> at >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) >>>>>>>>> at java.lang.Thread.run(Thread.java:619) >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On 9 August 2011 10:45, Guillaume Sauthier (OW2) >>>>>>>>> <[email protected]> wrote: >>>>>>>>>> Can't you rely on container's injection (@EJB) ? >>>>>>>>>> --G >>>>>>>>>> >>>>>>>>>> 2011/8/9 Stefaan Somers<[email protected]> >>>>>>>>>>> Hi all, >>>>>>>>>>> >>>>>>>>>>> I need to change the remote jndi-name of a Stateless Session >>>>>>>>>>> Bean >>>>>>>>>>> . >>>>>>>>>>> Default the naming for jonas is : >>>>>>>>>>> >>>>>>>>>>> SessionBean.class.getName() >>>>>>>>>>> + "_" + SessionBeanInterface.class.getName() + "@Remote" >>>>>>>>>>> >>>>>>>>>>> How can I change this. If I add the attribute mappedName in >>>>>>>>>>> the >>>>>>>>>>> @Stateless-annotation, I cannot get to the Local Interface >>>>>>>>>>> anymore. >>>>>>>>>>> And I need to be able to get to both. >>>>>>>>>>> >>>>>>>>>>> Greetings, >>>>>>>>>>> >>>>>>>>>>> Stefaan Somers >>>>>>>>>> >>>>>>>> >>>>>> >>>> >>