Discussion:
How to change remote JNDI-name in Jonas
Stefaan Somers
2011-08-09 07:55:53 UTC
Permalink
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
Guillaume Sauthier (OW2)
2011-08-09 08:45:00 UTC
Permalink
Can't you rely on container's injection (@EJB) ?
--G

2011/8/9 Stefaan Somers <***@gmail.com>

> 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
>
Stefaan Somers
2011-08-09 08:58:12 UTC
Permalink
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)
<***@ow2.org> wrote:
> Can't you rely on container's injection (@EJB) ?
> --G
>
> 2011/8/9 Stefaan Somers <***@gmail.com>
>>
>> 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
>
>
Guillaume Sauthier (OW2)
2011-08-09 09:04:36 UTC
Permalink
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 <***@gmail.com>

> 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)
> <***@ow2.org> wrote:
> > Can't you rely on container's injection (@EJB) ?
> > --G
> >
> > 2011/8/9 Stefaan Somers <***@gmail.com>
> >>
> >> 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
> >
> >
>
Stefaan Somers
2011-08-09 09:06:28 UTC
Permalink
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)
<***@ow2.org> 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 <***@gmail.com>
>>
>> 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)
>> <***@ow2.org> wrote:
>> > Can't you rely on container's injection (@EJB) ?
>> > --G
>> >
>> > 2011/8/9 Stefaan Somers <***@gmail.com>
>> >>
>> >> 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
>> >
>> >
>
>
Guillaume Sauthier (OW2)
2011-08-09 09:55:45 UTC
Permalink
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 <***@gmail.com>

> 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)
> <***@ow2.org> 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 <***@gmail.com>
> >>
> >> 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)
> >> <***@ow2.org> wrote:
> >> > Can't you rely on container's injection (@EJB) ?
> >> > --G
> >> >
> >> > 2011/8/9 Stefaan Somers <***@gmail.com>
> >> >>
> >> >> 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
> >> >
> >> >
> >
> >
>
Stefaan Somers
2011-08-09 10:13:44 UTC
Permalink
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)
<***@ow2.org> 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 <***@gmail.com>
>>
>> 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)
>> <***@ow2.org> 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 <***@gmail.com>
>> >>
>> >> 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)
>> >> <***@ow2.org> wrote:
>> >> > Can't you rely on container's injection (@EJB) ?
>> >> > --G
>> >> >
>> >> > 2011/8/9 Stefaan Somers <***@gmail.com>
>> >> >>
>> >> >> 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
>> >> >
>> >> >
>> >
>> >
>
>
Guillaume Sauthier (OW2)
2011-08-09 11:51:25 UTC
Permalink
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 <***@gmail.com>

> 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)
> <***@ow2.org> 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 <***@gmail.com>
> >>
> >> 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)
> >> <***@ow2.org> 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 <***@gmail.com>
> >> >>
> >> >> 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)
> >> >> <***@ow2.org> wrote:
> >> >> > Can't you rely on container's injection (@EJB) ?
> >> >> > --G
> >> >> >
> >> >> > 2011/8/9 Stefaan Somers <***@gmail.com>
> >> >> >>
> >> >> >> 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
> >> >> >
> >> >> >
> >> >
> >> >
> >
> >
>
Stefaan Somers
2011-08-09 12:01:18 UTC
Permalink
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)
<***@ow2.org> 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 <***@gmail.com>
>>
>> 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)
>> <***@ow2.org> 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 <***@gmail.com>
>> >>
>> >> 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)
>> >> <***@ow2.org> 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 <***@gmail.com>
>> >> >>
>> >> >> 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)
>> >> >> <***@ow2.org> wrote:
>> >> >> > Can't you rely on container's injection (@EJB) ?
>> >> >> > --G
>> >> >> >
>> >> >> > 2011/8/9 Stefaan Somers <***@gmail.com>
>> >> >> >>
>> >> >> >> 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
>> >> >> >
>> >> >> >
>> >> >
>> >> >
>> >
>> >
>
>
Guillaume Sauthier (OW2)
2011-08-09 12:52:06 UTC
Permalink
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 <***@gmail.com>

> 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)
> <***@ow2.org> 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 <***@gmail.com>
> >>
> >> 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)
> >> <***@ow2.org> 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 <***@gmail.com>
> >> >>
> >> >> 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)
> >> >> <***@ow2.org> 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 <***@gmail.com>
> >> >> >>
> >> >> >> 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)
> >> >> >> <***@ow2.org> wrote:
> >> >> >> > Can't you rely on container's injection (@EJB) ?
> >> >> >> > --G
> >> >> >> >
> >> >> >> > 2011/8/9 Stefaan Somers <***@gmail.com>
> >> >> >> >>
> >> >> >> >> 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
> >> >> >> >
> >> >> >> >
> >> >> >
> >> >> >
> >> >
> >> >
> >
> >
>
Stefaan Somers
2011-08-26 09:28:07 UTC
Permalink
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)
<***@ow2.org> 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 <***@gmail.com>
>>
>> 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)
>> <***@ow2.org> 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 <***@gmail.com>
>> >>
>> >> 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)
>> >> <***@ow2.org> 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 <***@gmail.com>
>> >> >>
>> >> >> 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)
>> >> >> <***@ow2.org> 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 <***@gmail.com>
>> >> >> >>
>> >> >> >> 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)
>> >> >> >> <***@ow2.org> wrote:
>> >> >> >> > Can't you rely on container's injection (@EJB) ?
>> >> >> >> > --G
>> >> >> >> >
>> >> >> >> > 2011/8/9 Stefaan Somers <***@gmail.com>
>> >> >> >> >>
>> >> >> >> >> 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
>> >> >> >> >
>> >> >> >> >
>> >> >> >
>> >> >> >
>> >> >
>> >> >
>> >
>> >
>
>
Florent BENOIT
2011-08-26 09:54:18 UTC
Permalink
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)
> <***@ow2.org> 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<***@gmail.com>
>>> 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)
>>> <***@ow2.org> 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<***@gmail.com>
>>>>> 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)
>>>>> <***@ow2.org> 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<***@gmail.com>
>>>>>>> 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)
>>>>>>> <***@ow2.org> 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<***@gmail.com>
>>>>>>>>> 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)
>>>>>>>>> <***@ow2.org> wrote:
>>>>>>>>>> Can't you rely on container's injection (@EJB) ?
>>>>>>>>>> --G
>>>>>>>>>>
>>>>>>>>>> 2011/8/9 Stefaan Somers<***@gmail.com>
>>>>>>>>>>> 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
>>>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>>
Stefaan Somers
2011-08-26 10:28:55 UTC
Permalink
If you use mappedname, you only get the Remote Interface and not the local.

On 26 August 2011 11:54, Florent BENOIT <***@ow2.org> 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)
>> <***@ow2.org>  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<***@gmail.com>
>>>>
>>>> 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)
>>>> <***@ow2.org>  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<***@gmail.com>
>>>>>>
>>>>>> 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)
>>>>>> <***@ow2.org>  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<***@gmail.com>
>>>>>>>>
>>>>>>>> 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)
>>>>>>>> <***@ow2.org>  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<***@gmail.com>
>>>>>>>>>>
>>>>>>>>>> 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)
>>>>>>>>>> <***@ow2.org>  wrote:
>>>>>>>>>>>
>>>>>>>>>>> Can't you rely on container's injection (@EJB) ?
>>>>>>>>>>> --G
>>>>>>>>>>>
>>>>>>>>>>> 2011/8/9 Stefaan Somers<***@gmail.com>
>>>>>>>>>>>>
>>>>>>>>>>>> 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
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>
>>>
>
>
Florent BENOIT
2011-08-26 12:13:27 UTC
Permalink
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<***@ow2.org> 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)
>>> <***@ow2.org> 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<***@gmail.com>
>>>>> 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)
>>>>> <***@ow2.org> 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<***@gmail.com>
>>>>>>> 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)
>>>>>>> <***@ow2.org> 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<***@gmail.com>
>>>>>>>>> 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)
>>>>>>>>> <***@ow2.org> 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<***@gmail.com>
>>>>>>>>>>> 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)
>>>>>>>>>>> <***@ow2.org> wrote:
>>>>>>>>>>>> Can't you rely on container's injection (@EJB) ?
>>>>>>>>>>>> --G
>>>>>>>>>>>>
>>>>>>>>>>>> 2011/8/9 Stefaan Somers<***@gmail.com>
>>>>>>>>>>>>> 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
>>
Stefaan Somers
2011-08-26 12:38:16 UTC
Permalink
Can you have a look at the following EAR-file. When running the
followin URL, it gives me the error :
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(ApplicationFilterCh
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java
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.jav
at org.ow2.jonas.web.tomcat6.tx.TransactionValve.invoke(TransactionValve.java:90)
at org.ow2.jonas.web.tomcat6.ResetAuthenticationValve.invoke(ResetAuthenticationValve.j
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(Http11Protoc
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassCastException: $Proxy52 cannot be cast to
be.sso.test.ParametersLocal


When debugging in Eclipse, I see I get the remote interface back.

Greetings,

Stefaan Somers

On 26 August 2011 14:13, Florent BENOIT <***@ow2.org> wrote:
>    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<***@ow2.org>  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)
>>>> <***@ow2.org>    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<***@gmail.com>
>>>>>>
>>>>>> 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)
>>>>>> <***@ow2.org>    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<***@gmail.com>
>>>>>>>>
>>>>>>>> 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)
>>>>>>>> <***@ow2.org>    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<***@gmail.com>
>>>>>>>>>>
>>>>>>>>>> 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)
>>>>>>>>>> <***@ow2.org>    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<***@gmail.com>
>>>>>>>>>>>>
>>>>>>>>>>>> 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)
>>>>>>>>>>>> <***@ow2.org>    wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Can't you rely on container's injection (@EJB) ?
>>>>>>>>>>>>> --G
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2011/8/9 Stefaan Somers<***@gmail.com>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 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
>>>
>
>
Florent BENOIT
2011-08-26 13:34:04 UTC
Permalink
Hi,

If you get a remote interface instead of the local interface and if
you've used the mappedName attribute, it means that you've at least two
interfaces
The thow proxies are registered with the same name : mappedName
By using only one interface, proxy won't be registered twice and you'll
get the expected interface/proxy

It is planned to allow to set each JNDI name of the interfaces but it's
not yet available in JOnAS 5.2

Regards,

Florent

On 08/26/2011 02:38 PM, Stefaan Somers wrote:
> Can you have a look at the following EAR-file. When running the
> followin URL, it gives me the error :
> 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(ApplicationFilterCh
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java
> 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.jav
> at org.ow2.jonas.web.tomcat6.tx.TransactionValve.invoke(TransactionValve.java:90)
> at org.ow2.jonas.web.tomcat6.ResetAuthenticationValve.invoke(ResetAuthenticationValve.j
> 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(Http11Protoc
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
> at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.ClassCastException: $Proxy52 cannot be cast to
> be.sso.test.ParametersLocal
>
>
> When debugging in Eclipse, I see I get the remote interface back.
>
> Greetings,
>
> Stefaan Somers
Loading...