You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/02/18 00:28:55 UTC
svn commit: r1447101 -
/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
Author: rmannibucau
Date: Sun Feb 17 23:28:55 2013
New Revision: 1447101
URL: http://svn.apache.org/r1447101
Log:
correct handling o flifecycle for cdi mbeans
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1447101&r1=1447100&r2=1447101&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Sun Feb 17 23:28:55 2013
@@ -211,6 +211,7 @@ public class Assembler extends Assembler
private SecurityService securityService;
protected OpenEjbConfigurationFactory configFactory;
private final Map<String, AppInfo> deployedApplications = new HashMap<String, AppInfo>();
+ private final Map<ObjectName, CreationalContext> creationalContextForAppMbeans = new HashMap<ObjectName, CreationalContext>();
private final Set<String> moduleIds = new HashSet<String>();
private final Set<ObjectName> containerObjectNames = new HashSet<ObjectName>();
private final RemoteResourceMonitor remoteResourceMonitor = new RemoteResourceMonitor();
@@ -1005,36 +1006,36 @@ public class Assembler extends Assembler
}
@SuppressWarnings("unchecked")
- private static void deployMBean(final WebBeansContext wc, final ClassLoader cl, final String mbeanClass, final Properties appMbeans, final String id) {
- final Class<?> clazz;
- try {
- clazz = cl.loadClass(mbeanClass);
- } catch (ClassNotFoundException e) {
- throw new OpenEJBRuntimeException(e);
- }
- final BeanManager bm = wc.getBeanManagerImpl();
- final Set<Bean<?>> beans = bm.getBeans(clazz);
- final Bean bean = bm.resolve(beans);
- final Object instance;
- if (bean == null) {
- try {
- instance = clazz.newInstance();
- } catch (InstantiationException e) {
- logger.error("the mbean " + mbeanClass + " can't be registered because it can't be instantiated", e);
- return;
- } catch (IllegalAccessException e) {
- logger.error("the mbean " + mbeanClass + " can't be registered because it can't be accessed", e);
- return;
+ private void deployMBean(final WebBeansContext wc, final ClassLoader cl, final String mbeanClass, final Properties appMbeans, final String id) {
+ if (LocalMBeanServer.isJMXActive()) {
+ final Class<?> clazz;
+ try {
+ clazz = cl.loadClass(mbeanClass);
+ } catch (ClassNotFoundException e) {
+ throw new OpenEJBRuntimeException(e);
}
- } else {
- final CreationalContext creationalContext = bm.createCreationalContext(bean);
- instance = bm.getReference(bean, clazz, creationalContext);
- if (Dependent.class.equals(bean.getScope())) {
- creationalContext.release();
+
+ final BeanManager bm = wc.getBeanManagerImpl();
+ final Set<Bean<?>> beans = bm.getBeans(clazz);
+ final Bean bean = bm.resolve(beans);
+ final Object instance;
+ final CreationalContext creationalContext;
+ if (bean == null) {
+ try {
+ instance = clazz.newInstance();
+ } catch (InstantiationException e) {
+ logger.error("the mbean " + mbeanClass + " can't be registered because it can't be instantiated", e);
+ return;
+ } catch (IllegalAccessException e) {
+ logger.error("the mbean " + mbeanClass + " can't be registered because it can't be accessed", e);
+ return;
+ }
+ creationalContext = null;
+ } else {
+ creationalContext = bm.createCreationalContext(bean);
+ instance = bm.getReference(bean, clazz, creationalContext);
}
- }
- if (LocalMBeanServer.isJMXActive()) {
final MBeanServer server = LocalMBeanServer.get();
try {
final ObjectName leaf = new ObjectNameBuilder("openejb.user.mbeans")
@@ -1045,6 +1046,9 @@ public class Assembler extends Assembler
server.registerMBean(new DynamicMBeanWrapper(wc, instance), leaf);
appMbeans.put(mbeanClass, leaf.getCanonicalName());
+ if (Dependent.class.equals(bean.getScope())) {
+ creationalContextForAppMbeans.put(leaf, creationalContext);
+ }
logger.info("Deployed MBean(" + leaf.getCanonicalName() + ")");
} catch (Exception e) {
logger.error("the mbean " + mbeanClass + " can't be registered", e);
@@ -1480,6 +1484,10 @@ public class Assembler extends Assembler
if (server.isRegistered(on)) {
server.unregisterMBean(on);
}
+ final CreationalContext cc = creationalContextForAppMbeans.remove(on);
+ if (cc != null) {
+ cc.release();
+ }
} catch (InstanceNotFoundException e) {
logger.warning("can't unregister " + objectName + " because the mbean was not found", e);
} catch (MBeanRegistrationException e) {