Author: rmannibucau
Date: Mon Aug 13 00:00:19 2012
New Revision: 1372217

URL: http://svn.apache.org/viewvc?rev=1372217&view=rev
Log:
OPENEJB-1886 adding statsinterceptor before starting the timer in a better way

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java?rev=1372217&r1=1372216&r2=1372217&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
 Mon Aug 13 00:00:19 2012
@@ -31,6 +31,7 @@ import org.apache.openejb.core.timer.Ejb
 import org.apache.openejb.core.transaction.TransactionPolicy;
 import org.apache.openejb.core.webservices.AddressingSupport;
 import org.apache.openejb.core.webservices.NoAddressingSupport;
+import org.apache.openejb.monitoring.StatsInterceptor;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.Duration;
 import org.apache.openejb.util.LogCategory;
@@ -111,6 +112,12 @@ public class SingletonContainer implemen
             beanContext.setContainer(this);
         }
 
+        // add it before starting the timer (@PostCostruct)
+        if (StatsInterceptor.isStatsActivated()) {
+            StatsInterceptor stats = new 
StatsInterceptor(beanContext.getBeanClass());
+            beanContext.addFirstSystemInterceptor(stats);
+        }
+
         EjbTimerService timerService = beanContext.getEjbTimerService();
         if (timerService != null) {
             timerService.start();

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java?rev=1372217&r1=1372216&r2=1372217&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonInstanceManager.java
 Mon Aug 13 00:00:19 2012
@@ -24,6 +24,7 @@ import org.apache.openejb.core.InstanceC
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.core.interceptor.InterceptorData;
+import org.apache.openejb.core.interceptor.InterceptorInstance;
 import org.apache.openejb.core.interceptor.InterceptorStack;
 import org.apache.openejb.core.timer.TimerServiceWrapper;
 import org.apache.openejb.core.transaction.EjbTransactionUtil;
@@ -291,23 +292,30 @@ public class SingletonInstanceManager {
 
         // Create stats interceptor
         if (StatsInterceptor.isStatsActivated()) {
-            StatsInterceptor stats = new 
StatsInterceptor(beanContext.getBeanClass());
-            beanContext.addFirstSystemInterceptor(stats);
 
-            MBeanServer server = LocalMBeanServer.get();
+            StatsInterceptor stats = null;
+            for (InterceptorInstance interceptor : 
beanContext.getUserAndSystemInterceptors()) {
+                if (interceptor.getInterceptor() instanceof StatsInterceptor) {
+                    stats = (StatsInterceptor) interceptor.getInterceptor();
+                }
+            }
+            if (stats == null) { // normally useless
+                stats = new StatsInterceptor(beanContext.getBeanClass());
+                beanContext.addFirstSystemInterceptor(stats);
+            }
 
             ObjectNameBuilder jmxName = new 
ObjectNameBuilder("openejb.management");
             jmxName.set("J2EEServer", "openejb");
             jmxName.set("J2EEApplication", null);
             jmxName.set("EJBModule", beanContext.getModuleID());
             jmxName.set("SingletonSessionBean", beanContext.getEjbName());
-            jmxName.set("j2eeType", "");
             jmxName.set("name", beanContext.getEjbName());
+            jmxName.set("j2eeType", "Invocations");
 
             // register the invocation stats interceptor
             try {
-                ObjectName objectName = jmxName.set("j2eeType", 
"Invocations").build();
-                server.registerMBean(new ManagedMBean(stats), objectName);
+                ObjectName objectName = jmxName.build();
+                LocalMBeanServer.get().registerMBean(new ManagedMBean(stats), 
objectName);
                 data.add(objectName);
             } catch (Exception e) {
                 logger.error("Unable to register MBean ", e);

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java?rev=1372217&r1=1372216&r2=1372217&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
 Mon Aug 13 00:00:19 2012
@@ -32,6 +32,7 @@ import javax.ejb.EJBLocalHome;
 import javax.ejb.EJBLocalObject;
 import javax.ejb.EJBObject;
 import javax.interceptor.AroundInvoke;
+import javax.management.ObjectName;
 
 import org.apache.openejb.ApplicationException;
 import org.apache.openejb.BeanContext;
@@ -49,6 +50,9 @@ import org.apache.openejb.core.timer.Ejb
 import org.apache.openejb.core.transaction.TransactionPolicy;
 import org.apache.openejb.core.webservices.AddressingSupport;
 import org.apache.openejb.core.webservices.NoAddressingSupport;
+import org.apache.openejb.monitoring.LocalMBeanServer;
+import org.apache.openejb.monitoring.ManagedMBean;
+import org.apache.openejb.monitoring.StatsInterceptor;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.Duration;
 import org.apache.openejb.util.Pool;
@@ -101,6 +105,12 @@ public class StatelessContainer implemen
             beanContext.setContainer(this);
         }
 
+        // add it before starting the timer (@PostCostruct)
+        if (StatsInterceptor.isStatsActivated()) {
+            StatsInterceptor stats = new 
StatsInterceptor(beanContext.getBeanClass());
+            beanContext.addFirstSystemInterceptor(stats);
+        }
+
         // do it after the instance deployment
         EjbTimerService timerService = beanContext.getEjbTimerService();
         if (timerService != null) {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?rev=1372217&r1=1372216&r2=1372217&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
 Mon Aug 13 00:00:19 2012
@@ -47,7 +47,9 @@ import org.apache.openejb.SystemExceptio
 import org.apache.openejb.core.InstanceContext;
 import org.apache.openejb.core.Operation;
 import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.interceptor.Interceptor;
 import org.apache.openejb.core.interceptor.InterceptorData;
+import org.apache.openejb.core.interceptor.InterceptorInstance;
 import org.apache.openejb.core.interceptor.InterceptorStack;
 import org.apache.openejb.core.timer.TimerServiceWrapper;
 import org.apache.openejb.loader.Options;
@@ -328,15 +330,23 @@ public class StatelessInstanceManager {
         jmxName.set("J2EEApplication", null);
         jmxName.set("EJBModule", beanContext.getModuleID());
         jmxName.set("StatelessSessionBean", beanContext.getEjbName());
-        jmxName.set("j2eeType", "");
         jmxName.set("name", beanContext.getEjbName());
 
         final MBeanServer server = LocalMBeanServer.get();
 
         // Create stats interceptor
         if (StatsInterceptor.isStatsActivated()) {
-            StatsInterceptor stats = new 
StatsInterceptor(beanContext.getBeanClass());
-            beanContext.addFirstSystemInterceptor(stats);
+
+            StatsInterceptor stats = null;
+            for (InterceptorInstance interceptor : 
beanContext.getUserAndSystemInterceptors()) {
+                if (interceptor.getInterceptor() instanceof StatsInterceptor) {
+                    stats = (StatsInterceptor) interceptor.getInterceptor();
+                }
+            }
+            if (stats == null) { // normally useless
+                stats = new StatsInterceptor(beanContext.getBeanClass());
+                beanContext.addFirstSystemInterceptor(stats);
+            }
 
             // register the invocation stats interceptor
             try {


Reply via email to