【问题标题】:JBoss MBean NotificationListener problemsJBoss MBean NotificationListener 问题
【发布时间】:2011-04-19 15:43:54
【问题描述】:

我在 JBoss 上遇到了 NotificationListener 的一些问题。

我在 JBoss 上有一个 MBean,我可以连接并调用他们的方法。但是当我尝试添加通知时,你会得到下一个异常:

org.jboss.invocation.JBossLazyUnmarshallingException:getArguments 失败 在 org.jboss.invocation.MarshalledInvocation.getArguments(MarshalledInvocation.java:513) 在 org.jboss.jmx.connector.invoker.InvokerAdaptorService.invoke(InvokerAdaptorService.java:230) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157) 在 org.jboss.mx.server.Invocation.dispatch(Invocation.java:96) 在 org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:138) 在 org.jboss.mx.server.Invocation.invoke(Invocation.java:90) 在 org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:140) 在 org.jboss.jmx.connector.invoker.SerializableInterceptor.invoke(SerializableInterceptor.java:74) 在 org.jboss.mx.server.Invocation.invoke(Invocation.java:90) 在 org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 在 org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668) 在 org.jboss.invocation.jrmp.server.JRMPProxyFactory.invoke(JRMPProxyFactory.java:180) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157) 在 org.jboss.mx.server.Invocation.dispatch(Invocation.java:96) 在 org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 在 org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 在 org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668) 在 org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:855) 在 org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:422) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) 在 sun.rmi.transport.Transport$1.run(Transport.java:159) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.rmi.transport.Transport.serviceCall(Transport.java:155) 在 sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 在 java.lang.Thread.run(Thread.java:637) 引起:java.lang.ClassNotFoundException:ar.com.cube3.test.msn.MyListener 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:247) 在 org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:292) 在 org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1119) 在 org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:798) 在 org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:441) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:247) 在 java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604) 在 org.jboss.invocation.MarshalledValueInputStream.resolveClass(MarshalledValueInputStream.java:109) 在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575) 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 在 java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 在 org.jboss.invocation.MarshalledValue.get(MarshalledValue.java:91) 在 org.jboss.invocation.MarshalledInvocation.getArguments(MarshalledInvocation.java:509) ... 40 更多

我正在从 JBOSS 外部的客户端调用 MBean

main的代码是:

属性 env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); env.put(Context.PROVIDER_URL, "jnp://localhost:1099"); InitialContext ctx; ctx = new InitialContext(env); MBeanServerConnection server = (MBeanServerConnection)ctx.lookup("jmx/invoker/RMIAdaptor"); // 获取对 CacheMgmtInterceptor MBean 的引用 String cache_service = "ar.com.cube3.framework.modulos.msn:jndiName=msnControl,service=MSNControlAcceso"; //String cache_service = "jboss:service=JNDIView"; ObjectName mgmt_name = new ObjectName(cache_service); // server.addNotificationListener(mgmt_name,(NotificationListener) new MyListener(), new NotificationFilter() { 私有静态最终长序列版本UID = 6404657810887052083L; 公共布尔isNotificationEnabled(通知通知){ // TODO 自动生成的方法存根 返回真; } }, 空值); 对象 obj[]= {"test"}; 对象 temp = server.invoke(mgmt_name, "registrarMsnMessenger", obj, new String[]{String.class.getName()}); System.out.println(temp); } 捕捉(异常 e){ // TODO 自动生成的 catch 块 e.printStackTrace(); }

还有 notificationListener 的实现:

导入 java.io.Serializable; 导入 javax.management.Notification; 导入 javax.management.NotificationListener; 公共类 MyListener 实现 NotificationListener,Serializable{ /** * */ 私有静态最终长序列版本UID = 1L; 公共无效句柄通知(通知通知,对象回传){ System.out.println("objecto"+ notification.getMessage()); } }

提前致谢。 安德烈斯。

【问题讨论】:

    标签: java jboss notifications jmx mbeans


    【解决方案1】:

    问题是您的 JBoss 服务器在其类路径中没有您的侦听器实现 (ar.com.cube3.test.msn.MyListener),因此它无法实例化它以将其注册为听众。将所有自定义类(如侦听器)打包到 jar 中,并将 jar 放入目录 [jboss-home]/server/[server-name]/lib

    【讨论】:

    • 尼古拉斯,是的,你是对的,我的错,我认为当课堂已经在耳边时,没有必要将jar放入lib文件夹。
    【解决方案2】:

    这个 wiki 页面也有一些关于这个主题的信息

    http://community.jboss.org/wiki/HowDoIAddANotificationListenerToARemoteMBeanServer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      相关资源
      最近更新 更多