djencks 2005/03/15 00:27:03
Modified: modules/core/src/java/org/openejb/corba Adapter.java
AdapterEntity.java AdapterStateful.java
AdapterStateless.java CSSBean.java TSSBean.java
Log:
Make transaction policy mapping more generic and implement the
no-distributed-transactions corba tx propagation polices. CORBA operation name
to method signature mapping is not yet really implemented
Revision Changes Path
1.7 +34 -10
openejb/modules/core/src/java/org/openejb/corba/Adapter.java
Index: Adapter.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/Adapter.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Adapter.java 8 Mar 2005 04:08:26 -0000 1.6
+++ Adapter.java 15 Mar 2005 05:27:03 -0000 1.7
@@ -45,10 +45,12 @@
package org.openejb.corba;
import java.rmi.Remote;
+import java.util.Map;
import javax.rmi.CORBA.Tie;
-import javax.rmi.CORBA.Util;
import org.omg.CORBA.ORB;
+import org.omg.CORBA.Policy;
+import org.omg.CORBA.Any;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContext;
import org.omg.CosNaming.NamingContextExt;
@@ -58,9 +60,14 @@
import org.omg.CosNaming.NamingContextPackage.NotFound;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.Servant;
-
+import org.omg.PortableServer.LifespanPolicyValue;
+import org.omg.PortableServer.RequestProcessingPolicyValue;
+import org.omg.PortableServer.ServantRetentionPolicyValue;
+import org.omg.PortableServer.IdAssignmentPolicyValue;
+import org.omg.PortableServer.ImplicitActivationPolicyValue;
import org.openejb.EJBContainer;
import org.openejb.corba.util.TieLoader;
+import org.openejb.corba.transaction.ServerTransactionPolicyFactory;
import org.openejb.proxy.ProxyInfo;
@@ -69,8 +76,9 @@
*/
public abstract class Adapter implements RefGenerator {
- private final EJBContainer container;
+ private final EJBContainer container;
private final POA parentPOA;
+ protected final POA homePOA;
private final NamingContextExt initialContext;
private final TieLoader tieLoader;
private final byte[] home_id;
@@ -82,9 +90,21 @@
this.tieLoader = tieLoader;
this.home_id = container.getContainerID().toString().getBytes();
+ Any any = orb.create_any();
+ any.insert_Value(container.getHomeTxPolicyConfig());
+
try {
- org.omg.CORBA.Object obj =
orb.resolve_initial_references("NameService");
- initialContext = NamingContextExtHelper.narrow(obj);
+ Policy[] policies = new Policy[]{
+
orb.create_policy(ServerTransactionPolicyFactory.POLICY_TYPE, any),
+
parentPOA.create_lifespan_policy(LifespanPolicyValue.TRANSIENT),
+
parentPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY),
+
parentPOA.create_servant_retention_policy(ServantRetentionPolicyValue.RETAIN),
+
parentPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
+
parentPOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
+ };
+ homePOA =
parentPOA.create_POA(container.getContainerID().toString(),
parentPOA.the_POAManager(), policies);
+
+ homePOA.the_POAManager().activate();
Servant servant =
tieLoader.loadTieClass(container.getProxyInfo().getHomeInterface(),
container.getClassLoader());
@@ -95,9 +115,11 @@
((Tie) servant).setTarget(remote);
}
- parentPOA.activate_object_with_id(home_id, servant);
- homeReference = parentPOA.servant_to_reference(servant);
+ homePOA.activate_object_with_id(home_id, servant);
+ homeReference = homePOA.servant_to_reference(servant);
+ org.omg.CORBA.Object obj =
orb.resolve_initial_references("NameService");
+ initialContext = NamingContextExtHelper.narrow(obj);
String[] names = container.getJndiNames();
for (int i = 0; i < names.length; i++) {
NameComponent[] nameComponent =
initialContext.to_name(names[i]);
@@ -118,6 +140,7 @@
} catch (Exception e) {
throw new CORBAException(e);
}
+
}
public EJBContainer getContainer() {
@@ -155,7 +178,8 @@
}
}
- parentPOA.deactivate_object(home_id);
+ homePOA.deactivate_object(home_id);
+ homePOA.destroy(true, true);
} catch (Exception e) {
throw new CORBAException(e);
}
1.7 +15 -9
openejb/modules/core/src/java/org/openejb/corba/AdapterEntity.java
Index: AdapterEntity.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/AdapterEntity.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AdapterEntity.java 12 Mar 2005 17:04:53 -0000 1.6
+++ AdapterEntity.java 15 Mar 2005 05:27:03 -0000 1.7
@@ -58,6 +58,7 @@
import org.omg.CORBA.OBJECT_NOT_EXIST;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Policy;
+import org.omg.CORBA.Any;
import org.omg.PortableServer.IdAssignmentPolicyValue;
import org.omg.PortableServer.ImplicitActivationPolicyValue;
import org.omg.PortableServer.LifespanPolicyValue;
@@ -70,6 +71,7 @@
import org.openejb.EJBContainer;
import org.openejb.corba.util.TieLoader;
+import org.openejb.corba.transaction.ServerTransactionPolicyFactory;
import org.openejb.proxy.ProxyInfo;
@@ -87,16 +89,20 @@
public AdapterEntity(EJBContainer container, ORB orb, POA parentPOA,
TieLoader tieLoader, Policy securityPolicy) throws CORBAException {
super(container, orb, parentPOA, tieLoader);
+ Any any = orb.create_any();
+ any.insert_Value(container.getRemoteTxPolicyConfig());
+
try {
Policy[] policies = new Policy[]{
securityPolicy,
-
parentPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT),
-
parentPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_SERVANT_MANAGER),
-
parentPOA.create_servant_retention_policy(ServantRetentionPolicyValue.NON_RETAIN),
-
parentPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
-
parentPOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
+
orb.create_policy(ServerTransactionPolicyFactory.POLICY_TYPE, any),
+
homePOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT),
+
homePOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_SERVANT_MANAGER),
+
homePOA.create_servant_retention_policy(ServantRetentionPolicyValue.NON_RETAIN),
+
homePOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
+
homePOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
};
- poa =
parentPOA.create_POA(container.getContainerID().toString(),
parentPOA.the_POAManager(), policies);
+ poa = homePOA.create_POA(container.getContainerID().toString(),
homePOA.the_POAManager(), policies);
poa.set_servant_manager(new ObjectActivator());
poa.the_POAManager().activate();
@@ -115,8 +121,8 @@
}
public void stop() throws CORBAException {
- super.stop();
poa.destroy(true, true);
+ super.stop();
}
public org.omg.CORBA.Object genObjectReference(ProxyInfo proxyInfo)
throws CORBAException {
1.7 +15 -9
openejb/modules/core/src/java/org/openejb/corba/AdapterStateful.java
Index: AdapterStateful.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/AdapterStateful.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AdapterStateful.java 12 Mar 2005 17:04:53 -0000 1.6
+++ AdapterStateful.java 15 Mar 2005 05:27:03 -0000 1.7
@@ -58,6 +58,7 @@
import org.omg.CORBA.OBJECT_NOT_EXIST;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Policy;
+import org.omg.CORBA.Any;
import org.omg.PortableServer.IdAssignmentPolicyValue;
import org.omg.PortableServer.ImplicitActivationPolicyValue;
import org.omg.PortableServer.LifespanPolicyValue;
@@ -70,6 +71,7 @@
import org.openejb.EJBContainer;
import org.openejb.corba.util.TieLoader;
+import org.openejb.corba.transaction.ServerTransactionPolicyFactory;
import org.openejb.proxy.ProxyInfo;
@@ -87,16 +89,20 @@
public AdapterStateful(EJBContainer container, ORB orb, POA parentPOA,
TieLoader tieLoader, Policy securityPolicy) throws CORBAException {
super(container, orb, parentPOA, tieLoader);
+ Any any = orb.create_any();
+ any.insert_Value(container.getRemoteTxPolicyConfig());
+
try {
Policy[] policies = new Policy[]{
securityPolicy,
-
parentPOA.create_lifespan_policy(LifespanPolicyValue.TRANSIENT),
-
parentPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_SERVANT_MANAGER),
-
parentPOA.create_servant_retention_policy(ServantRetentionPolicyValue.NON_RETAIN),
-
parentPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
-
parentPOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
+
orb.create_policy(ServerTransactionPolicyFactory.POLICY_TYPE, any),
+
homePOA.create_lifespan_policy(LifespanPolicyValue.TRANSIENT),
+
homePOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_SERVANT_MANAGER),
+
homePOA.create_servant_retention_policy(ServantRetentionPolicyValue.NON_RETAIN),
+
homePOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
+
homePOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
};
- poa =
parentPOA.create_POA(container.getContainerID().toString(),
parentPOA.the_POAManager(), policies);
+ poa = homePOA.create_POA(container.getContainerID().toString(),
homePOA.the_POAManager(), policies);
poa.set_servant_manager(new ObjectActivator());
poa.the_POAManager().activate();
@@ -115,8 +121,8 @@
}
public void stop() throws CORBAException {
- super.stop();
poa.destroy(true, true);
+ super.stop();
}
public org.omg.CORBA.Object genObjectReference(ProxyInfo proxyInfo)
throws CORBAException {
1.7 +14 -9
openejb/modules/core/src/java/org/openejb/corba/AdapterStateless.java
Index: AdapterStateless.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/AdapterStateless.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AdapterStateless.java 12 Mar 2005 17:04:53 -0000 1.6
+++ AdapterStateless.java 15 Mar 2005 05:27:03 -0000 1.7
@@ -49,6 +49,7 @@
import org.omg.CORBA.ORB;
import org.omg.CORBA.Policy;
+import org.omg.CORBA.Any;
import org.omg.PortableServer.IdAssignmentPolicyValue;
import org.omg.PortableServer.ImplicitActivationPolicyValue;
import org.omg.PortableServer.LifespanPolicyValue;
@@ -61,6 +62,7 @@
import org.openejb.EJBContainer;
import org.openejb.corba.util.TieLoader;
+import org.openejb.corba.transaction.ServerTransactionPolicyFactory;
import org.openejb.proxy.ProxyInfo;
@@ -75,17 +77,20 @@
public AdapterStateless(EJBContainer container, ORB orb, POA parentPOA,
TieLoader tieLoader, Policy securityPolicy) throws CORBAException {
super(container, orb, parentPOA, tieLoader);
+ Any any = orb.create_any();
+ any.insert_Value(container.getRemoteTxPolicyConfig());
try {
Policy[] policies = new Policy[]{
securityPolicy,
-
parentPOA.create_lifespan_policy(LifespanPolicyValue.TRANSIENT),
-
parentPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY),
-
parentPOA.create_servant_retention_policy(ServantRetentionPolicyValue.RETAIN),
-
parentPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
-
parentPOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
+
orb.create_policy(ServerTransactionPolicyFactory.POLICY_TYPE, any),
+
homePOA.create_lifespan_policy(LifespanPolicyValue.TRANSIENT),
+
homePOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY),
+
homePOA.create_servant_retention_policy(ServantRetentionPolicyValue.RETAIN),
+
homePOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
+
homePOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
};
- poa =
parentPOA.create_POA(container.getContainerID().toString(),
parentPOA.the_POAManager(), policies);
+ poa = homePOA.create_POA(container.getContainerID().toString(),
homePOA.the_POAManager(), policies);
poa.the_POAManager().activate();
@@ -107,9 +112,9 @@
public void stop() throws CORBAException {
try {
- super.stop();
poa.deactivate_object(object_id);
poa.destroy(true, true);
+ super.stop();
} catch (ObjectNotActive e) {
throw new CORBAException(e);
} catch (WrongPolicy e) {
1.3 +36 -20
openejb/modules/core/src/java/org/openejb/corba/CSSBean.java
Index: CSSBean.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/CSSBean.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- CSSBean.java 12 Mar 2005 17:04:53 -0000 1.2
+++ CSSBean.java 15 Mar 2005 05:27:03 -0000 1.3
@@ -51,25 +51,27 @@
import EDU.oswego.cs.dl.util.concurrent.Executor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.transaction.context.TransactionContextManager;
+import org.omg.CORBA.Any;
import org.omg.CORBA.ORB;
-import org.omg.CORBA.UserException;
+import org.omg.CORBA.Policy;
import org.omg.CORBA.PolicyManager;
import org.omg.CORBA.PolicyManagerHelper;
-import org.omg.CORBA.Any;
-import org.omg.CORBA.Policy;
import org.omg.CORBA.SetOverrideType;
+import org.omg.CORBA.UserException;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
-
-import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.gbean.GBeanLifecycle;
-import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
-
+import org.openejb.corba.security.ClientPolicyFactory;
import org.openejb.corba.security.config.ConfigAdapter;
import org.openejb.corba.security.config.css.CSSConfig;
-import org.openejb.corba.security.ClientPolicyFactory;
+import org.openejb.corba.transaction.ClientTransactionPolicyConfig;
+import org.openejb.corba.transaction.ClientTransactionPolicyFactory;
+import
org.openejb.corba.transaction.nodistributedtransactions.NoDTxClientTransactionPolicyConfig;
/**
@@ -82,6 +84,7 @@
private final ClassLoader classLoader;
private final Executor threadPool;
private final ConfigAdapter configAdapter;
+ private final TransactionContextManager transactionContextManager;
private String description;
private CSSConfig nssConfig;
private CSSConfig cssConfig;
@@ -96,11 +99,13 @@
this.classLoader = null;
this.threadPool = null;
this.configAdapter = null;
+ this.transactionContextManager = null;
}
- public CSSBean(ClassLoader classLoader, Executor threadPool, String
configAdapter) throws ClassNotFoundException, IllegalAccessException,
InstantiationException {
+ public CSSBean(String configAdapter, Executor threadPool,
TransactionContextManager transactionContextManager, ClassLoader classLoader)
throws ClassNotFoundException, IllegalAccessException, InstantiationException {
this.classLoader = classLoader;
this.threadPool = threadPool;
+ this.transactionContextManager = transactionContextManager;
this.configAdapter = (ConfigAdapter)
classLoader.loadClass(configAdapter).newInstance();
}
@@ -181,8 +186,9 @@
return cssORB.string_to_object(beanIOR);
} catch (UserException ue) {
// do nothing
+ throw new RuntimeException(ue);
}
- return null;
+// return null;
}
public void doStart() throws Exception {
@@ -213,10 +219,14 @@
org.omg.CORBA.Object ref =
cssORB.resolve_initial_references("ORBPolicyManager");
PolicyManager pm = PolicyManagerHelper.narrow(ref);
- Any any = cssORB.create_any();
- any.insert_Value(cssConfig);
+ Any cssany = cssORB.create_any();
+ cssany.insert_Value(cssConfig);
+
+ Any txany = cssORB.create_any();
+ txany.insert_Value(buildClientTransactionPolicyConfig());
- pm.set_policy_overrides(new
Policy[]{cssORB.create_policy(ClientPolicyFactory.POLICY_TYPE, any)},
SetOverrideType.ADD_OVERRIDE);
+ pm.set_policy_overrides(new
Policy[]{cssORB.create_policy(ClientPolicyFactory.POLICY_TYPE, cssany),
+
cssORB.create_policy(ClientTransactionPolicyFactory.POLICY_TYPE, txany)},
SetOverrideType.ADD_OVERRIDE);
threadPool.execute(new Runnable() {
public void run() {
@@ -230,6 +240,10 @@
log.info("Started CORBA Client Security Server - " + description);
}
+ private ClientTransactionPolicyConfig
buildClientTransactionPolicyConfig() {
+ return new
NoDTxClientTransactionPolicyConfig(transactionContextManager);
+ }
+
public void doStop() throws Exception {
nssORB.shutdown(true);
@@ -246,8 +260,6 @@
static {
GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(CSSBean.class);
- infoFactory.addAttribute("classLoader", ClassLoader.class, false);
- infoFactory.addReference("ThreadPool", Executor.class,
NameFactory.GERONIMO_SERVICE);
infoFactory.addAttribute("configAdapter", String.class, true);
infoFactory.addAttribute("description", String.class, true);
infoFactory.addAttribute("nssConfig", CSSConfig.class, true);
@@ -259,7 +271,11 @@
infoFactory.addAttribute("cssProps", Properties.class, true);
infoFactory.addOperation("getHome", new Class[]{URI.class,
String.class});
- infoFactory.setConstructor(new String[]{"classLoader", "ThreadPool",
"configAdapter"});
+ infoFactory.addReference("ThreadPool", Executor.class,
NameFactory.GERONIMO_SERVICE);
+ infoFactory.addReference("TransactionContextManager",
TransactionContextManager.class, NameFactory.JTA_RESOURCE);
+ infoFactory.addAttribute("classLoader", ClassLoader.class, false);
+
+ infoFactory.setConstructor(new String[]{"configAdapter",
"ThreadPool", "TransactionContextManager", "classLoader"});
GBEAN_INFO = infoFactory.getBeanInfo();
}
1.5 +7 -3
openejb/modules/core/src/java/org/openejb/corba/TSSBean.java
Index: TSSBean.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/TSSBean.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TSSBean.java 12 Mar 2005 17:04:53 -0000 1.4
+++ TSSBean.java 15 Mar 2005 05:27:03 -0000 1.5
@@ -132,6 +132,11 @@
ref.addReferenceCollectionListener(this);
this.containers = containers;
+ for (Iterator iterator = ref.iterator(); iterator.hasNext();) {
+ Object o = iterator.next();
+ ReferenceCollectionEvent event = new
ReferenceCollectionEvent(null, o);
+ memberAdded(event);
+ }
}
public TieLoader getTieLoader() {
@@ -250,7 +255,6 @@
public void memberAdded(ReferenceCollectionEvent event) {
EJBContainer container = (EJBContainer) event.getMember();
-
containerMap.put(container.getContainerID(), container);
if (localPOA != null) {