[
https://issues.jboss.org/browse/AS7-2138?page=com.atlassian.jira.plugin.s...
]
Bartosz Baranowski edited comment on AS7-2138 at 3/7/12 7:30 AM:
-----------------------------------------------------------------
Im waiting on input from other core members. In the meanwhile, if this is a blocker a
workaround:
{code:title=Connector.java|borderStyle=solid}
JMXConnector connector = null;
MBeanServerConnection connection = null;
try {
String urlString =
"service:jmx:rmi:///jndi/rmi://localhost:1090/jmxrmi";
JMXServiceURL serviceURL = new JMXServiceURL(urlString);
Map<String, String> env = new HashMap<String, String>();
env.put(InitialContext.INITIAL_CONTEXT_FACTORY,
RMIContextFactory.class.getName());
connector = JMXConnectorFactory.connect(serviceURL, env);
connection = connector.getMBeanServerConnection();
} finally {
if (connector != null) {
connector.close();
}
}
{code}
{code:title=RMIContextFactory.java|borderStyle=solid}
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.spi.InitialContextFactory;
import com.sun.jndi.url.rmi.rmiURLContext;
public class RMIContextFactory implements InitialContextFactory{
/* (non-Javadoc)
* @see javax.naming.spi.InitialContextFactory#getInitialContext(java.util.Hashtable)
*/
@Override
public Context getInitialContext(Hashtable<?, ?> environment) throws
NamingException {
return new rmiURLContext(environment);
}
}
{code}
Also this will require small modification of sun.jdk module, to export
'com.sun.jndi.url.rmi' path(or you will have to provide your own impl of
rmiContext :) ), since by default this module exports 'com.sun.jndi.url' and
'com.sun.jndi.url.ldap', iirc.
So, edit: *jboss-as/build/src/main/resources/modules/sun/jdk/main/main.xml* and one
statement: *<path name="com/sun/jndi/url/rmi"/>*, it should look like
this:
{code:xml}
<module xmlns="urn:jboss:module:1.1" name="sun.jdk">
<resources>
<!-- currently jboss modules has not way of importing services from
classes.jar so we duplicate them here -->
<resource-root path="service-loader-resources"/>
</resources>
<dependencies>
<system export="true">
<paths>
<path name="com/sun/script/javascript"/>
<path name="com/sun/jndi/dns"/>
<path name="com/sun/jndi/ldap"/>
<path name="com/sun/jndi/url"/>
<path name="com/sun/jndi/url/rmi"/>
<path name="com/sun/jndi/url/dns"/>
<path name="com/sun/security/auth"/>
<path name="com/sun/security/auth/login"/>
<path name="com/sun/security/auth/module"/>
<path name="sun/misc"/>
<path name="sun/io"/>
<path name="sun/nio"/>
<path name="sun/nio/ch"/>
<path name="sun/security"/>
<path name="sun/security/krb5"/>
<path name="sun/util"/>
<path name="sun/util/calendar"/>
<path name="sun/security/provider"/>
<path name="META-INF/services"/>
</paths>
<exports>
<include-set>
<path name="META-INF/services"/>
</include-set>
</exports>
</system>
</dependencies>
</module>
{code}
Now NOTE: this will make that initial context to be usable ONLY for RMI lookups.
was (Author: baranowb):
Im waiting on input from other core members. In the meanwhile, if this is a blocker a
workaround:
{code:title=Connector.java|borderStyle=solid}
JMXConnector connector = null;
MBeanServerConnection connection = null;
try {
String urlString = /* System.getProperty("jmx.service.url",
*/JMXConnectorTestCase.SERVICE_URI/* ) */;
JMXServiceURL serviceURL = new JMXServiceURL(urlString);
Map<String, String> env = new HashMap<String, String>();
env.put(InitialContext.INITIAL_CONTEXT_FACTORY,
RMIContextFactory.class.getName());
connector = JMXConnectorFactory.connect(serviceURL, env);
connection = connector.getMBeanServerConnection();
} finally {
if (connector != null) {
connector.close();
}
}
{code}
{code:title=RMIContextFactory.java|borderStyle=solid}
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.spi.InitialContextFactory;
import com.sun.jndi.url.rmi.rmiURLContext;
public class RMIContextFactory implements InitialContextFactory{
/* (non-Javadoc)
* @see javax.naming.spi.InitialContextFactory#getInitialContext(java.util.Hashtable)
*/
@Override
public Context getInitialContext(Hashtable<?, ?> environment) throws
NamingException {
return new rmiURLContext(environment);
}
}
{code}
Also this will require small modification of sun.jdk module, to export
'com.sun.jndi.url.rmi' path(or you will have to provide your own impl of
rmiContext :) ), since by default this module exports 'com.sun.jndi.url' and
'com.sun.jndi.url.ldap', iirc.
So, edit: *jboss-as/build/src/main/resources/modules/sun/jdk/main/main.xml* and one
statement: *<path name="com/sun/jndi/url/rmi"/>*, it should look like
this:
{code:xml}
<module xmlns="urn:jboss:module:1.1" name="sun.jdk">
<resources>
<!-- currently jboss modules has not way of importing services from
classes.jar so we duplicate them here -->
<resource-root path="service-loader-resources"/>
</resources>
<dependencies>
<system export="true">
<paths>
<path name="com/sun/script/javascript"/>
<path name="com/sun/jndi/dns"/>
<path name="com/sun/jndi/ldap"/>
<path name="com/sun/jndi/url"/>
<path name="com/sun/jndi/url/rmi"/>
<path name="com/sun/jndi/url/dns"/>
<path name="com/sun/security/auth"/>
<path name="com/sun/security/auth/login"/>
<path name="com/sun/security/auth/module"/>
<path name="sun/misc"/>
<path name="sun/io"/>
<path name="sun/nio"/>
<path name="sun/nio/ch"/>
<path name="sun/security"/>
<path name="sun/security/krb5"/>
<path name="sun/util"/>
<path name="sun/util/calendar"/>
<path name="sun/security/provider"/>
<path name="META-INF/services"/>
</paths>
<exports>
<include-set>
<path name="META-INF/services"/>
</include-set>
</exports>
</system>
</dependencies>
</module>
{code}
Now NOTE: this will make that initial context to be usable ONLY for RMI lookups.
javax.naming.NameNotFoundException: rmi://127.0.0.1:1090/jmxrmi
thrown when creating MBeanServerConnection
----------------------------------------------------------------------------------------------------------
Key: AS7-2138
URL:
https://issues.jboss.org/browse/AS7-2138
Project: Application Server 7
Issue Type: Bug
Components: JMX
Affects Versions: 7.0.0.Final, 7.0.1.Final, 7.0.2.Final, 7.1.0.Final
Reporter: Stian Thorgersen
Assignee: Bartosz Baranowski
Attachments: jmx-test.jar, JmxClient.java, JMXConnectionBean.java,
JmxServer.java
When trying to create a MBeanServerConnection from within an EJB a
"javax.naming.NameNotFoundException" is thrown. When executed as a standalone
Java the same code works fine. To verify that it works as a standalone Java process run
"java -cp jmx-test.jar com.example.JMXConnectionBean" (with AS7 running on the
same machine).
Full stack trace:
{code}
Caused by: java.io.IOException: Failed to retrieve RMIServer stub:
javax.naming.NameNotFoundException: rmi://127.0.0.1:1090/jmxrmi -- service
jboss.naming.context.java.rmi:."127.0.0.1:1090".jmxrmi
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:340) [:1.6.0_26]
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
[:1.6.0_26]
at com.example.JMXConnectionBean.init(JMXConnectionBean.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_26]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[:1.6.0_26]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[:1.6.0_26]
at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_26]
at
org.jboss.as.ee.component.ManagedReferenceLifecycleMethodInterceptor.processInvocation(ManagedReferenceLifecycleMethodInterceptor.java:70)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at
org.jboss.as.ee.component.ManagedReferenceInterceptor.processInvocation(ManagedReferenceInterceptor.java:53)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at
org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:44)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at
org.jboss.as.ejb3.component.session.SessionInvocationContextInterceptor$CustomSessionInvocationContext.proceed(SessionInvocationContextInterceptor.java:126)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:211)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:313)
at
org.jboss.as.ejb3.tx.SingletonLifecycleCMTTxInterceptor.processInvocation(SingletonLifecycleCMTTxInterceptor.java:56)
at
org.jboss.as.ejb3.tx.SingletonLifecycleCMTTxInterceptor.processInvocation(SingletonLifecycleCMTTxInterceptor.java:42)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at
org.jboss.as.ejb3.component.session.SessionInvocationContextInterceptor.processInvocation(SessionInvocationContextInterceptor.java:71)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
[jboss-invocation-1.1.0.Final.jar:1.1.0.Final]
at
org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:152)
... 9 more
Caused by: javax.naming.NameNotFoundException: rmi://127.0.0.1:1090/jmxrmi -- service
jboss.naming.context.java.rmi:."127.0.0.1:1090".jmxrmi
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:87)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:173)
at org.jboss.as.naming.InitialContext.lookup(InitialContext.java:47)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:209)
at javax.naming.InitialContext.lookup(InitialContext.java:392) [:1.6.0_26]
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1888)
[:1.6.0_26]
at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1858)
[:1.6.0_26]
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:257) [:1.6.0_26]
... 37 more
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira