Re: Re: Re: Re: Re: Re: Re: Re: Re: How to change remote JNDI-name in Jonas
Stefaan Somers <[email protected]> Fri, 26 Aug 2011 11:28:07 +0200
| Newsgroups | gmane.comp.java.objectweb.jonas |
|---|---|
| Message-ID | <CA+N_TpVEKRsr=n5igAGe1mmEpbu_cqTjo1qo46mDQeN6s_-SGg@mail.gmail.com> |
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=3D"1.0" encoding=3D"UTF-8"?>
<ejb-jar version=3D"3.0" xmlns=3D"http://java.sun.com/xml/ns/javaee"
xmlns:xsi=3D"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=3D"http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
<display-name>
EducationEJB3Beans </display-name>
<enterprise-beans>
<session>
<display-name>ParametersRemote</display-name>
<ejb-name>ParametersRemote</ejb-name>
<mapped-name>MyApp_ParametersRemote</mapped-name>
<business-remote>be.sso.test.ParametersRemote</business-remote>
<ejb-class>be.sso.test.Parameters</ejb-class>
<session-type>Stateless</session-type>
</session>
<session>
<display-name>ParametersLocal</display-name>
<ejb-name>MyApp_ParametersLocal</ejb-name>
<mapped-name>MyApp_ParametersLocal</mapped-name>
<business-local>be.sso.test.ParametersLocal</business-local>
<ejb-class>be.sso.test.Parameters</ejb-class>
<session-type>Stateless</session-type>
</session>
</enterprise-beans>
</ejb-jar>
On 9 August 2011 14:52, Guillaume Sauthier (OW2)
<[email protected]> wrote:
> OK I think got it.
> The problem with mappedName attribute is that we have only 1 value that m=
ust
> 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 globa=
l
> or ejbjar configuration)
> <strategy>${beanName}-${beanInterface}@${beanMode}</strategy>
> or
> <mapped-names>
> =A0 <local>MyLocalBean</local>
> =A0 <remote>MyRemoteBean</remote>
> </mapped-names>
>
> Thanks
> --G
>
> 2011/8/9 Stefaan Somers <[email protected]>
>>
>> Guillaume,
>>
>> OK but if 2 Beans normally have the same package-name & ClassName in 2
>> different applications (different jar-components), there can be only 1
>> JNDI-entry for the remote interface. So there is the danger that 1
>> application is going to the wrong JNDI-entry.
>>
>>
>> For example we have 2 applications with each an account-component
>> (with Account-bean that is used for logon information). Last time when
>> I deployed the 2 applications, the one application was using the
>> account-data from the other application.
>>
>> I hope it's a bit clear for you??
>>
>> Greetings,
>>
>> Stefaan Somers
>>
>> On 9 August 2011 13:51, Guillaume Sauthier (OW2)
>> <[email protected]> wrote:
>> > EasyBeans (the EJB3 container in JOnAS) gives priority to beans found =
in
>> > the
>> > same application if there is multiple match.
>> > The EJB3 spec mandates that behavior so you're safe :)
>> > Just make a try.
>> > --G
>> >
>> > 2011/8/9 Stefaan Somers <[email protected]>
>> >>
>> >> But,
>> >>
>> >> our applications are generated, so we can have for example 2
>> >> account-beans in 2 different applications. Therefore we must be able
>> >> to uniquely identify the 2 remote JNDI interfaces to the 2 different
>> >> applications. That's why we are using "mappedName"
>> >>
>> >> Greetings,
>> >>
>> >> Stefaan Somers
>> >>
>> >> On 9 August 2011 11:55, Guillaume Sauthier (OW2)
>> >> <[email protected]> wrote:
>> >> > You should also remove your mapped names (don't needed anymore
>> >> > because
>> >> > you
>> >> > rely on the container to find the right interface for you).
>> >> >
>> >> > --G
>> >> >
>> >> > 2011/8/9 Stefaan Somers <[email protected]>
>> >> >>
>> >> >> Hello,
>> >> >>
>> >> >> I'v tried that too, but it also injects the remote-bean then inste=
ad
>> >> >> of the local-bean.
>> >> >>
>> >> >> Greetings,
>> >> >>
>> >> >> Stefaan Somers
>> >> >>
>> >> >> On 9 August 2011 11:04, Guillaume Sauthier (OW2)
>> >> >> <[email protected]> wrote:
>> >> >> > Can't you change your Calculator.java to something like this:
>> >> >> >
>> >> >> > It's much more easier to read :)
>> >> >> >
>> >> >> > /**
>> >> >> > =A0* Session Bean implementation class Calculator
>> >> >> > =A0*/
>> >> >> > @Stateless
>> >> >> > public class Calculator implements CalculatorRemote,
>> >> >> > CalculatorLocal
>> >> >> > {
>> >> >> >
>> >> >> > =A0 @EJB
>> >> >> > =A0 private ParametersLocal params;
>> >> >> >
>> >> >> >
>> >> >> > =A0=A0=A0 /**
>> >> >> > =A0=A0=A0=A0 * Default constructor.
>> >> >> > =A0=A0=A0=A0 */
>> >> >> > =A0=A0=A0 public Calculator() {
>> >> >> >
>> >> >> > =A0=A0=A0 }
>> >> >> >
>> >> >> > =A0=A0=A0 @Override
>> >> >> > =A0=A0=A0 public String returnMessage() {
>> >> >> > =A0=A0=A0 =A0=A0=A0 result =3D parameters.getParameter();
>> >> >> > =A0=A0=A0 =A0=A0=A0 return "It's all being calculated :" + resul=
t;
>> >> >> > =A0=A0=A0 }
>> >> >> >
>> >> >> > }
>> >> >> >
>> >> >> > 2011/8/9 Stefaan Somers <[email protected]>
>> >> >> >>
>> >> >> >> Hi Guillaume,
>> >> >> >> Thnks for responding. I'm already banging my head for a few day=
s
>> >> >> >> with
>> >> >> >> this problem. So any help would be most welcome.
>> >> >> >>
>> >> >> >> I've included a sample project. For the Parameters-bean I use t=
he
>> >> >> >> 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
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> be.sso.test.Calculator.original$EasyBeans$returnMessage(Calcula=
tor.java:34)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.gen.invocationcontext.be.sso.test.Calculator.=
EasyBeansInvocationContextImplreturnMessageAROUNDINVOKE1942950347.proceed(U=
nknown
>> >> >> >> Source)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.transaction.interceptors.CMTRequiredTransacti=
onInterceptor.intercept(CMTRequiredTransactionInterceptor.java:110)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.gen.invocationcontext.be.sso.test.Calculator.=
EasyBeansInvocationContextImplreturnMessageAROUNDINVOKE1942950347.proceed(U=
nknown
>> >> >> >> Source)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.jonas.jndi.interceptors.impl.easybeans.ResourceCheckerI=
nterceptor.intercept(ResourceCheckerInterceptor.java:103)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.gen.invocationcontext.be.sso.test.Calculator.=
EasyBeansInvocationContextImplreturnMessageAROUNDINVOKE1942950347.proceed(U=
nknown
>> >> >> >> Source)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.jonas.ejb.easybeans.JOnASENCInterceptor.intercept(JOnAS=
ENCInterceptor.java:67)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.gen.invocationcontext.be.sso.test.Calculator.=
EasyBeansInvocationContextImplreturnMessageAROUNDINVOKE1942950347.proceed(U=
nknown
>> >> >> >> Source)
>> >> >> >> =A0 =A0 =A0 =A0at be.sso.test.Calculator.returnMessage(Calculat=
or.java)
>> >> >> >> =A0 =A0 =A0 =A0at sun.reflect.NativeMethodAccessorImpl.invoke0(=
Native
>> >> >> >> Method)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccesso=
rImpl.java:39)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho=
dAccessorImpl.java:25)
>> >> >> >> =A0 =A0 =A0 =A0at java.lang.reflect.Method.invoke(Method.java:5=
97)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.container.session.stateless.StatelessSessionF=
actory.localCall(StatelessSessionFactory.java:161)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.container.session.SessionFactory.rpcInvoke(Se=
ssionFactory.java:237)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.rpc.rmi.server.RMIServerRPCImpl.getEJBRespons=
e(RMIServerRPCImpl.java:106)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.rpc.rmi.client.RMIClientRPC.sendEJBRequest(RM=
IClientRPC.java:105)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.proxy.client.ClientRPCInvocationHandler.invok=
e(ClientRPCInvocationHandler.java:195)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.easybeans.proxy.client.ClientRPCInvocationHandler.invok=
e(ClientRPCInvocationHandler.java:111)
>> >> >> >> =A0 =A0 =A0 =A0at $Proxy62.returnMessage(Unknown Source)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >> be.sso.servlet.CalculateServlet.doGet(CalculateServlet.java:40)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >> javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >> javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilte=
r(ApplicationFilterChain.java:290)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(Applic=
ationFilterChain.java:206)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWr=
apperValve.java:233)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.catalina.core.StandardContextValve.invoke(StandardCo=
ntextValve.java:191)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.jonas.web.tomcat6.CheckOpenResourcesValve.invoke(CheckO=
penResourcesValve.java:73)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.jonas.web.tomcat6.tx.TransactionValve.invoke(Transactio=
nValve.java:90)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.ow2.jonas.web.tomcat6.ResetAuthenticationValve.invoke(Reset=
AuthenticationValve.java:95)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostV=
alve.java:127)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportV=
alve.java:102)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEng=
ineValve.java:109)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapt=
er.java:340)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.coyote.http11.Http11Processor.process(Http11Processo=
r.java:857)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler=
.process(Http11Protocol.java:588)
>> >> >> >> =A0 =A0 =A0 =A0at
>> >> >> >>
>> >> >> >>
>> >> >> >> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.j=
ava:489)
>> >> >> >> =A0 =A0 =A0 =A0at java.lang.Thread.run(Thread.java:619)
>> >> >> >>
>> >> >> >>
>> >> >> >>
>> >> >> >> On 9 August 2011 10:45, Guillaume Sauthier (OW2)
>> >> >> >> <[email protected]> wrote:
>> >> >> >> > Can't you rely on container's injection (@EJB) ?
>> >> >> >> > --G
>> >> >> >> >
>> >> >> >> > 2011/8/9 Stefaan Somers <[email protected]>
>> >> >> >> >>
>> >> >> >> >> Hi all,
>> >> >> >> >>
>> >> >> >> >> I need to change the remote jndi-name of a Stateless Session
>> >> >> >> >> Bean
>> >> >> >> >> .
>> >> >> >> >> Default the naming for jonas is :
>> >> >> >> >>
>> >> >> >> >> SessionBean.class.getName()
>> >> >> >> >> + "_" + SessionBeanInterface.class.getName() + "@Remote"
>> >> >> >> >>
>> >> >> >> >> How can I change this. If I add the attribute mappedName in
>> >> >> >> >> the
>> >> >> >> >> @Stateless-annotation, I cannot get to the Local Interface
>> >> >> >> >> anymore.
>> >> >> >> >> And I need to be able to get to both.
>> >> >> >> >>
>> >> >> >> >> Greetings,
>> >> >> >> >>
>> >> >> >> >> Stefaan Somers
>> >> >> >> >
>> >> >> >> >
>> >> >> >
>> >> >> >
>> >> >
>> >> >
>> >
>> >
>
>