[prev in list] [next in list] [prev in thread] [next in thread]
List: openejb-cvs
Subject: [openejb-scm] openejb/modules/openejb-builder/src/java/org/openejb/deployment ClusteredSFContainerSt
From: gdamour () codehaus ! org
Date: 2005-12-21 14:21:55
Message-ID: 20051221142155.17475.qmail () codehaus ! org
[Download RAW message or body]
gdamour 2005/12/21 09:21:55
Modified: modules/openejb-builder/src/java/org/openejb/deployment
AbstractContainerBuilder.java
BMPContainerBuilder.java CMPContainerBuilder.java
ContainerBuilder.java EntityBuilder.java
RemoteEJBReferenceBuilder.java SessionBuilder.java
StatefulContainerBuilder.java
StatelessContainerBuilder.java
Added: modules/openejb-builder/src/java/org/openejb/deployment
ClusteredSFContainerStrategy.java
DefaultBMPContainerStrategy.java
DefaultSFContainerStrategy.java
DefaultSLContainerStrategy.java
Log:
GERONIMO-1397 Clustering of SFSB
First step of many others to add the clustering of SFSB.
This check-in adds the following features:
* definition of an EJBClusterManager, which abstracts an EJB Cluster node;
* this EJB cluster node is a standard GBean (the default or
WADI implementation is DefaultEJBClusterManager);
* in an openejb-jar.xml DD, a SFSB can declare a reference to this node via
the ejb-cluster-reference element;
* when the SFSB container is started, the EJB cluster node notifies
the cluster that it is running a specific SFSB container;
* when a clustered SFSB InstanceContext is created, an array of nodes running
the container of this SFSB is associated to the InstanceContext. Note that
this array of nodes is updated upon start-up of a clustered SFSB container or
upon node failure;
* this array of nodes capable of running the created SFSB is propagated to
clients. Actually, this array is propagated at each EJB invocation.
Revision Changes Path
1.17 +46 -15 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/AbstractContainerBuilder.java
Index: AbstractContainerBuilder.java
===================================================================
RCS file: /home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/AbstractContainerBuilder.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- AbstractContainerBuilder.java 1 Oct 2005 08:44:09 -0000 1.16
+++ AbstractContainerBuilder.java 21 Dec 2005 14:21:54 -0000 1.17
@@ -51,6 +51,7 @@
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
+
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.management.ObjectName;
@@ -67,6 +68,7 @@
import org.openejb.GenericEJBContainer;
import org.openejb.InstanceContextFactory;
import org.openejb.InterceptorBuilder;
+import org.openejb.cache.InstanceCache;
import org.openejb.cache.InstanceFactory;
import org.openejb.cache.InstancePool;
import org.openejb.deployment.corba.TransactionImportPolicyBuilder;
@@ -112,13 +114,14 @@
//todo use object names here for build configuration rather than in \
ModuleBuilder. private TransactionContextManager transactionContextManager;
private TrackedConnectionAssociator trackedConnectionAssociator;
-
+
private ObjectName transactedTimerName;
+ protected ContainerStrategy containerStrategy;
private ObjectName nonTransactedTimerName;
-
+ private ObjectName ejbClusterManagerName;
+
//corba tx import
-
public ClassLoader getClassLoader() {
return classLoader;
}
@@ -358,9 +361,12 @@
if (tssBeanObjectName != null) {
gbean.setReferencePattern("TSSBean", tssBeanObjectName);
}
+ if (null != ejbClusterManagerName) {
+ gbean.setReferencePattern("EJBClusterManager", ejbClusterManagerName);
+ }
return gbean;
}
-
+
protected abstract Object buildIt(boolean buildContainer) throws Exception;
protected InterceptorBuilder initializeInterceptorBuilder(InterceptorBuilder \
interceptorBuilder, InterfaceMethodSignature[] signatures, VirtualOperation[] vtable) \
{ @@ -374,6 +380,7 @@
interceptorBuilder.setPolicyContextId(policycontextId);
interceptorBuilder.setTransactionPolicyManager(new \
TransactionPolicyManager(buildTransactionPolicies(transactionPolicySource, \
signatures)));
interceptorBuilder.setPermissionManager(new PermissionManager(ejbName, \
signatures)); + interceptorBuilder.setClustered(isClustered());
return interceptorBuilder;
}
@@ -427,6 +434,22 @@
}
}
+ public void setContainerStrategy(ContainerStrategy containerStrategy) {
+ this.containerStrategy = containerStrategy;
+ }
+
+ public ObjectName getEjbClusterManagerName() {
+ return ejbClusterManagerName;
+ }
+
+ public void setEjbClusterManagerName(ObjectName ejbClusterManagerName) {
+ this.ejbClusterManagerName = ejbClusterManagerName;
+ }
+
+ public boolean isClustered() {
+ return null != ejbClusterManagerName;
+ }
+
protected ProxyInfo createProxyInfo() throws ClassNotFoundException {
ClassLoader classLoader = getClassLoader();
Class homeInterface = loadOptionalClass(homeInterfaceName, classLoader);
@@ -457,15 +480,19 @@
return ClassLoading.loadClass(className, classLoader);
}
- protected EJBContainer createContainer(InterfaceMethodSignature[] signatures,
- InstanceContextFactory contextFactory,
- InterceptorBuilder interceptorBuilder,
- InstancePool pool) throws Exception {
+ protected EJBContainer createContainer(
+ InterfaceMethodSignature[] signatures,
+ InstanceCache instanceCache,
+ InstanceContextFactory contextFactory,
+ InterceptorBuilder interceptorBuilder,
+ InstancePool pool)
+ throws Exception {
return new GenericEJBContainer(getContainerId(),
getEJBName(),
createProxyInfo(),
signatures,
+ instanceCache,
contextFactory,
interceptorBuilder,
pool,
@@ -483,24 +510,28 @@
null,
getHomeTxPolicyConfig(),
getRemoteTxPolicyConfig(),
- Thread.currentThread().getContextClassLoader());
+ Thread.currentThread().getContextClassLoader(),
+ null); // EJBClusterManager
}
protected GBeanData buildGBeanData() {
return new GBeanData(GenericEJBContainer.GBEAN_INFO);
}
- protected GBeanData createConfiguration(ClassLoader cl, \
InterfaceMethodSignature[] signatures,
- InstanceContextFactory contextFactory,
- InterceptorBuilder interceptorBuilder,
- InstancePool pool,
- ObjectName timerName) throws Exception \
{ + protected GBeanData createConfiguration(ClassLoader cl,
+ InterfaceMethodSignature[] signatures,
+ InstanceCache instanceCache,
+ InstanceContextFactory contextFactory,
+ InterceptorBuilder interceptorBuilder,
+ InstancePool pool,
+ ObjectName timerName) throws Exception {
GBeanData gbean = buildGBeanData();
gbean.setAttribute("containerID", getContainerId());
gbean.setAttribute("ejbName", getEJBName());
gbean.setAttribute("proxyInfo", createProxyInfo());
gbean.setAttribute("signatures", signatures);
+ gbean.setAttribute("instanceCache", instanceCache);
gbean.setAttribute("contextFactory", contextFactory);
gbean.setAttribute("interceptorBuilder", interceptorBuilder);
gbean.setAttribute("pool", pool);
1.5 +5 -5 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/BMPContainerBuilder.java
Index: BMPContainerBuilder.java
===================================================================
RCS file: /home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/BMPContainerBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BMPContainerBuilder.java 19 Feb 2005 18:24:43 -0000 1.4
+++ BMPContainerBuilder.java 21 Dec 2005 14:21:54 -0000 1.5
@@ -49,6 +49,7 @@
import java.lang.reflect.Method;
import java.util.LinkedHashMap;
+
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.management.ObjectName;
@@ -68,7 +69,6 @@
import org.openejb.entity.bmp.BMPCreateMethod;
import org.openejb.entity.bmp.BMPEntityInterceptorBuilder;
import org.openejb.entity.bmp.BMPFinderMethod;
-import org.openejb.entity.bmp.BMPInstanceContextFactory;
import org.openejb.entity.bmp.BMPRemoveMethod;
import org.openejb.entity.dispatch.EJBActivateOperation;
import org.openejb.entity.dispatch.EJBLoadOperation;
@@ -115,7 +115,7 @@
InterceptorBuilder interceptorBuilder = initializeInterceptorBuilder(new \
BMPEntityInterceptorBuilder(), signatures, vtable);
// build the context factory
- InstanceContextFactory contextFactory = new \
BMPInstanceContextFactory(getContainerId(), beanClass, getUnshareableResources(), \
getApplicationManagedSecurityResources()); + InstanceContextFactory \
contextFactory = containerStrategy.newInstanceContextFactory();
EntityInstanceFactory instanceFactory = new \
EntityInstanceFactory(contextFactory);
// build the pool
@@ -124,9 +124,9 @@
ObjectName timerName = getTimerName(beanClass);
if (buildContainer) {
- return createContainer(signatures, contextFactory, interceptorBuilder, \
pool); + return createContainer(signatures, null, contextFactory, \
interceptorBuilder, pool); } else {
- return createConfiguration(classLoader, signatures, contextFactory, \
interceptorBuilder, pool, timerName); + return \
createConfiguration(classLoader, signatures, null, contextFactory, \
interceptorBuilder, pool, timerName); }
}
1.33 +11 -5 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPContainerBuilder.java
Index: CMPContainerBuilder.java
===================================================================
RCS file: /home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPContainerBuilder.java,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- CMPContainerBuilder.java 14 Dec 2005 13:31:32 -0000 1.32
+++ CMPContainerBuilder.java 21 Dec 2005 14:21:54 -0000 1.33
@@ -64,6 +64,7 @@
import org.openejb.EJBContainer;
import org.openejb.InstanceContextFactory;
import org.openejb.InterceptorBuilder;
+import org.openejb.cache.InstanceCache;
import org.openejb.cache.InstancePool;
import org.openejb.dispatch.EJBTimeoutOperation;
import org.openejb.dispatch.InterfaceMethodSignature;
@@ -341,9 +342,9 @@
ObjectName timerName = getTimerName(beanClass);
if (buildContainer) {
- return createContainer(signatures, contextFactory, interceptorBuilder, \
pool); + return createContainer(signatures, null, contextFactory, \
interceptorBuilder, pool); }
- return createConfiguration(classLoader, signatures, contextFactory, \
interceptorBuilder, pool, timerName); + return \
createConfiguration(classLoader, signatures, null, contextFactory, \
interceptorBuilder, pool, timerName); }
private LinkedHashMap createCMPFieldAccessors(SQLQueryBuilder queryBuilder, \
LinkedHashMap cmrFieldAccessor) throws QueryException { @@ -718,6 +719,7 @@
}
protected EJBContainer createContainer(InterfaceMethodSignature[] signatures,
+ InstanceCache instanceCache,
InstanceContextFactory contextFactory,
InterceptorBuilder interceptorBuilder,
InstancePool pool) throws Exception {
@@ -727,6 +729,7 @@
getEJBName(),
createProxyInfo(),
signatures,
+ instanceCache,
contextFactory,
interceptorBuilder,
pool,
@@ -745,16 +748,19 @@
getHomeTxPolicyConfig(),
getRemoteTxPolicyConfig(),
Thread.currentThread().getContextClassLoader(),
+ null, // EJBClusterManager
cache,
factory);
}
- protected GBeanData createConfiguration(ClassLoader cl, \
InterfaceMethodSignature[] signatures, + protected GBeanData \
createConfiguration(ClassLoader cl, + InterfaceMethodSignature[] \
signatures, + InstanceCache instanceCache,
InstanceContextFactory contextFactory,
InterceptorBuilder interceptorBuilder,
InstancePool pool,
ObjectName timerName) throws Exception {
- GBeanData gbean = super.createConfiguration(cl, signatures, \
contextFactory, interceptorBuilder, pool, timerName); + GBeanData gbean = \
super.createConfiguration(cl, signatures, instanceCache, contextFactory, \
interceptorBuilder, pool, timerName);
gbean.setAttribute("frontEndCacheDelegate", cache);
gbean.setAttribute("cacheFactory", factory);
1.8 +17 -2 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/ContainerBuilder.java \
Index: ContainerBuilder.java
===================================================================
RCS file: /home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/ContainerBuilder.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ContainerBuilder.java 2 Jun 2005 02:57:01 -0000 1.7
+++ ContainerBuilder.java 21 Dec 2005 14:21:54 -0000 1.8
@@ -45,6 +45,7 @@
package org.openejb.deployment;
import java.util.Map;
+
import javax.management.ObjectName;
import org.apache.geronimo.gbean.GBeanData;
@@ -53,6 +54,8 @@
import org.apache.geronimo.transaction.context.TransactionContextManager;
import org.apache.geronimo.transaction.context.UserTransactionImpl;
import org.openejb.EJBContainer;
+import org.openejb.InstanceContextFactory;
+import org.openejb.cache.InstanceCache;
import org.openejb.deployment.corba.TransactionImportPolicyBuilder;
import org.openejb.transaction.TransactionPolicySource;
@@ -139,4 +142,16 @@
TransactionImportPolicyBuilder getTransactionImportPolicyBuilder();
void setTransactionImportPolicyBuilder(TransactionImportPolicyBuilder \
transactionImportPolicyBuilder); +
+ ObjectName getEjbClusterManagerName();
+
+ void setEjbClusterManagerName(ObjectName ejbClusterName);
+
+ void setContainerStrategy(ContainerStrategy containerStrategy);
+
+ public interface ContainerStrategy {
+ public InstanceCache newInstanceCache();
+
+ public InstanceContextFactory newInstanceContextFactory();
+ }
}
1.22 +1 -0 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/EntityBuilder.java
Index: EntityBuilder.java
===================================================================
RCS file: /home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/EntityBuilder.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- EntityBuilder.java 9 Sep 2005 06:43:23 -0000 1.21
+++ EntityBuilder.java 21 Dec 2005 14:21:54 -0000 1.22
@@ -115,6 +115,7 @@
String ejbName = entityBean.getEjbName().getStringValue().trim();
BMPContainerBuilder builder = new BMPContainerBuilder();
+ builder.setContainerStrategy(new DefaultBMPContainerStrategy(builder));
builder.setClassLoader(cl);
builder.setContainerId(containerObjectName.getCanonicalName());
builder.setEJBName(ejbName);
1.8 +17 -14 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/RemoteEJBReferenceBuilder.java
Index: RemoteEJBReferenceBuilder.java
===================================================================
RCS file: /home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/RemoteEJBReferenceBuilder.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- RemoteEJBReferenceBuilder.java 1 Dec 2005 08:34:55 -0000 1.7
+++ RemoteEJBReferenceBuilder.java 21 Dec 2005 14:21:54 -0000 1.8
@@ -48,35 +48,33 @@
package org.openejb.deployment;
import java.net.URI;
-import java.util.Set;
-import java.util.Collection;
-import java.util.ArrayList;
-import java.util.Iterator;
+import java.net.UnknownHostException;
+
import javax.management.ObjectName;
import javax.naming.Reference;
import org.apache.geronimo.common.DeploymentException;
-import org.apache.geronimo.common.UnresolvedEJBRefException;
+import org.apache.geronimo.gbean.GBeanData;
import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.gbean.GBeanData;
import org.apache.geronimo.j2ee.deployment.EJBReferenceBuilder;
import org.apache.geronimo.j2ee.deployment.NamingContext;
import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
-import org.apache.geronimo.kernel.jmx.JMXUtil;
-import org.apache.geronimo.kernel.GBeanNotFoundException;
-
+import org.openejb.client.ServerMetaData;
+import org.openejb.client.naming.RemoteEJBAddr;
import org.openejb.client.naming.RemoteEJBObjectFactory;
import org.openejb.client.naming.RemoteEJBRefAddr;
-import org.openejb.corba.CORBAHandleDelegate;
-import org.openejb.corba.proxy.CORBAProxyReference;
-import org.openejb.proxy.ProxyInfo;
/**
*/
public class RemoteEJBReferenceBuilder extends OpenEJBReferenceBuilder {
-
+ private final ServerMetaData server;
+
+ public RemoteEJBReferenceBuilder(String host, int port) throws \
UnknownHostException { + server = new ServerMetaData("BOOT", host, port);
+ }
+
public Reference createEJBLocalReference(String objectName, GBeanData \
gbeanData, boolean isSession, String localHome, String local) {
throw new UnsupportedOperationException("Application client cannot have a \
local ejb ref"); }
@@ -86,7 +84,7 @@
}
protected Reference buildRemoteReference(String objectName, boolean session, \
String home, String remote) {
- RemoteEJBRefAddr addr = new RemoteEJBRefAddr(objectName);
+ RemoteEJBRefAddr addr = new RemoteEJBRefAddr(new RemoteEJBAddr(server, \
objectName));
Reference reference = new Reference(null, addr, \
RemoteEJBObjectFactory.class.getName(), null); return reference;
}
@@ -97,6 +95,11 @@
GBeanInfoBuilder infoFactory = \
GBeanInfoBuilder.createStatic(RemoteEJBReferenceBuilder.class, \
NameFactory.MODULE_BUILDER); //TODO decide what type this should be \
infoFactory.addInterface(EJBReferenceBuilder.class);
+ infoFactory.addAttribute("host", String.class, true);
+ infoFactory.addAttribute("port", int.class, true);
+
+ infoFactory.setConstructor(new String[]{"host", "port"});
+
GBEAN_INFO = infoFactory.getBeanInfo();
}
1.35 +19 -2 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/SessionBuilder.java
Index: SessionBuilder.java
===================================================================
RCS file: /home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/SessionBuilder.java,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- SessionBuilder.java 21 Aug 2005 07:36:30 -0000 1.34
+++ SessionBuilder.java 21 Dec 2005 14:21:54 -0000 1.35
@@ -98,6 +98,7 @@
import org.openejb.slsb.HandlerChainConfiguration;
import org.openejb.transaction.TransactionPolicySource;
import org.openejb.transaction.TransactionPolicyType;
+import org.openejb.xbeans.ejbjar.OpenejbEjbClusterReferenceType;
import org.openejb.xbeans.ejbjar.OpenejbSessionBeanType;
import org.openejb.xbeans.ejbjar.OpenejbTssType;
import org.openejb.xbeans.ejbjar.OpenejbWebServiceSecurityType;
@@ -239,6 +240,7 @@
boolean isStateless = \
"Stateless".equals(sessionBean.getSessionType().getStringValue().trim()); if \
(isStateless) { builder = new StatelessContainerBuilder();
+ builder.setContainerStrategy(new DefaultSLContainerStrategy(builder));
builder.setTransactedTimerName(earContext.getTransactedTimerName());
builder.setNonTransactedTimerName(earContext.getNonTransactedTimerName());
builder.setServiceEndpointName(OpenEJBModuleBuilder.getJ2eeStringValue(sessionBean.getServiceEndpoint()));
@@ -246,6 +248,21 @@
containerSecurityBuilder.addToPermissions(toBeChecked, ejbName, \
"ServiceEndpoint", builder.getServiceEndpointName(), cl); } else {
builder = new StatefulContainerBuilder();
+ if (null == openejbSessionBean ||
+ false == openejbSessionBean.isSetEjbClusterReference()) {
+ builder.setContainerStrategy(new \
DefaultSFContainerStrategy(builder)); + } else if \
(openejbSessionBean.isSetEjbClusterReference()) { + \
builder.setContainerStrategy(new ClusteredSFContainerStrategy(builder)); + \
OpenejbEjbClusterReferenceType ejbClusterReference = \
openejbSessionBean.getEjbClusterReference(); + ObjectName \
clusterObjectName; + String name = \
ejbClusterReference.getTargetName(); + try {
+ clusterObjectName = ObjectName.getInstance(name);
+ } catch (MalformedObjectNameException e) {
+ throw new DeploymentException("Invalid object name for \
ejb-cluster-reference", e); + }
+ builder.setEjbClusterManagerName(clusterObjectName);
+ }
}
builder.setClassLoader(cl);
builder.setContainerId(sessionObjectName.getCanonicalName());
@@ -255,7 +272,7 @@
builder.setRemoteInterfaceName(OpenEJBModuleBuilder.getJ2eeStringValue(sessionBean.getRemote()));
builder.setLocalHomeInterfaceName(OpenEJBModuleBuilder.getJ2eeStringValue(sessionBean.getLocalHome()));
builder.setLocalInterfaceName(OpenEJBModuleBuilder.getJ2eeStringValue(sessionBean.getLocal()));
-
+
SecurityConfiguration securityConfiguration = \
earContext.getSecurityConfiguration(); if (securityConfiguration != null) {
containerSecurityBuilder.addToPermissions(toBeChecked, ejbName, \
"Home", builder.getHomeInterfaceName(), cl); @@ -292,7 +309,7 @@
}
}
builder.setTransactionImportPolicyBuilder(getModuleBuilder().getTransactionImportPolicyBuilder());
-
+
processEnvironmentRefs(builder, earContext, ejbModule, sessionBean, \
openejbSessionBean, userTransaction, cl);
ObjectName tssBeanObjectName = null;
1.5 +14 -8 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/StatefulContainerBuilder.java
Index: StatefulContainerBuilder.java
===================================================================
RCS file: /home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/StatefulContainerBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- StatefulContainerBuilder.java 1 Mar 2005 23:34:37 -0000 1.4
+++ StatefulContainerBuilder.java 21 Dec 2005 14:21:54 -0000 1.5
@@ -51,9 +51,10 @@
import java.util.LinkedHashMap;
import org.openejb.EJBComponentType;
+import org.openejb.InstanceContextFactory;
import org.openejb.InterceptorBuilder;
+import org.openejb.cache.InstanceCache;
import org.openejb.cache.InstancePool;
-import org.openejb.cache.SimpleInstanceCache;
import org.openejb.dispatch.InterfaceMethodSignature;
import org.openejb.dispatch.MethodHelper;
import org.openejb.dispatch.MethodSignature;
@@ -64,7 +65,6 @@
import org.openejb.sfsb.BusinessMethod;
import org.openejb.sfsb.CreateMethod;
import org.openejb.sfsb.RemoveMethod;
-import org.openejb.sfsb.StatefulInstanceContextFactory;
import org.openejb.sfsb.StatefulInstanceFactory;
import org.openejb.sfsb.StatefulInterceptorBuilder;
import org.openejb.slsb.dispatch.EJBActivateOperation;
@@ -78,8 +78,13 @@
protected int getEJBComponentType() {
return EJBComponentType.STATEFUL;
}
-
+
protected Object buildIt(boolean buildContainer) throws Exception {
+ if (null == containerStrategy) {
+ throw new IllegalStateException("SFSBContainerStrategy has not" +
+ " been set.");
+ }
+
// get the bean class
ClassLoader classLoader = getClassLoader();
Class beanClass = classLoader.loadClass(getBeanClassName());
@@ -90,22 +95,23 @@
VirtualOperation[] vtable = (VirtualOperation[]) \
vopMap.values().toArray(new VirtualOperation[vopMap.size()]);
// build the instance factory
- StatefulInstanceContextFactory contextFactory = new \
StatefulInstanceContextFactory(getContainerId(), beanClass, getUserTransaction(), \
getUnshareableResources(), getApplicationManagedSecurityResources()); + \
InstanceContextFactory contextFactory = \
containerStrategy.newInstanceContextFactory();
StatefulInstanceFactory instanceFactory = new \
StatefulInstanceFactory(contextFactory);
// create and intitalize the interceptor moduleBuilder
InterceptorBuilder interceptorBuilder = initializeInterceptorBuilder(new \
StatefulInterceptorBuilder(), signatures, vtable); \
interceptorBuilder.setInstanceFactory(instanceFactory);
- interceptorBuilder.setInstanceCache(new SimpleInstanceCache());
+ InstanceCache instanceCache = containerStrategy.newInstanceCache();
+ interceptorBuilder.setInstanceCache(instanceCache);
// build the pool
InstancePool pool = createInstancePool(instanceFactory);
if (buildContainer) {
- return createContainer(signatures, contextFactory, interceptorBuilder, \
pool); + return createContainer(signatures, instanceCache, \
contextFactory, interceptorBuilder, pool); } else {
//stateful has no timers
- return createConfiguration(classLoader, signatures, contextFactory, \
interceptorBuilder, pool, null); + return \
createConfiguration(classLoader, signatures, instanceCache, contextFactory, \
interceptorBuilder, pool, null); }
}
1.6 +7 -6 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/StatelessContainerBuilder.java
Index: StatelessContainerBuilder.java
===================================================================
RCS file: /home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/StatelessContainerBuilder.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- StatelessContainerBuilder.java 16 Apr 2005 02:21:04 -0000 1.5
+++ StatelessContainerBuilder.java 21 Dec 2005 14:21:54 -0000 1.6
@@ -49,12 +49,13 @@
import java.lang.reflect.Method;
import java.util.LinkedHashMap;
+
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.management.ObjectName;
import org.openejb.EJBComponentType;
-import org.openejb.InterceptorBuilder;
+import org.openejb.InstanceContextFactory;
import org.openejb.cache.InstancePool;
import org.openejb.dispatch.EJBTimeoutOperation;
import org.openejb.dispatch.InterfaceMethodSignature;
@@ -63,11 +64,11 @@
import org.openejb.slsb.BusinessMethod;
import org.openejb.slsb.CreateMethod;
import org.openejb.slsb.EJBCreateMethod;
+import org.openejb.slsb.HandlerChainConfiguration;
import org.openejb.slsb.RemoveMethod;
import org.openejb.slsb.StatelessInstanceContextFactory;
import org.openejb.slsb.StatelessInstanceFactory;
import org.openejb.slsb.StatelessInterceptorBuilder;
-import org.openejb.slsb.HandlerChainConfiguration;
import org.openejb.slsb.dispatch.SetSessionContextOperation;
/**
@@ -106,7 +107,7 @@
interceptorBuilder.setHandlerChainConfiguration(getHandlerChainConfiguration());
// build the instance factory
- StatelessInstanceContextFactory contextFactory = new \
StatelessInstanceContextFactory(getContainerId(), beanClass, getUserTransaction(), \
getUnshareableResources(), getApplicationManagedSecurityResources()); + \
InstanceContextFactory contextFactory = \
containerStrategy.newInstanceContextFactory();
StatelessInstanceFactory instanceFactory = new \
StatelessInstanceFactory(contextFactory);
// build the pool
@@ -116,9 +117,9 @@
if (buildContainer) {
//TODO add timer to sig.
- return createContainer(signatures, contextFactory, interceptorBuilder, \
pool); + return createContainer(signatures, null, contextFactory, \
interceptorBuilder, pool); } else {
- return createConfiguration(classLoader, signatures, contextFactory, \
interceptorBuilder, pool, timerName); + return \
createConfiguration(classLoader, signatures, null, contextFactory, \
interceptorBuilder, pool, timerName); }
}
1.1 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/ClusteredSFContainerStrategy.java
Index: ClusteredSFContainerStrategy.java
===================================================================
/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "OpenEJB" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of The OpenEJB Group. For written permission,
* please contact info@openejb.org.
*
* 4. Products derived from this Software may not be called "OpenEJB"
* nor may "OpenEJB" appear in their names without prior written
* permission of The OpenEJB Group. OpenEJB is a registered
* trademark of The OpenEJB Group.
*
* 5. Due credit should be given to the OpenEJB Project
* (http://openejb.org/).
*
* THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 2005 (C) The OpenEJB Group. All Rights Reserved.
*
* $Id: ClusteredSFContainerStrategy.java,v 1.1 2005/12/21 14:21:54 gdamour Exp $
*/
package org.openejb.deployment;
import org.openejb.InstanceContextFactory;
import org.openejb.cache.InstanceCache;
import org.openejb.cache.SimpleInstanceCache;
import org.openejb.cluster.server.DefaultClusteredInstanceCache;
import org.openejb.cluster.sfsb.ClusteredSFInstanceContextFactory;
import org.openejb.deployment.ContainerBuilder.ContainerStrategy;
/**
*
* @version $Revision: 1.1 $ $Date: 2005/12/21 14:21:54 $
*/
public class ClusteredSFContainerStrategy implements ContainerStrategy {
private final ContainerBuilder builder;
public ClusteredSFContainerStrategy(ContainerBuilder builder) {
this.builder = builder;
}
public InstanceCache newInstanceCache() {
return new DefaultClusteredInstanceCache(new SimpleInstanceCache());
}
public InstanceContextFactory newInstanceContextFactory() {
ClassLoader classLoader = builder.getClassLoader();
Class beanClass;
try {
beanClass = classLoader.loadClass(builder.getBeanClassName());
} catch (ClassNotFoundException e) {
throw (IllegalStateException) new IllegalStateException().initCause(e);
}
return new ClusteredSFInstanceContextFactory(
builder.getContainerId(),
beanClass,
builder.getUserTransaction(),
builder.getUnshareableResources(),
builder.getApplicationManagedSecurityResources());
}
}
1.1 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/DefaultBMPContainerStrategy.java
Index: DefaultBMPContainerStrategy.java
===================================================================
/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "OpenEJB" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of The OpenEJB Group. For written permission,
* please contact info@openejb.org.
*
* 4. Products derived from this Software may not be called "OpenEJB"
* nor may "OpenEJB" appear in their names without prior written
* permission of The OpenEJB Group. OpenEJB is a registered
* trademark of The OpenEJB Group.
*
* 5. Due credit should be given to the OpenEJB Project
* (http://openejb.org/).
*
* THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 2005 (C) The OpenEJB Group. All Rights Reserved.
*
* $Id: DefaultBMPContainerStrategy.java,v 1.1 2005/12/21 14:21:54 gdamour Exp $
*/
package org.openejb.deployment;
import org.openejb.InstanceContextFactory;
import org.openejb.cache.InstanceCache;
import org.openejb.cache.SimpleInstanceCache;
import org.openejb.deployment.ContainerBuilder.ContainerStrategy;
import org.openejb.entity.bmp.BMPInstanceContextFactory;
import org.openejb.sfsb.StatefulInstanceContextFactory;
/**
*
* @version $Revision: 1.1 $ $Date: 2005/12/21 14:21:54 $
*/
public class DefaultBMPContainerStrategy implements ContainerStrategy {
private final ContainerBuilder builder;
public DefaultBMPContainerStrategy(ContainerBuilder builder) {
this.builder = builder;
}
public InstanceCache newInstanceCache() {
throw new UnsupportedOperationException("No InstanceCache is defined" +
" for a BMP.");
}
public InstanceContextFactory newInstanceContextFactory() {
ClassLoader classLoader = builder.getClassLoader();
Class beanClass;
try {
beanClass = classLoader.loadClass(builder.getBeanClassName());
} catch (ClassNotFoundException e) {
throw (IllegalStateException) new IllegalStateException().initCause(e);
}
return new BMPInstanceContextFactory(
builder.getContainerId(),
beanClass,
builder.getUnshareableResources(),
builder.getApplicationManagedSecurityResources());
}
}
1.1 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/DefaultSFContainerStrategy.java
Index: DefaultSFContainerStrategy.java
===================================================================
/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "OpenEJB" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of The OpenEJB Group. For written permission,
* please contact info@openejb.org.
*
* 4. Products derived from this Software may not be called "OpenEJB"
* nor may "OpenEJB" appear in their names without prior written
* permission of The OpenEJB Group. OpenEJB is a registered
* trademark of The OpenEJB Group.
*
* 5. Due credit should be given to the OpenEJB Project
* (http://openejb.org/).
*
* THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 2005 (C) The OpenEJB Group. All Rights Reserved.
*
* $Id: DefaultSFContainerStrategy.java,v 1.1 2005/12/21 14:21:54 gdamour Exp $
*/
package org.openejb.deployment;
import org.openejb.InstanceContextFactory;
import org.openejb.cache.InstanceCache;
import org.openejb.cache.SimpleInstanceCache;
import org.openejb.deployment.ContainerBuilder.ContainerStrategy;
import org.openejb.sfsb.StatefulInstanceContextFactory;
/**
*
* @version $Revision: 1.1 $ $Date: 2005/12/21 14:21:54 $
*/
public class DefaultSFContainerStrategy implements ContainerStrategy {
private final ContainerBuilder builder;
public DefaultSFContainerStrategy(ContainerBuilder builder) {
this.builder = builder;
}
public InstanceCache newInstanceCache() {
return new SimpleInstanceCache();
}
public InstanceContextFactory newInstanceContextFactory() {
ClassLoader classLoader = builder.getClassLoader();
Class beanClass;
try {
beanClass = classLoader.loadClass(builder.getBeanClassName());
} catch (ClassNotFoundException e) {
throw (IllegalStateException) new IllegalStateException().initCause(e);
}
return new StatefulInstanceContextFactory(
builder.getContainerId(),
beanClass,
builder.getUserTransaction(),
builder.getUnshareableResources(),
builder.getApplicationManagedSecurityResources());
}
}
1.1 \
openejb/modules/openejb-builder/src/java/org/openejb/deployment/DefaultSLContainerStrategy.java
Index: DefaultSLContainerStrategy.java
===================================================================
/**
* Redistribution and use of this software and associated documentation
* ("Software"), with or without modification, are permitted provided
* that the following conditions are met:
*
* 1. Redistributions of source code must retain copyright
* statements and notices. Redistributions must also contain a
* copy of this document.
*
* 2. Redistributions in binary form must reproduce the
* above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. The name "OpenEJB" must not be used to endorse or promote
* products derived from this Software without prior written
* permission of The OpenEJB Group. For written permission,
* please contact info@openejb.org.
*
* 4. Products derived from this Software may not be called "OpenEJB"
* nor may "OpenEJB" appear in their names without prior written
* permission of The OpenEJB Group. OpenEJB is a registered
* trademark of The OpenEJB Group.
*
* 5. Due credit should be given to the OpenEJB Project
* (http://openejb.org/).
*
* THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Copyright 2005 (C) The OpenEJB Group. All Rights Reserved.
*
* $Id: DefaultSLContainerStrategy.java,v 1.1 2005/12/21 14:21:54 gdamour Exp $
*/
package org.openejb.deployment;
import org.openejb.InstanceContextFactory;
import org.openejb.cache.InstanceCache;
import org.openejb.deployment.ContainerBuilder.ContainerStrategy;
import org.openejb.slsb.StatelessInstanceContextFactory;
/**
*
* @version $Revision: 1.1 $ $Date: 2005/12/21 14:21:54 $
*/
public class DefaultSLContainerStrategy implements ContainerStrategy {
private final ContainerBuilder builder;
public DefaultSLContainerStrategy(ContainerBuilder builder) {
this.builder = builder;
}
public InstanceCache newInstanceCache() {
throw new UnsupportedOperationException("No InstanceCache is defined" +
" for a SLSB.");
}
public InstanceContextFactory newInstanceContextFactory() {
ClassLoader classLoader = builder.getClassLoader();
Class beanClass;
try {
beanClass = classLoader.loadClass(builder.getBeanClassName());
} catch (ClassNotFoundException e) {
throw (IllegalStateException) new IllegalStateException().initCause(e);
}
return new StatelessInstanceContextFactory(
builder.getContainerId(),
beanClass,
builder.getUserTransaction(),
builder.getUnshareableResources(),
builder.getApplicationManagedSecurityResources());
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic