You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2010/04/09 20:01:45 UTC
svn commit: r932534 -
/geronimo/server/trunk/plugins/openejb/geronimo-openejb/src/main/java/org/apache/geronimo/openejb/EjbDaemonGBean.java
Author: djencks
Date: Fri Apr 9 18:01:45 2010
New Revision: 932534
URL: http://svn.apache.org/viewvc?rev=932534&view=rev
Log:
GERONIMO-5210 use a better classloader to read in the non-app-specific info, so we can read securtyID objects
Modified:
geronimo/server/trunk/plugins/openejb/geronimo-openejb/src/main/java/org/apache/geronimo/openejb/EjbDaemonGBean.java
Modified: geronimo/server/trunk/plugins/openejb/geronimo-openejb/src/main/java/org/apache/geronimo/openejb/EjbDaemonGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb/src/main/java/org/apache/geronimo/openejb/EjbDaemonGBean.java?rev=932534&r1=932533&r2=932534&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/openejb/geronimo-openejb/src/main/java/org/apache/geronimo/openejb/EjbDaemonGBean.java (original)
+++ geronimo/server/trunk/plugins/openejb/geronimo-openejb/src/main/java/org/apache/geronimo/openejb/EjbDaemonGBean.java Fri Apr 9 18:01:45 2010
@@ -20,9 +20,11 @@ import java.util.Properties;
import org.apache.geronimo.gbean.AbstractName;
import org.apache.geronimo.gbean.GBeanData;
-import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.gbean.annotation.GBean;
+import org.apache.geronimo.gbean.annotation.ParamAttribute;
+import org.apache.geronimo.gbean.annotation.ParamSpecial;
+import org.apache.geronimo.gbean.annotation.SpecialAttributeType;
import org.apache.geronimo.kernel.GBeanNotFoundException;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.kernel.management.State;
@@ -39,33 +41,38 @@ import org.slf4j.LoggerFactory;
/**
* @version $Rev$ $Date$
*/
+@GBean
public class EjbDaemonGBean implements GBeanLifecycle {
-
+
private static final Logger log = LoggerFactory.getLogger(EjbDaemonGBean.class);
-
- private Kernel kernel;
- private AbstractName name;
- private BundleContext bundleContext;
+
+ private final Kernel kernel;
+ private final AbstractName name;
+ private final BundleContext bundleContext;
+ private final ClassLoader classLoader;
private ServiceTracker tracker;
-
- private String host;
- private int port;
- private int threads;
private ServiceManager serviceManager;
- private String multicastHost;
- private String clusterName;
- private int multicastPort;
- private boolean enableMulticast;
-
- public EjbDaemonGBean(Kernel kernel, AbstractName name, final BundleContext bundleContext) {
- System.setProperty("openejb.nobanner","true");
+ public EjbDaemonGBean(@ParamAttribute(name = "host") String host,
+ @ParamAttribute(name = "port") int port,
+ @ParamAttribute(name = "threads") int threads,
+ @ParamAttribute(name = "clusterName") String clusterName,
+ @ParamAttribute(name = "multicastHost") String multicastHost,
+ @ParamAttribute(name = "multicastPort") int multicastPort,
+ @ParamAttribute(name = "enableMulticast") boolean enableMulticast,
+
+ @ParamSpecial(type = SpecialAttributeType.kernel) Kernel kernel,
+ @ParamSpecial(type = SpecialAttributeType.abstractName) AbstractName name,
+ @ParamSpecial(type = SpecialAttributeType.bundleContext) final BundleContext bundleContext,
+ @ParamSpecial(type = SpecialAttributeType.classLoader) ClassLoader classLoader) throws Exception {
+ System.setProperty("openejb.nobanner", "true");
this.kernel = kernel;
this.name = name;
this.bundleContext = bundleContext;
-
+ this.classLoader = classLoader;
+
serviceManager = ServiceManager.getManager();
-
+
tracker = new ServiceTracker(bundleContext, ServerService.class.getName(), new ServiceTrackerCustomizer() {
public Object addingService(ServiceReference reference) {
@@ -77,69 +84,10 @@ public class EjbDaemonGBean implements G
}
public void removedService(ServiceReference reference, Object obj) {
- removeServerService( (AbstractName) obj);
+ removeServerService((AbstractName) obj);
}
-
- });
- }
-
- public String getClusterName() {
- return clusterName;
- }
-
- public void setClusterName(String clusterName) {
- this.clusterName = clusterName;
- }
-
- public String getHost() {
- return host;
- }
-
- public void setHost(String host) {
- this.host = host;
- }
-
- public int getPort() {
- return port;
- }
-
- public void setPort(int port) {
- this.port = port;
- }
-
- public int getThreads() {
- return threads;
- }
-
- public void setThreads(int threads) {
- this.threads = threads;
- }
-
- public boolean isEnableMulticast() {
- return enableMulticast;
- }
-
- public void setEnableMulticast(boolean enableMulticast) {
- this.enableMulticast = enableMulticast;
- }
- public String getMulticastHost() {
- return multicastHost;
- }
-
- public void setMulticastHost(String multicastHost) {
- this.multicastHost = multicastHost;
- }
-
- public int getMulticastPort() {
- return multicastPort;
- }
-
- public void setMulticastPort(int multicastPort) {
- this.multicastPort = multicastPort;
- }
-
- public void doStart() throws Exception {
+ });
Properties properties = SystemInstance.get().getProperties();
properties.setProperty("ejbd.bind", host);
properties.setProperty("ejbd.port", Integer.toString(port));
@@ -153,19 +101,33 @@ public class EjbDaemonGBean implements G
properties.setProperty("multicast.port", Integer.toString(multicastPort));
properties.setProperty("multicast.disabled", Boolean.toString(!enableMulticast));
properties.setProperty("multicast.group", clusterName);
-
- serviceManager.init();
- serviceManager.start(false);
-
+
+ ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(classLoader);
+ try {
+ serviceManager.init();
+ serviceManager.start(false);
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldCl);
+ }
+
tracker.open();
}
+ public void doStart() throws Exception {
+ }
+
public void doStop() throws Exception {
serviceManager.stop();
tracker.close();
}
public void doFail() {
+ try {
+ doStop();
+ } catch (Exception e) {
+ log.info("exception failing", e);
+ }
}
private AbstractName addServerService(ServerService service) {
@@ -175,27 +137,27 @@ public class EjbDaemonGBean implements G
try {
kernel.loadGBean(connectorData, bundleContext);
kernel.startRecursiveGBean(beanName);
-
- ServerServiceGBean connectorGBean = (ServerServiceGBean)kernel.getGBean(beanName);
+
+ ServerServiceGBean connectorGBean = (ServerServiceGBean) kernel.getGBean(beanName);
connectorGBean.setServerService(service);
-
+
return beanName;
} catch (Exception e) {
log.warn("Failed to create gbean for ServerService", e);
return null;
}
}
-
+
private AbstractName getUnqiueName(String gbeanName) {
AbstractName beanName = kernel.getNaming().createRootName(name.getArtifact(), gbeanName, "NetworkConnector");
int i = 1;
- while (kernel.isLoaded(beanName) ) {
+ while (kernel.isLoaded(beanName)) {
beanName = kernel.getNaming().createRootName(name.getArtifact(), gbeanName + "-" + i, "NetworkConnector");
i++;
}
return beanName;
}
-
+
private void removeServerService(AbstractName gbeanName) {
try {
if (kernel.getGBeanState(gbeanName) == State.RUNNING_INDEX) {
@@ -206,30 +168,6 @@ public class EjbDaemonGBean implements G
// Bean is no longer loaded
}
}
-
- public static final GBeanInfo GBEAN_INFO;
- static {
- GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic("OpenEJB Daemon", EjbDaemonGBean.class);
- infoBuilder.addAttribute("host", String.class, true);
- infoBuilder.addAttribute("port", int.class, true);
- infoBuilder.addAttribute("clusterName", String.class, true);
- infoBuilder.addAttribute("multicastHost", String.class, true);
- infoBuilder.addAttribute("multicastPort", int.class, true);
- infoBuilder.addAttribute("enableMulticast", boolean.class, true);
- infoBuilder.addAttribute("threads", int.class, true);
-
- infoBuilder.addAttribute("kernel", Kernel.class, false);
- infoBuilder.addAttribute("abstractName", AbstractName.class, false, false);
- infoBuilder.addAttribute("bundleContext", BundleContext.class, false);
-
- infoBuilder.setConstructor(new String[]{"kernel", "abstractName", "bundleContext"});
- GBEAN_INFO = infoBuilder.getBeanInfo();
- }
-
- public static GBeanInfo getGBeanInfo() {
- return GBEAN_INFO;
- }
-
}