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