Re: Re: 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 14:13:27 +0200
| Newsgroups | gmane.comp.java.objectweb.jonas |
|---|---|
| Message-ID | <[email protected]> |
Hi, If your bean has only one interface (and if it's a local interface) then mappedName will be applied on the local interface Regards, Florent On 08/26/2011 12:28 PM, Stefaan Somers wrote: > If you use mappedname, you only get the Remote Interface and not the local. > > On 26 August 2011 11:54, Florent BENOIT<[email protected]> wrote: >> 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 >>