You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ge...@apache.org on 2010/02/25 03:12:59 UTC
svn commit: r916086 - in
/geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster:
container/stateless/ deployment/
Author: genspring
Date: Thu Feb 25 02:12:59 2010
New Revision: 916086
URL: http://svn.apache.org/viewvc?rev=916086&view=rev
Log:
GERONIMO-5059 unicast-based support failover for stateless session bean. adding missed files.
Added:
geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/container/stateless/
geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/container/stateless/ClusteredStatelessContainer.java (with props)
geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/deployment/
geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/deployment/ClusteredDeployment.java (with props)
Added: geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/container/stateless/ClusteredStatelessContainer.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/container/stateless/ClusteredStatelessContainer.java?rev=916086&view=auto
==============================================================================
--- geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/container/stateless/ClusteredStatelessContainer.java (added)
+++ geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/container/stateless/ClusteredStatelessContainer.java Thu Feb 25 02:12:59 2010
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.geronimo.openejb.cluster.container.stateless;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.geronimo.clustering.SessionManager;
+import org.apache.geronimo.clustering.wadi.WADISessionManager;
+import org.apache.geronimo.openejb.cluster.infra.NetworkConnectorTracker;
+import org.apache.geronimo.openejb.cluster.infra.NetworkConnectorTrackerException;
+import org.apache.geronimo.openejb.cluster.infra.SessionManagerTracker;
+import org.apache.openejb.ClusteredRPCContainer;
+import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.core.stateless.StatelessContainer;
+import org.apache.openejb.spi.SecurityService;
+import org.codehaus.wadi.core.manager.Manager;
+import org.codehaus.wadi.servicespace.ServiceRegistry;
+import org.codehaus.wadi.servicespace.ServiceSpace;
+
+/**
+ *
+ * @version $Rev:$ $Date:$
+ */
+// todo Consider replacing this class with an RpcContainerWrapper subclass
+public class ClusteredStatelessContainer extends StatelessContainer implements SessionManagerTracker, ClusteredRPCContainer {
+ private final Map<Object, Manager> deploymentIdToManager;
+ private final Map<Object, NetworkConnectorTracker> deploymentIdToNetworkConnectorTracker;
+
+ public ClusteredStatelessContainer(Object id, SecurityService securityService, int timeOut, int poolSize, boolean strictPooling) throws OpenEJBException {
+ super(id, securityService, timeOut, poolSize, strictPooling);
+
+ deploymentIdToManager = new ConcurrentHashMap<Object, Manager>();
+ deploymentIdToNetworkConnectorTracker = new ConcurrentHashMap<Object, NetworkConnectorTracker>();
+ }
+
+ public void addSessionManager(Object deploymentId, SessionManager sessionManager) {
+
+
+ WADISessionManager wadiSessionManager = (WADISessionManager) sessionManager;
+
+ Manager manager = wadiSessionManager.getManager();
+
+ deploymentIdToManager.put(deploymentId, manager);
+
+
+ ServiceSpace serviceSpace = wadiSessionManager.getServiceSpace();
+ ServiceRegistry serviceRegistry = serviceSpace.getServiceRegistry();
+ NetworkConnectorTracker networkConnectorTracker;
+ try {
+ networkConnectorTracker = (NetworkConnectorTracker) serviceRegistry.getStartedService(NetworkConnectorTracker.NAME);
+ } catch (Exception e) {
+ throw new IllegalStateException("Should never occur" ,e);
+ }
+
+ deploymentIdToNetworkConnectorTracker.put(deploymentId, networkConnectorTracker);
+
+ }
+
+ public void removeSessionManager(Object deploymentId, SessionManager sessionManager) {
+
+ deploymentIdToManager.remove(deploymentId);
+
+ deploymentIdToNetworkConnectorTracker.remove(deploymentId);
+
+ }
+
+ public URI[] getLocations(DeploymentInfo deploymentInfo) {
+ Object deploymentID = deploymentInfo.getDeploymentID();
+ NetworkConnectorTracker networkConnectorTracker;
+
+ networkConnectorTracker = deploymentIdToNetworkConnectorTracker.get(deploymentID);
+
+ if (null == networkConnectorTracker) {
+ return null;
+ }
+
+ Set<URI> connectorURIs;
+ try {
+ connectorURIs = networkConnectorTracker.getConnectorURIs(deploymentID);
+ } catch (NetworkConnectorTrackerException e) {
+ return null;
+ }
+ return connectorURIs.toArray(new URI[connectorURIs.size()]);
+ }
+
+}
Propchange: geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/container/stateless/ClusteredStatelessContainer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/deployment/ClusteredDeployment.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/deployment/ClusteredDeployment.java?rev=916086&view=auto
==============================================================================
--- geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/deployment/ClusteredDeployment.java (added)
+++ geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/deployment/ClusteredDeployment.java Thu Feb 25 02:12:59 2010
@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.geronimo.openejb.cluster.deployment;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.naming.Context;
+import javax.security.auth.login.LoginException;
+
+import org.apache.geronimo.clustering.SessionManager;
+import org.apache.geronimo.connector.outbound.connectiontracking.TrackedConnectionAssociator;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.naming.enc.EnterpriseNamingContext;
+import org.apache.geronimo.openejb.EjbDeployment;
+import org.apache.geronimo.openejb.EjbDeploymentGBean;
+import org.apache.geronimo.openejb.OpenEjbSystem;
+import org.apache.geronimo.openejb.cluster.infra.SessionManagerTracker;
+import org.apache.geronimo.security.jacc.RunAsSource;
+import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
+import org.apache.openejb.Container;
+import org.apache.openejb.core.CoreDeploymentInfo;
+
+/**
+ *
+ * @version $Rev:$ $Date:$
+ */
+public class ClusteredDeployment extends EjbDeployment {
+
+ private final SessionManager sessionManager;
+
+ public ClusteredDeployment() throws LoginException {
+ sessionManager = null;
+ }
+
+ public ClusteredDeployment(String objectName,
+ String deploymentId,
+ String ejbName,
+ String homeInterfaceName,
+ String remoteInterfaceName,
+ String localHomeInterfaceName,
+ String localInterfaceName,
+ String serviceEndpointInterfaceName,
+ String beanClassName,
+ ClassLoader classLoader,
+ boolean securityEnabled,
+ String defaultRole,
+ String runAsRole,
+ RunAsSource runAsSource,
+ Map componentContext,
+ Set unshareableResources,
+ Set applicationManagedSecurityResources,
+ TrackedConnectionAssociator trackedConnectionAssociator,
+ GeronimoTransactionManager transactionManager,
+ OpenEjbSystem openEjbSystem,
+ SessionManager sessionManager,
+ Kernel kernel) throws Exception {
+ this(objectName,
+ deploymentId,
+ ejbName,
+ homeInterfaceName,
+ remoteInterfaceName,
+ localHomeInterfaceName,
+ localInterfaceName,
+ serviceEndpointInterfaceName,
+ beanClassName,
+ classLoader,
+ securityEnabled,
+ defaultRole,
+ runAsRole,
+ runAsSource,
+ EnterpriseNamingContext.createEnterpriseNamingContext(componentContext,
+ transactionManager,
+ kernel,
+ classLoader),
+ unshareableResources,
+ applicationManagedSecurityResources,
+ trackedConnectionAssociator,
+ openEjbSystem,
+ sessionManager);
+ }
+
+ public ClusteredDeployment(String objectName,
+ String deploymentId,
+ String ejbName,
+ String homeInterfaceName,
+ String remoteInterfaceName,
+ String localHomeInterfaceName,
+ String localInterfaceName,
+ String serviceEndpointInterfaceName,
+ String beanClassName,
+ ClassLoader classLoader,
+ boolean securityEnabled,
+ String defaultRole,
+ String runAsRole,
+ RunAsSource runAsSource,
+ Context componentContext,
+ Set unshareableResources,
+ Set applicationManagedSecurityResources,
+ TrackedConnectionAssociator trackedConnectionAssociator,
+ OpenEjbSystem openEjbSystem,
+ SessionManager sessionManager) throws LoginException {
+ super(objectName,
+ deploymentId,
+ ejbName,
+ homeInterfaceName,
+ remoteInterfaceName,
+ localHomeInterfaceName,
+ localInterfaceName,
+ serviceEndpointInterfaceName,
+ beanClassName,
+ classLoader,
+ securityEnabled,
+ defaultRole,
+ runAsRole,
+ runAsSource,
+ componentContext,
+ unshareableResources,
+ applicationManagedSecurityResources,
+ trackedConnectionAssociator,
+ openEjbSystem);
+ if (null == sessionManager) {
+ throw new IllegalArgumentException("sessionManager is required");
+ }
+ this.sessionManager = sessionManager;
+ }
+
+ @Override
+ protected EjbDeployment initialize(CoreDeploymentInfo deploymentInfo) {
+ super.initialize(deploymentInfo);
+
+ Container container = deploymentInfo.getContainer();
+ if (null == container) {
+ throw new IllegalStateException("Container not assigned to deployment " + deploymentId);
+ }
+ if (!(container instanceof SessionManagerTracker)) {
+ throw new IllegalStateException("Container for deployment [" + deploymentId + "] is not a ["
+ + SessionManagerTracker.class.getName() + "]. It is a [" + container.getClass().getName() + "]");
+ }
+ SessionManagerTracker sessionManagerTracker = (SessionManagerTracker) container;
+ sessionManagerTracker.addSessionManager(deploymentId, sessionManager);
+
+ return this;
+ }
+
+ @Override
+ protected void destroy() {
+ CoreDeploymentInfo info = deploymentInfo.get();
+ if (null != info) {
+ Container container = info.getContainer();
+ if (null != container) {
+ SessionManagerTracker sessionManagerTracker = (SessionManagerTracker) container;
+ sessionManagerTracker.removeSessionManager(deploymentId, sessionManager);
+ }
+ }
+
+ super.destroy();
+ }
+
+ public static final GBeanInfo GBEAN_INFO;
+
+ public static final String GBEAN_REF_SESSION_MANAGER = "SessionManager";
+
+ static {
+ GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic(ClusteredDeployment.class,
+ ClusteredDeployment.class,
+ EjbDeploymentGBean.GBEAN_INFO,
+ NameFactory.STATEFUL_SESSION_BEAN);
+
+ builder.addReference(GBEAN_REF_SESSION_MANAGER, SessionManager.class, GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
+
+ builder.setConstructor(new String[] { "objectName",
+ "deploymentId",
+ "ejbName",
+
+ "homeInterfaceName",
+ "remoteInterfaceName",
+ "localHomeInterfaceName",
+ "localInterfaceName",
+ "serviceEndpointInterfaceName",
+ "beanClassName",
+ "classLoader",
+
+ "securityEnabled",
+ "defaultRole",
+ "runAsRole",
+ "RunAsSource",
+
+ "componentContextMap",
+
+ "unshareableResources",
+ "applicationManagedSecurityResources",
+ "TrackedConnectionAssociator",
+ "TransactionManager",
+
+ "OpenEjbSystem",
+ GBEAN_REF_SESSION_MANAGER,
+
+ "kernel"
+ });
+
+ GBEAN_INFO = builder.getBeanInfo();
+ }
+
+ public static GBeanInfo getGBeanInfo() {
+ return GBEAN_INFO;
+ }
+
+}
Propchange: geronimo/server/branches/2.2/plugins/openejb/geronimo-openejb-clustering-wadi/src/main/java/org/apache/geronimo/openejb/cluster/deployment/ClusteredDeployment.java
------------------------------------------------------------------------------
svn:eol-style = native