My original idea was to emulate a normal Java application with a main method using Weld version for Java SE as CDI container. There, I would bootstrap the CDI container, and voila, the CDI JMX beans should be registered by DeltaSpike infrastructure.
Running unit tests with the @RunWith(CdiTestRunner.class) works (no deployment to JBoss, or Arquillian, just Weld SE in the test class path). As well, the JMX registration works OK when deploying the application to JBoss. I can work with the JMX Console with the JMX beans. So the code for a normal main method bootstraping the CDI Container is not that simple, is it? Pablo On Fri, Sep 26, 2014 at 6:43 PM, Jason Porter <[email protected]> wrote: > Pablo, > > Does your code, looks like it's a test, start and register the MBean? Are > you accessing the MBeam from a running JBoss AS7 instance or something? I > feel like I'm missing some information. > > The cause is that the Request scope isn't active when you're accessing the > MBean. > > On Fri, Sep 26, 2014 at 3:46 AM, Pablo Pita <[email protected]> wrote: > > > Hello all, > > > > I am having a problem trying to use DeltaSpike JMX annotations in a > > standalone main application. > > > > For my tests, I have taken MyMBean from DS sources. When looking into the > > JMX console JConsole, I see that MyMBean is registered but when trying to > > access the counter attribute, this exception comes: > > > > 26.09.2014 11:18:20 > > org.apache.deltaspike.core.impl.jmx.DynamicMBeanWrapper > > getAttribute > > SCHWERWIEGEND: can't get counter value > > java.lang.reflect.InvocationTargetException > > 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:597) > > at > > > > > org.apache.deltaspike.core.impl.jmx.AttributeAccessor.get(AttributeAccessor.java:46) > > at > > > > > org.apache.deltaspike.core.impl.jmx.DynamicMBeanWrapper.getAttribute(DynamicMBeanWrapper.java:249) > > at > > > > > com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:666) > > at > > > > > com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638) > > at > > > > > javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1431) > > at > > > > > javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:74) > > at > > > > > javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1295) > > at > > > > > javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1387) > > at > > > > > javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:630) > > 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:597) > > at > sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303) > > at sun.rmi.transport.Transport$1.run(Transport.java:159) > > at java.security.AccessController.doPrivileged(Native Method) > > at sun.rmi.transport.Transport.serviceCall(Transport.java:155) > > at > > sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) > > at > > > > > sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) > > at > > > > > sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) > > at > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) > > at > > > > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) > > at java.lang.Thread.run(Thread.java:662) > > Caused by: org.jboss.weld.context.ContextNotActiveException: WELD-001303 > No > > active contexts for scope type javax.enterprise.context.RequestScoped > > at > > > org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:608) > > at > > > > > org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:71) > > at > > > > > org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:104) > > at > > > > > org.jboss.weld.proxies.DynamicMockManager$-427240798$Proxy$_$$_WeldClientProxy.getMock(DynamicMockManager$-427240798$Proxy$_$$_WeldClientProxy.java) > > at > > > > > org.apache.deltaspike.testcontrol.impl.mock.MockAwareInjectionTargetWrapper.produce(MockAwareInjectionTargetWrapper.java:59) > > at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:296) > > at > org.jboss.weld.context.AbstractContext.get(AbstractContext.java:103) > > at > > > > > org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:90) > > at > > > > > org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:79) > > at > > > > > com.jmx.ds.MyMBean$Proxy$_$$_WeldClientProxy.getCounter(MyMBean$Proxy$_$$_WeldClientProxy.java) > > ... 27 more > > > > I wonder if there is something I am missing to properly setup this case. > I > > am on Windows running JDK 6 and Weld 1.1.18. > > > > > > The main program I am using is as follows: > > > > public static void main(String[] args) throws Exception { > > > > CdiContainer cdiContainer = CdiContainerLoader.getCdiContainer(); > > cdiContainer.boot(); > > > > // Starting the application-context and request-context allows to > > use > > // @ApplicationScoped and @RequestScoped beans > > ContextControl contextControl = cdiContainer.getContextControl(); > > contextControl.startContext(ApplicationScoped.class); > > contextControl.startContext(RequestScoped.class); > > > > // we can use CDI here > > while (running) { > > int i = 0; > > i = i + 1; > > Thread.sleep(50); > > } > > cdiContainer.shutdown(); > > } > > > > Thanks for any feedback, > > -- > > Pablo Pita Leira > > > > > > -- > Jason Porter > http://en.gravatar.com/lightguardjp > -- Pablo Pita Leira
