Hi

I'm trying to run a method of a MBean service from remote machine.

Well, after read docs I did the following:


First I did an interface:



  | public interface ActiveMQNetworkMBean {
  |     
  |     public void setPropertiesResource( String propertiesResource );
  | 
  |     public String getPropertiesResource();
  | 
  |     public void start() throws Exception;
  | 
  |     public void stop() throws Exception;
  | 
  |     public void startSlave() throws Exception;
  | 
  |     public void stopSlave() throws Exception;
  | 
  |     public String myTestAction() throws Exception;
  | 
  |     Object invoke(org.jboss.invocation.Invocation mi) throws Exception;
  | }
  | 
  |     





Then I did the implementation:


  | public class ActiveMQNetwork implements ActiveMQNetworkMBean {
  |     private String propertiesResource;
  |     private BrokerService service = null;
  |     private BrokerService serviceSlave = null;
  |     private boolean started = false;
  |     private boolean startedSlave = false;
  |     private static Logger log = Logger.getLogger(ActiveMQNetwork.class);
  | 
  | 
  |     /**
  |      * Returns current propertie resource or null if wasn't
  |      * yet configured.
  |      *
  |      * @return string with propertie resource.
  |      */
  |     public String getPropertiesResource() {
  |         return this.propertiesResource;
  |     }
  | 
  | 
  |     /**
  |      * Set properties Resource.
  |      *
  |      * @param propertiesResource
  |      */
  |     public void setPropertiesResource(String propertiesResource) {
  |         this.propertiesResource = propertiesResource;
  |     }
  | 
  | 
  |     /**
  |      * Start service.
  |      *
  |      * @throws Exception
  |      */
  |     public void start() throws Exception {
  |         started = true;
  |         log.info("BROKER SERVICE: Starting ActiveMQNetwork ... " + 
propertiesResource);
  |         createNetwork();
  |     }
  | 
  |     /**
  |      * Stop service.
  |      *
  |      * @throws Exception
  |      */
  |     public void stop() throws Exception {
  |         started = false;
  |         log.info("BROKER SERVICE: Stoping ActiveMQNetwork ...");
  |         if (service != null) {
  |             service.stop();
  |             service = null;
  |         }
  |         // do what you want ...
  |     }
  | 
  |     /**
  |      * Create a broker.
  |      *
  |      * Configuration will be read from a file.
  |      */
  |     private void createNetwork() {
  |         log.info("BROKER SERVICE: trying to crete broker");
  | 
  |         try {
  |             URI brokerURI = new URI("xbean:" + 
System.getProperty("jboss.server.config.url") + "activemq_master.xml");
  |             service = BrokerFactory.createBroker(brokerURI);
  |             if (service != null) {
  |                 service.start();
  |             }
  |         } catch (Exception e) {
  |             log.error("BROKER SERVICE: createNetwork Exception: " + 
e.getMessage());
  |             e.printStackTrace();
  |         }
  |     }
  | 
  |     /**
  |      * Start service.
  |      *
  |      * @throws Exception
  |      */
  |     public void startSlave() throws Exception {
  |         startedSlave = true;
  |         log.info("BROKER SERVICE: Starting ActiveMQNetwork Slave Broker... 
");
  |         createNetworkSlave();
  |     }
  | 
  |     /**
  |      * Stop service.
  |      *
  |      * @throws Exception
  |      */
  |     public void stopSlave() throws Exception {
  |         startedSlave = false;
  |         log.info("BROKER SERVICE: Stoping ActiveMQNetwork Slave Broker...");
  |         if (serviceSlave != null) {
  |             serviceSlave.stop();
  |             serviceSlave = null;
  |         }
  |         // do what you want ...
  |     }
  | 
  |     /**
  |      * Create a broker.
  |      *
  |      * Configuration will be read from a file.
  |      */
  |     private void createNetworkSlave() {
  |         log.info("BROKER SERVICE: trying to crete broker slave");
  | 
  |         try {
  |             URI brokerURI = new URI("xbean:" + 
System.getProperty("jboss.server.config.url") + "activemq_slave.xml");
  |             serviceSlave = BrokerFactory.createBroker(brokerURI);
  |             if (serviceSlave != null) {
  |                 serviceSlave.start();
  |             }
  |         } catch (Exception e) {
  |             log.error("BROKER SERVICE: createNetwork Slave Exception: " + 
e.getMessage());
  |             e.printStackTrace();
  |         }
  |     }
  | 
  |     public String myTestAction() {
  |         return "MyAction";
  |     }
  | 
  | 
  |     public Object invoke(Invocation mi) throws Exception {
  |         log.info("BROKER SERVICE: MyService.invoke> method=" + 
mi.getMethod().getName());
  |         return "invoke";
  |     }
  | 
  | }
  | 
  | 
        




I deployed this service as sar file with the follown jboss-service.xml



  | 
  | <mbean code="com.bs.activemq.mbean.service.ActiveMQNetwork"
  |            name="jms.ActiveMQ:service=ActiveMQNetwork">        
  |         <depends>jboss:service=Naming</depends>
  |     </mbean>
  | 
  |     <!-- Proxy factory for MyService that will call target method on the 
target service -->
  |    <mbean code="org.jboss.invocation.jrmp.server.JRMPProxyFactory"
  |       
name="jboss.jmx:type=adaptor,name=MyServiceInvokeTarget,protocol=jrmp,service=proxyFactory">
  |       <!-- Use the standard JRMPInvoker from conf/jboss-service.xxml -->
  |       <depends 
optional-attribute-name="InvokerName">jboss:service=invoker,type=jrmp</depends>
  |       <!-- The target MBean -->
  |       <depends 
optional-attribute-name="TargetName">jms.ActiveMQ:service=ActiveMQNetwork</depends>
  |       <!-- Where to bind the proxy factory -->
  |       <attribute name="JndiName">ActiveMQNetworkInvokeTarget</attribute>
  |       <!-- Invoke target method instead of invoke(Invocation mi) -->
  |       <attribute name="InvokeTargetMethod">true</attribute>
  |       <!-- Comma-separated list of exported interfaces -->
  |       <attribute 
name="ExportedInterfaces">com.bs.activemq.mbean.service.ActiveMQNetworkMBean</attribute>
  |       <!-- client-side interceptors -->
  |       <attribute name="ClientInterceptors">
  |           <interceptors>
  |              
<interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor>
  |              <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
  |              
<interceptor>org.jboss.jmx.connector.invoker.client.InvokerAdaptorClientInterceptor</interceptor>
  |              
<interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
  |           </interceptors>
  |       </attribute>
  |    </mbean>
  | 
  |     





Then I did a client that work as follows:




  | 
  |  public static void main(String[] args) {
  |         try {
  |             Hashtable env = new Hashtable();
  |             env.put("java.naming.factory.initial", 
"org.jnp.interfaces.NamingContextFactory");
  |             env.put("java.naming.provider.url", "jnp://172.31.112.9:1099");
  |             //env.put("java.naming.factory.url.pkgs", 
"org.jboss.naming:org.jnp.interfaces");
  |             env.put("java.naming.factory.url.pkgs", "org.jnp.interfaces");
  | 
  |             InitialContext ic = new InitialContext(env);
  |             ActiveMQNetworkMBean myService = (ActiveMQNetworkMBean) 
ic.lookup("ActiveMQNetworkInvokeTarget");
  |             String res = myService.myTestAction();
  | 
  | 
  |         } catch(Exception e) {
  |             e.printStackTrace();
  |         }
  | 
  |     
  | 




But when I run the client I get the message:


  | 
  | javax.naming.CommunicationException [Root exception is 
java.io.InvalidClassException: org.jboss.invo
  | cation.InvokerInterceptor; unable to create instance]
  |     at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:707)
  |     at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
  |     at javax.naming.InitialContext.lookup(InitialContext.java:347)
  |     at com.bs.activemq.mbean.service.Test.main(Test.java:23)
  |     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:324)
  |     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
  | Caused by: java.io.InvalidClassException: 
org.jboss.invocation.InvokerInterceptor; unable to create 
  | instance
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1633)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
  |     at java.io.ObjectInputStream.skipCustomData(ObjectInputStream.java:1810)
  |     at 
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1698)
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1644)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
  |     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
  |     at org.jboss.proxy.Interceptor.readExternal(Interceptor.java:66)
  |     at 
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1686)
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1644)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
  |     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
  |     at org.jboss.proxy.Interceptor.readExternal(Interceptor.java:66)
  |     at 
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1686)
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1644)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
  |     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
  |     at 
org.jboss.proxy.ClientContainer.readExternal(ClientContainer.java:142)
  |     at 
java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:1686)
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1644)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
  |     at 
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
  |     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
  |     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
  |     at java.rmi.MarshalledObject.get(MarshalledObject.java:135)
  |     at 
org.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:57)
  |     at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:637)
  |     ... 8 more
  |     
  | 



I really don't know what am I doing wrong.

Could please somebody help me ?


Thanks in advance

J 


View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3942786#3942786

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3942786


-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to