Author: rmannibucau
Date: Sat Oct  6 00:42:00 2012
New Revision: 1394874

URL: http://svn.apache.org/viewvc?rev=1394874&view=rev
Log:
TOMEE-445 OPENEJB-1910 handling asked interface for CdiEjbBeans + unregistring 
MBeans when not already done + minor hack on OSGi to avoid to get 
classcastexception registering on IvmProxy

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.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/stateful/StatefulContainer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/remote/RemoteResourceMonitor.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/JMXBasicDataSource.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/MultipleClassLoader.java
    
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java
    openejb/trunk/openejb/osgi/openejb-core-osgi/pom.xml
    
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java
    
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java
    
openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReloadableEntityManagerFactory.java
 Sat Oct  6 00:42:00 2012
@@ -187,7 +187,11 @@ public class ReloadableEntityManagerFact
     public void register() throws OpenEJBException {
         final MBeanServer server = LocalMBeanServer.get();
         try {
-            server.registerMBean(mBeanify(), generateObjectName());
+            generateObjectName();
+            if (server.isRegistered(objectName)) {
+                server.unregisterMBean(objectName);
+            }
+            server.registerMBean(mBeanify(), objectName);
         } catch (Exception e) {
             throw new OpenEJBException("can't register the mbean for the 
entity manager factory " + getPUname(), e);
         } catch (NoClassDefFoundError ncdfe) {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
 Sat Oct  6 00:42:00 2012
@@ -39,6 +39,7 @@ import java.util.Set;
 
 public class CdiEjbBean<T> extends BaseEjbBean<T> {
     private final BeanContext beanContext;
+    private final ThreadLocal<Class<?>> askedType = new 
ThreadLocal<Class<?>>();
 
     public CdiEjbBean(BeanContext beanContext, WebBeansContext 
webBeansContext) {
         this(beanContext, webBeansContext, beanContext.getManagedClass());
@@ -84,7 +85,12 @@ public class CdiEjbBean<T> extends BaseE
     @Override
     @SuppressWarnings("unchecked")
     protected T getInstance(CreationalContext<T> creationalContext) {
-        return (T) webBeansContext.getBeanManagerImpl().getReference(new 
RealEjbBean(this), getBeanClass(), creationalContext);
+        Type asked = askedType.get();
+        if (asked == null) {
+            askedType.remove();
+            asked = getBeanClass();
+        }
+        return (T) webBeansContext.getBeanManagerImpl().getReference(new 
RealEjbBean(this), asked, creationalContext);
     }
 
     @Override
@@ -229,6 +235,14 @@ public class CdiEjbBean<T> extends BaseE
         return toReturn;
     }
 
+    public void setAskedType(final Class<?> askedType) {
+        this.askedType.set(askedType);
+    }
+
+    public void clearAskedType() {
+        askedType.remove();
+    }
+
     private static class RealEjbBean<T> extends AbstractOwbBean<T> {
         private final CdiEjbBean<T> delegate;
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
 Sat Oct  6 00:42:00 2012
@@ -147,7 +147,17 @@ public class CdiPlugin extends AbstractO
         final CreationalContext<Object> cc = (CreationalContext<Object>) 
creationalContext;
         final Contextual<Object> component = (Contextual<Object>) bean;
 
-        return context.get(component, cc);
+        final boolean openejbBean = component instanceof CdiEjbBean;
+        if (openejbBean) {
+            ((CdiEjbBean) component).setAskedType(interfce);
+        }
+        try {
+            return context.get(component, cc);
+        } finally {
+            if (openejbBean) {
+                ((CdiEjbBean) component).clearAskedType();
+            }
+        }
 
     }
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
 Sat Oct  6 00:42:00 2012
@@ -95,7 +95,7 @@ public class TempClassLoader extends URL
 //        ( && !name.startsWith("javax.faces.") )||
         String resourceName = name.replace('.', '/') + ".class";
         InputStream in = getResourceAsStream(resourceName);
-        if (!(in instanceof BufferedInputStream)) {
+        if (in != null && !(in instanceof BufferedInputStream)) {
             in = new BufferedInputStream(in);
         }
         if (in == null) {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
 Sat Oct  6 00:42:00 2012
@@ -286,6 +286,9 @@ public class ManagedContainer implements
             // register the invocation stats interceptor
             try {
                 ObjectName objectName = jmxName.set("j2eeType", 
"Invocations").build();
+                if (server.isRegistered(objectName)) {
+                    server.unregisterMBean(objectName);
+                }
                 server.registerMBean(new ManagedMBean(stats), objectName);
                 data.jmxNames.add(objectName);
             } catch (Exception e) {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
 Sat Oct  6 00:42:00 2012
@@ -169,6 +169,9 @@ public class MdbContainer implements Rpc
             // register the invocation stats interceptor
             try {
                 ObjectName objectName = jmxName.set("j2eeType", 
"Invocations").build();
+                if (server.isRegistered(objectName)) {
+                    server.unregisterMBean(objectName);
+                }
                 server.registerMBean(new ManagedMBean(stats), objectName);
                 endpointFactory.jmxNames.add(objectName);
             } catch (Exception e) {

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=1394874&r1=1394873&r2=1394874&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
 Sat Oct  6 00:42:00 2012
@@ -313,9 +313,13 @@ public class SingletonInstanceManager {
             jmxName.set("j2eeType", "Invocations");
 
             // register the invocation stats interceptor
+            final MBeanServer server = LocalMBeanServer.get();
             try {
                 ObjectName objectName = jmxName.build();
-                LocalMBeanServer.get().registerMBean(new ManagedMBean(stats), 
objectName);
+                if (server.isRegistered(objectName)) {
+                    server.unregisterMBean(objectName);
+                }
+                server.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/stateful/StatefulContainer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
 Sat Oct  6 00:42:00 2012
@@ -305,6 +305,9 @@ public class StatefulContainer implement
             // register the invocation stats interceptor
             try {
                 ObjectName objectName = jmxName.set("j2eeType", 
"Invocations").build();
+                if (server.isRegistered(objectName)) {
+                    server.unregisterMBean(objectName);
+                }
                 server.registerMBean(new ManagedMBean(stats), objectName);
                 data.jmxNames.add(objectName);
             } catch (Exception e) {

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=1394874&r1=1394873&r2=1394874&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
 Sat Oct  6 00:42:00 2012
@@ -351,6 +351,9 @@ public class StatelessInstanceManager {
             // register the invocation stats interceptor
             try {
                 ObjectName objectName = jmxName.set("j2eeType", 
"Invocations").build();
+                if (server.isRegistered(objectName)) {
+                    server.unregisterMBean(objectName);
+                }
                 server.registerMBean(new ManagedMBean(stats), objectName);
                 data.add(objectName);
             } catch (Exception e) {
@@ -361,6 +364,9 @@ public class StatelessInstanceManager {
         // register the pool
         try {
             ObjectName objectName = jmxName.set("j2eeType", "Pool").build();
+            if (server.isRegistered(objectName)) {
+                server.unregisterMBean(objectName);
+            }
             server.registerMBean(new ManagedMBean(data.pool), objectName);
             data.add(objectName);
         } catch (Exception e) {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/remote/RemoteResourceMonitor.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/remote/RemoteResourceMonitor.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/remote/RemoteResourceMonitor.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/remote/RemoteResourceMonitor.java
 Sat Oct  6 00:42:00 2012
@@ -31,6 +31,7 @@ import javax.management.MBeanInfo;
 import javax.management.MBeanNotificationInfo;
 import javax.management.MBeanOperationInfo;
 import javax.management.MBeanParameterInfo;
+import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.management.ReflectionException;
 import java.io.IOException;
@@ -75,8 +76,12 @@ public class RemoteResourceMonitor imple
         jmxName.set("ObjectType", "Related Hosts");
         objectName = jmxName.build();
 
+        final MBeanServer server = LocalMBeanServer.get();
         try {
-            LocalMBeanServer.get().registerMBean(this, objectName);
+            if (server.isRegistered(objectName)) {
+                server.unregisterMBean(objectName);
+            }
+            server.registerMBean(this, objectName);
         } catch (Exception e) {
             throw new OpenEJBRuntimeException(e);
         }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/JMXBasicDataSource.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/JMXBasicDataSource.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/JMXBasicDataSource.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/JMXBasicDataSource.java
 Sat Oct  6 00:42:00 2012
@@ -20,6 +20,7 @@ import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
 import javax.management.Description;
+import javax.management.MBeanServer;
 import javax.management.ManagedAttribute;
 import javax.management.ManagedOperation;
 import javax.management.ObjectName;
@@ -39,8 +40,12 @@ public class JMXBasicDataSource {
         this.ds = ds;
 
         objectName = ObjectNameBuilder.uniqueName("datasources", name, ds);
+        final MBeanServer server = LocalMBeanServer.get();
         try {
-            LocalMBeanServer.get().registerMBean(new 
DynamicMBeanWrapper(this), objectName);
+            if (server.isRegistered(objectName)) {
+                server.unregisterMBean(objectName);
+            }
+            server.registerMBean(new DynamicMBeanWrapper(this), objectName);
         } catch (Exception e) {
             e.printStackTrace(); // TODO
         }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/MultipleClassLoader.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/MultipleClassLoader.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/MultipleClassLoader.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/MultipleClassLoader.java
 Sat Oct  6 00:42:00 2012
@@ -22,7 +22,7 @@ package org.apache.openejb.util.classloa
  * without patching it.
  *
  */
-public class MultipleClassLoader extends ClassLoader {
+public class MultipleClassLoader extends ClassLoader implements 
ClassLoaderComparator {
     private final ClassLoader second;
 
     public MultipleClassLoader(ClassLoader first, ClassLoader second) {
@@ -64,4 +64,9 @@ public class MultipleClassLoader extends
     public int hashCode() {
         return getParent().hashCode();
     }
+
+    @Override
+    public boolean isSame(final ClassLoader cl) {
+        return equals(cl);
+    }
 }

Modified: 
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java
 Sat Oct  6 00:42:00 2012
@@ -247,13 +247,18 @@ public class SystemInstance {
         try {
             conf = system.getBase().getDirectory("conf");
         } catch (IOException e) {
+            // no-op
+        }
+
+        if (conf == null || !conf.exists()) {
             try {
                 conf = system.getBase().getDirectory("etc");
-            } catch (IOException ie) {
+            } catch (IOException e) {
                 // no-op
             }
         }
-        if (conf == null) {
+
+        if (conf == null || !conf.exists()) {
             return new File(system.getBase().getDirectory(), "conf");
         }
         if (subPath == null) {

Modified: openejb/trunk/openejb/osgi/openejb-core-osgi/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-core-osgi/pom.xml?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- openejb/trunk/openejb/osgi/openejb-core-osgi/pom.xml (original)
+++ openejb/trunk/openejb/osgi/openejb-core-osgi/pom.xml Sat Oct  6 00:42:00 
2012
@@ -333,6 +333,9 @@
       org.quartz.impl;resolution:=optional,
       org.quartz.spi;resolution:=optional,
       org.slf4j;resolution:=optional;version="[1.6,4)",
+      org.slf4j.helpers;resolution:=optional;version="[1.6,4)",
+      org.slf4j.spi;resolution:=optional;version="[1.6,4)",
+      org.slf4j.impl;resolution:=optional;version="[1.6,4)",
       org.w3c.dom,
       org.w3c.dom.ls,
       org.xml.sax,

Modified: 
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java
 (original)
+++ 
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java
 Sat Oct  6 00:42:00 2012
@@ -61,6 +61,7 @@ public class Activator implements Bundle
         env.setProperty("openejb.loader", "context");
         env.setProperty("openejb.deployments.classpath", "false");
         env.setProperty("openejb.nobanner", "true");
+        env.setProperty("openejb.classloader.forced-skip", "org.slf4j"); // 
otherwise we'll get a ClassNotFound on org.slf4j.impl.StaticLoggerBinder
         env.setProperty("openejb.modulename.useHash", "true");
         env.setProperty(CdiScanner.OPENEJB_CDI_FILTER_CLASSLOADER, "false"); 
// TODO: improve it reactivating it
 

Modified: 
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java
 (original)
+++ 
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java
 Sat Oct  6 00:42:00 2012
@@ -27,6 +27,7 @@ import org.apache.openejb.config.AppModu
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.DeploymentLoader;
 import org.apache.openejb.config.UnknownModuleTypeException;
+import org.apache.openejb.core.ivm.IntraVmProxy;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.proxy.ProxyEJB;
 import org.osgi.framework.Bundle;
@@ -59,7 +60,6 @@ public class Deployer implements BundleL
 
     private final Map<Bundle, List<ServiceRegistration>> registrations = new 
ConcurrentHashMap<Bundle, List<ServiceRegistration>>();
     private final Map<Bundle, String> paths = new ConcurrentHashMap<Bundle, 
String>();
-    private final Map<Bundle, BundleContext> contexts = new 
ConcurrentHashMap<Bundle, BundleContext>();
 
     private final Activator openejbActivator;
 
@@ -79,15 +79,11 @@ public class Deployer implements BundleL
             case BundleEvent.STARTED:
                 final BundleContext context = 
event.getBundle().getBundleContext();
                 if (context != null) {
-                    contexts.put(event.getBundle(), context);
                     deploy(event.getBundle());
                 }
                 break;
             case BundleEvent.STOPPED:
             case BundleEvent.UNINSTALLED:
-                if (contexts.containsKey(event.getBundle())) {
-                    contexts.remove(event.getBundle());
-                }
                 undeploy(event.getBundle());
                 break;
             case BundleEvent.UPDATED:
@@ -111,14 +107,6 @@ public class Deployer implements BundleL
         try {
             try {
                 try {
-                    BundleContext context = bundle.getBundleContext();
-                    if (context == null && contexts.containsKey(bundle)) {
-                        context = contexts.get(bundle);
-                    } else if (context == null) {
-                        LOGGER.warn("can't get bundle context of bundle {0}", 
bundle.getBundleId());
-                        return;
-                    }
-
                     // equinox? found in aries
                     File bundleDump = 
bundle.getBundleContext().getDataFile(bundle.getSymbolicName() + "/" + 
bundle.getVersion() + "/");
                     // TODO: what should happen if there is multiple versions?
@@ -258,8 +246,13 @@ public class Deployer implements BundleL
         }
     }
 
-    private void registerService(final BeanContext beanContext, final 
BundleContext context, final List<Class> interfaces) {
-        if (!interfaces.isEmpty()) {
+    private void registerService(final BeanContext beanContext, final 
BundleContext context, final List<Class> rawItf) {
+        if (!rawItf.isEmpty()) {
+            final List<Class> interfaces = new ArrayList<Class>(rawItf);
+            if (interfaces.contains(IntraVmProxy.class)) {
+                interfaces.remove(IntraVmProxy.class);
+            }
+
             final Class<?>[] itfs = interfaces.toArray(new 
Class<?>[interfaces.size()]);
             try {
                 final Object service = ProxyEJB.proxy(beanContext, itfs);

Modified: 
openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java?rev=1394874&r1=1394873&r2=1394874&view=diff
==============================================================================
--- 
openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java
 (original)
+++ 
openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java
 Sat Oct  6 00:42:00 2012
@@ -184,7 +184,11 @@ public abstract class ServiceManager {
 
     public static void register(String serviceName, ServerService service, 
MBeanServer server) {
         try {
-            server.registerMBean(new ManagedMBean(service), 
getObjectName(serviceName));
+            final ObjectName on = getObjectName(serviceName);
+            if (server.isRegistered(on)) {
+                server.unregisterMBean(on);
+            }
+            server.registerMBean(new ManagedMBean(service), on);
         } catch (Exception e) {
             logger.error("Unable to register MBean ", e);
         }


Reply via email to