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