Bugs item #790843, was opened at 2003-08-18 15:01
Message generated for change (Comment added) made by starksm
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=790843&group_id=22866

Category: JBossServer
Group: v3.2
Status: Open
Resolution: Accepted
Priority: 5
Submitted By: Stefan Reich (sreich)
Assigned to: Adrian Brock (ejort)
Summary: JMX/jndi scoping problem for beans with same jndiName

Initial Comment:
SUN's petstore components have a couple of beans that 
appear in several archives, and that have the same 
jndiName. Although perfectly legal, it causes a problem 
when the JMX core registers the beans because of the 
naming scheme it uses. Each bean is registered like this in 
the jboss.j2ee name space:
jboss.j2ee:jndiName=local/ContactInfoEJB,service=EJB

Because the record doesn't include the module name, a 
naming conflict occurs, and result in the deletion and 
recreation of the bean, but with a different classloader. This 
finally leads to ClassCastExceptions in arbitrary locations of 
the application.

The test case is SUNs PetStore 1.3.1_02 on top of MySQL, 
which is most likely to large to attach. I can send it via 
email, if necessary.


Errors at deploy time look like this:
12:59:12,996 ERROR [EjbModule] Initialization failed
javax.management.InstanceAlreadyExistsException: 
jboss.j2ee:jndiName=local/ContactInfoEJB,service=EJB 
already registered.
        at 
org.jboss.mx.server.registry.BasicMBeanRegistry.add(BasicM
BeanRegistry.java:617)
        at 
org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBe
an(BasicMBeanRegistry.java:198)
        at 
sun.reflect.GeneratedMethodAccessor2.invoke(Unknown 
Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Delegating
MethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at 
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(Ref
lectedMBeanDispatcher.java:284)
        at 
org.jboss.mx.interceptor.ObjectReferenceInterceptor.invoke(
ObjectReferenceInterceptor.java:59)
        at 
org.jboss.mx.interceptor.MBeanAttributeInterceptor.invoke(M
BeanAttributeInterceptor.java:43)
        at 
org.jboss.mx.interceptor.PersistenceInterceptor2.invoke(Pers
istenceInterceptor2.java:93)
        at 
org.jboss.mx.server.MBeanInvoker.invoke(MBeanInvoker.java
:76)
......

Or

12:59:13,731 DEBUG [EJBModuleFactory] Created module: 
jboss.management.local:
J2EEApplication=supplier.ear,J2EEServer=Local,j2eeType=EJB
Module,name=supplierpo-ejb.jar
12:59:13,732 DEBUG [EJBModuleFactory] 
javax.management.InstanceNotFoundException: jboss.j2ee:
jndiName=local/SupplierOrderEJB,service=EJB is not 
registered.
        at 
org.jboss.mx.server.registry.BasicMBeanRegistry.get(BasicM
BeanRegistry.java:354)
        at 
org.jboss.mx.server.MBeanServerImpl.getAttribute(MBeanSe
rverImpl.java:446)
        at 
org.jboss.management.j2ee.factory.EJBModuleFactory.create
EJB(EJBModuleFactory.java:102)
        at 
org.jboss.management.j2ee.factory.EJBModuleFactory.create(
EJBModuleFactory.java:65)
        at 
org.jboss.management.j2ee.LocalJBossServerDomain.handle
Notification(LocalJBossServerDomain.java:383)
        at 
org.jboss.mx.server.NotificationListenerProxy.handleNotificati
on(NotificationListenerProxy.java:71)
        at 
javax.management.NotificationBroadcasterSupport.sendNotifi
cation(NotificationBroadcasterSupport.java:95)
        at 
org.jboss.deployment.SubDeployerSupport.start(SubDeployer
Support.java:178)
        at org.jboss.ejb.EJBDeployer.start(EJBDeployer.java:
558)
        at 
org.jboss.deployment.MainDeployer.start(MainDeployer.java:
824)
        at 
org.jboss.deployment.MainDeployer.start(MainDeployer.java:
816)
        at 
org.jboss.deployment.MainDeployer.deploy(MainDeployer.jav
a:632)
        at 
org.jboss.deployment.MainDeployer.deploy(MainDeployer.jav
a:605)
        at 
sun.reflect.GeneratedMethodAccessor23.invoke(Unknown 
Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Delegating
MethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at 
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(Ref
lectedMBeanDispatcher.java:284)
        at 
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerI
mpl.java:550)
        at 
org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java
:177)
        at $Proxy7.deploy(Unknown Source)


----------------------------------------------------------------------

>Comment By: Scott M Stark (starksm)
Date: 2003-08-23 17:24

Message:
Logged In: YES 
user_id=175228

You need to specify a unique jndi name using the jboss.xml
descriptor:

<jboss>
    <enterprise-beans>
        <session>
            <ejb-name>ENCBean</ejb-name>
            <ejb-local-ref>
                <ejb-ref-name>ejb/bean1</ejb-ref-name>
                <local-jndi-name>ENCBean1</jndi-name>
            </ejb-ref>
...

----------------------------------------------------------------------

Comment By: Adrian Brock (ejort)
Date: 2003-08-18 16:24

Message:
Logged In: YES 
user_id=9459

<ejb-link> is used for <ejb-ref> resolution during ENC
construction.

It does not affect the global jndi binding.

Regards,
Adrian

----------------------------------------------------------------------

Comment By: Stefan Reich (sreich)
Date: 2003-08-18 16:11

Message:
Logged In: YES 
user_id=429729

Well, problem is that the <ejb-local-ref> in the ejb-jar.xml of the 
modules in question contain <ejb-link> elements.

According to the change recently made by Jan Bartel ("Handling of 
ejb-ref and ejb-local-ref") the <ejb-link> is consulted first, and 
there is nothing I can configure w/o changing ejb-jar.xml.


----------------------------------------------------------------------

Comment By: Adrian Brock (ejort)
Date: 2003-08-18 15:59

Message:
Logged In: YES 
user_id=9459

And it is the job of the deployer to resolve these conflicts
(choose appropriate jndi-names)

e.g. 
<local-jndi-name>ejbs/petstore/ContactInfo</local-jndi-name>
and <local-jndi-name>ejbs/supplier/ContactInfo</local-jndi-name>

That jboss doesn't have support for changing these settings
without
breaking open the package is a known issue.

Regards,
Adrian

----------------------------------------------------------------------

Comment By: Stefan Reich (sreich)
Date: 2003-08-18 15:50

Message:
Logged In: YES 
user_id=429729

Maybe I was not explicit enough.
Module petstore contains bean ContactInfoEJB, mapped to 
jndiName local/ContactInfoEJB
Module supplier contains bean ContactInfoEJB, mapped to 
jndiName local/ContactInfoEJB
That's where the problem occurs, not between different beans in 
the same module. 
Modules are supposed to be self-contained and isolated from the 
rest of the world, and with the current implementation, they 
aren't.

----------------------------------------------------------------------

Comment By: Adrian Brock (ejort)
Date: 2003-08-18 15:42

Message:
Logged In: YES 
user_id=9459

Duplicate JNDI mappings are not legal.

The spec doesn't even specify jndi bindings, leaving it to
application specific deployment descriptors.

You should remap the jndi names using jboss.xml,
by default the jboss mapping is local/<ejb-name>

Regards,
Adrian

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=376685&aid=790843&group_id=22866


-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines
at the same time. Free trial click here:http://www.vmware.com/wl/offer/358/0
_______________________________________________
JBoss-Development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to