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