I have implemented a simple MBean and tested it using the JMX Console but I get 
an error when I try to execute any method programatically from my ejb session.

The error is 
[STDOUT] java.lang.reflect.UndeclaredThrowableException
  | 18:39:36,931 INFO  [STDOUT]     at $Proxy57.getDbDriver(Unknown Source)
  | 18:39:36,932 INFO  [STDOUT]     at 
com.relevant.e3.ejb.item.ItemBO.getDbDriverMBean(ItemBO.java:41)
  | 18:39:36,932 INFO  [STDOUT]     at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 18:39:36,932 INFO  [STDOUT]     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 18:39:36,932 INFO  [STDOUT]     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  | 18:39:36,932 INFO  [STDOUT]     at 
java.lang.reflect.Method.invoke(Method.java:585)
  | 18:39:36,932 INFO  [STDOUT]     at 
com.relevant.e3.ejb.businesscontroller.BusinessController.execute(BusinessController.java:293)
  | 18:39:36,932 INFO  [STDOUT]     at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 18:39:36,933 INFO  [STDOUT]     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 18:39:36,933 INFO  [STDOUT]     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  | 18:39:36,933 INFO  [STDOUT]     at 
java.lang.reflect.Method.invoke(Method.java:585)
  | 18:39:36,933 INFO  [STDOUT]     at 
org.jboss.invocation.Invocation.performCall(Invocation.java:345)
  | 18:39:36,933 INFO  [STDOUT]     at 
org.jboss.ejb.StatefulSessionContainer$ContainerInterceptor.invoke(StatefulSessionContainer.java:584)
  | 18:39:36,933 INFO  [STDOUT]     at 
org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:123)
  | 18:39:36,933 INFO  [STDOUT]     at 
org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
  | 18:39:36,933 INFO  [STDOUT]     at 
org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSessionInstanceInterceptor.java:294)
  | 18:39:36,933 INFO  [STDOUT]     at 
org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
  | 18:39:36,934 INFO  [STDOUT]     at 
org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
  | 18:39:36,934 INFO  [STDOUT]     at 
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:313)
  | 18:39:36,934 INFO  [STDOUT]     at 
org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:146)
  | 18:39:36,934 INFO  [STDOUT]     at 
org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
  | 18:39:36,934 INFO  [STDOUT]     at 
org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
  | 18:39:36,934 INFO  [STDOUT]     at 
org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
  | 18:39:36,934 INFO  [STDOUT]     at 
org.jboss.ejb.Container.invoke(Container.java:870)
  | 18:39:36,934 INFO  [STDOUT]     at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 18:39:36,934 INFO  [STDOUT]     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 18:39:36,935 INFO  [STDOUT]     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  | 18:39:36,935 INFO  [STDOUT]     at 
java.lang.reflect.Method.invoke(Method.java:585)
  | 18:39:36,935 INFO  [STDOUT]     at 
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144)
  | 18:39:36,935 INFO  [STDOUT]     at 
org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
  | 18:39:36,935 INFO  [STDOUT]     at 
org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
  | 18:39:36,935 INFO  [STDOUT]     at 
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249)
  | 18:39:36,935 INFO  [STDOUT]     at 
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
  | 18:39:36,935 INFO  [STDOUT]     at 
org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:805)
  | 18:39:36,935 INFO  [STDOUT]     at 
org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:406)
  | 18:39:36,935 INFO  [STDOUT]     at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 18:39:36,936 INFO  [STDOUT]     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 18:39:36,936 INFO  [STDOUT]     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  | 18:39:36,936 INFO  [STDOUT]     at 
java.lang.reflect.Method.invoke(Method.java:585)
  | 18:39:36,936 INFO  [STDOUT]     at 
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
  | 18:39:36,936 INFO  [STDOUT]     at 
sun.rmi.transport.Transport$1.run(Transport.java:153)
  | 18:39:36,936 INFO  [STDOUT]     at 
java.security.AccessController.doPrivileged(Native Method)
  | 18:39:36,936 INFO  [STDOUT]     at 
sun.rmi.transport.Transport.serviceCall(Transport.java:149)
  | 18:39:36,936 INFO  [STDOUT]     at 
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
  | 18:39:36,936 INFO  [STDOUT]     at 
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
  | 18:39:36,937 INFO  [STDOUT]     at java.lang.Thread.run(Thread.java:595)
  | 18:39:36,939 INFO  [STDOUT] Caused by: 
javax.management.InstanceNotFoundException: com.relevant:name=E3Settings is not 
registered.
  | 18:39:36,939 INFO  [STDOUT]     at 
org.jboss.mx.server.registry.BasicMBeanRegistry.get(BasicMBeanRegistry.java:509)
  | 18:39:36,940 INFO  [STDOUT]     at 
org.jboss.mx.server.MBeanServerImpl.getAttribute(MBeanServerImpl.java:533)
  | 18:39:36,940 INFO  [STDOUT]     at 
javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:175)
  | 18:39:36,940 INFO  [STDOUT]     ... 46 more
  | 

The code to retrieve the MBean reference is

protected final E3SettingsMBean getServerSettings() {
  |             
  |             E3SettingsMBean mbean = null;
  |             
  |             //target MBean
  |             ObjectName objectName = null; 
  |             try {
  |                     objectName = new 
ObjectName("com.relevant:name=E3Settings");
  |             } catch (MalformedObjectNameException e) {
  |                     return null;
  |             }
  | 
  |             if (objectName != null) {
  |                     //find the local MBeanServer
  | //                  MBeanServer server = MBeanServerLocator.locateJBoss();
  |                     MBeanServer server = 
ManagementFactory.getPlatformMBeanServer();
  | 
  |                     // Get a type-safe dynamic proxy
  |                     mbean =
  |                             
(E3SettingsMBean)MBeanServerInvocationHandler.newProxyInstance(
  |                                             server,
  |                                             objectName,
  |                                             E3SettingsMBean.class,
  |                                             false);
  |                     // Use the proxy
  |                     String dbURL = mbean.getDbURL();
  |                     mbean.sayHello();       
  |             }
  |             
  |             return mbean;
  |     }

The MBean interface is
  | package com.relevant.e3.ejb.resource; 
  | 
  | import org.jboss.system.ServiceMBean;
  | 
  | public interface E3SettingsMBean extends ServiceMBean { 
  |  
  |     public void sayHello();
  |     public int add(int x, int y);
  |     
  |     public String getDbDriver(); 
  |     public void setDbDriver(String driver);
  |     public String getDbURL();
  |     public void setDbURL(String url);
  |     public String getDbUser();
  |     public void setDbUser(String user);
  |     public String getDbPassword();
  |     public void setDbPassword(String password);
  | }
The implementation of the interface is..
package com.relevant.e3.ejb.resource; 
  | import javax.management.*; 
  | 
  | import org.apache.log4j.Logger;
  | import org.jboss.system.ServiceMBeanSupport;
  | 
  | public class E3Settings extends ServiceMBeanSupport
  | //public class E3Settings extends NotificationBroadcasterSupport
  |             implements E3SettingsMBean {
  | 
  |     protected static Logger logger;
  |     
  |     private static final String DEFAULT_DBDRIVER = 
  |             "net.sourceforge.jtds.jdbc.Driver";
  |     private String dbDriver = DEFAULT_DBDRIVER;
  |     private static final String DEFAULT_DBURL =
  |             "jdbc:jtds:sqlserver://sql2003:1433/patbiz";
  |     private String dbURL = DEFAULT_DBURL;
  |     private static final String DEFAULT_DBUSER = "java";
  |     private String dbUser = DEFAULT_DBUSER;
  |     private static final String DEFAULT_DBPASSWORD = "java";
  |     private String dbPassword = DEFAULT_DBPASSWORD;
  |     
  |     private String name="E3Settings";
  |     
  |     //Used for notifications
  |     private long sequenceNumber = 1;
  | 
  |     public E3Settings() {
  |             if (logger == null) {
  |                     logger = Logger.getLogger(E3Settings.class);    
  |             }       
  |     }
  |     
  |     /**
  |      * Testing java docs
  |      * @jmx Testing
  |      * @jmx.desc Testing jmx.desc
  |      */
  |     public void sayHello() {
  |             System.out.println("hello, world");
  |     }
  | 
  |     public int add(int x, int y) { 
  |             return x + y; 
  |     }
  |     
  |     public String getDbDriver() {
  |             return dbDriver;
  |     }
  |     
  |     /**
  |      * Sets the database connection string for the MBean.
  |      * @jmx.desc
  |      * 
  |      * @param Value to set the database connection string to. 
  |      */
  |     public synchronized void setDbDriver(String driver) {
  |             String oldStr = dbDriver;
  |             dbDriver = driver;
  | 
  | logger.debug("dbDriver now " + dbDriver); 
  | 
  |             Notification n = 
  |                     new AttributeChangeNotification(this, 
  |                                     sequenceNumber++, 
  |                                     System.currentTimeMillis(), 
  |                                     "dbDriver changed", 
  |                                     "DbDriver", 
  |                                     "int", 
  |                                     oldStr, 
  |                                     dbDriver); 
  | 
  |             sendNotification(n);
  |     }
  |     
  |     public String getDbURL() {
  |             return dbURL;
  |     }
  |     
  |     public synchronized void setDbURL(String url) {
  |             String oldStr = dbURL;
  |             dbURL = url;
  | 
  | logger.debug("dbURL now " + dbURL); 
  | 
  |             Notification n = 
  |                     new AttributeChangeNotification(this, 
  |                                     sequenceNumber++, 
  |                                     System.currentTimeMillis(), 
  |                                     "dbURL changed", 
  |                                     "DbURL", 
  |                                     "int", 
  |                                     oldStr, 
  |                                     dbURL); 
  | 
  |             sendNotification(n);
  |     }
  |     
  |     public String getDbUser() {
  |             return dbUser;
  |     }
  |     
  |     public synchronized void setDbUser(String user) {
  |             String oldStr = dbUser;
  |             dbUser = user;
  | 
  | logger.debug("dbUser now " + dbUser); 
  | 
  |             Notification n = 
  |                     new AttributeChangeNotification(this, 
  |                                     sequenceNumber++, 
  |                                     System.currentTimeMillis(), 
  |                                     "dbUser changed", 
  |                                     "DbUser", 
  |                                     "int", 
  |                                     oldStr, 
  |                                     dbUser); 
  | 
  |             sendNotification(n);
  |     }
  |     
  |     public String getDbPassword() {
  |             return dbPassword;
  |     }
  |     
  |     public synchronized void setDbPassword(String password) {
  |             String oldStr = dbPassword;
  |             dbPassword = password;
  | 
  | logger.debug("dbPassword now " + dbPassword); 
  | 
  |             Notification n = 
  |                     new AttributeChangeNotification(this, 
  |                                     sequenceNumber++, 
  |                                     System.currentTimeMillis(), 
  |                                     "dbPassword changed", 
  |                                     "DbPassword", 
  |                                     "int", 
  |                                     oldStr, 
  |                                     dbPassword); 
  | 
  |             sendNotification(n);
  |     }
  | 
  |     //The lifecycle
  |     protected void startService() throws Exception {
  |             log.info("Starting with message= E3Settings");
  |     }
  |     protected void stopService() throws Exception {
  |             log.info("Stopping with message= E3Settings");
  |     }
  | }

The jboss-service.xml file is..
<?xml version="1.0" encoding="UTF-8"?>
  | 
  | <server>
  |   <mbean code="com.relevant.e3.ejb.resource.E3Settings"
  |             name="com.relevant:service=E3Settings">
  |     <!-- A plain attribute -->
  |     <attribute name="DbDriver">net.sourceforge.jtds.jdbc.Driver</attribute>
  |     <attribute 
name="DbURL">jdbc:jtds:sqlserver://sql2003:1433/patbiz</attribute>
  |     <attribute name="DbUser">java</attribute>
  |     <attribute name="DbPassword">java</attribute>
  |    </mbean>
  | </server>
Again sorry for the long post but I'm sure someone would have asked for one of 
the above files if I had left them out.

Thank you,
-David

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

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


-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to