Return-Path: Delivered-To: apmail-incubator-geronimo-cvs-archive@www.apache.org Received: (qmail 54447 invoked from network); 11 Jan 2004 08:28:18 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 11 Jan 2004 08:28:18 -0000 Received: (qmail 37678 invoked by uid 500); 11 Jan 2004 08:27:52 -0000 Delivered-To: apmail-incubator-geronimo-cvs-archive@incubator.apache.org Received: (qmail 37649 invoked by uid 500); 11 Jan 2004 08:27:52 -0000 Mailing-List: contact geronimo-cvs-help@incubator.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Reply-To: geronimo-dev@incubator.apache.org Delivered-To: mailing list geronimo-cvs@incubator.apache.org Received: (qmail 37636 invoked from network); 11 Jan 2004 08:27:52 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 11 Jan 2004 08:27:52 -0000 Received: (qmail 54433 invoked by uid 1712); 11 Jan 2004 08:28:15 -0000 Date: 11 Jan 2004 08:28:15 -0000 Message-ID: <20040111082815.54432.qmail@minotaur.apache.org> From: djencks@apache.org To: incubator-geronimo-cvs@apache.org Subject: cvs commit: incubator-geronimo/modules/core/src/test/org/apache/geronimo/connector/outbound/connectiontracking ConnectionTrackingCoordinatorTest.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N djencks 2004/01/11 00:28:15 Modified: modules/core/src/java/org/apache/geronimo/connector/outbound ConnectionManagerDeployment.java ConnectionTrackingInterceptor.java SubjectInterceptor.java modules/core/src/java/org/apache/geronimo/deployment/model/geronimo/connector GeronimoConnectionDefinition.java modules/core/src/java/org/apache/geronimo/xml/deployment GeronimoConnectorLoader.java modules/core/src/test/org/apache/geronimo/connector/outbound ConnectionManagerTest.java ConnectionManagerTestUtils.java modules/core/src/test/org/apache/geronimo/connector/outbound/connectiontracking ConnectionTrackingCoordinatorTest.java Added: modules/core/src/java/org/apache/geronimo/connector/outbound/security PasswordCredentialLoginModule.java PasswordCredentialRealm.java ResourcePrincipal.java Removed: modules/core/src/java/org/apache/geronimo/connector/outbound SecurityDomain.java SecurityDomainImpl.java Log: Convert from non-implemented SecurityDomain concept to RealmBridge concept Revision Changes Path 1.8 +18 -15 incubator-geronimo/modules/core/src/java/org/apache/geronimo/connector/outbound/ConnectionManagerDeployment.java Index: ConnectionManagerDeployment.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/connector/outbound/ConnectionManagerDeployment.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- ConnectionManagerDeployment.java 28 Dec 2003 19:31:16 -0000 1.7 +++ ConnectionManagerDeployment.java 11 Jan 2004 08:28:15 -0000 1.8 @@ -70,6 +70,7 @@ import org.apache.geronimo.kernel.service.GeronimoMBeanTarget; import org.apache.geronimo.kernel.service.GeronimoOperationInfo; import org.apache.geronimo.kernel.service.GeronimoParameterInfo; +import org.apache.geronimo.security.bridge.RealmBridge; /** * ConnectionManagerDeployment is an mbean that sets up a ProxyConnectionManager @@ -104,7 +105,7 @@ */ private String jndiName; //dependencies - private SecurityDomain securityDomain; + private RealmBridge realmBridge; private ConnectionTracker connectionTracker; //GeronimoMBeanTarget support. @@ -122,7 +123,7 @@ boolean useTransactions, int maxSize, int blockingTimeout, - SecurityDomain securityDomain, + RealmBridge realmBridge, String jndiName, ConnectionTracker connectionTracker) { this.useConnectionRequestInfo = useConnectionRequestInfo; @@ -132,7 +133,7 @@ this.useTransactions = useTransactions; this.maxSize = maxSize; this.blockingTimeout = blockingTimeout; - this.securityDomain = securityDomain; + this.realmBridge = realmBridge; this.jndiName = jndiName; this.connectionTracker = connectionTracker; setUpConnectionManager(null, null); @@ -166,14 +167,14 @@ * ConnectionHandleInterceptor * TransactionCachingInterceptor (useTransactions & useTransactionCaching) * TransactionEnlistingInterceptor (useTransactions) - * SubjectInterceptor (securityDomain != null) + * SubjectInterceptor (realmBridge != null) * SinglePoolConnectionInterceptor or MultiPoolConnectionInterceptor * LocalXAResourceInsertionInterceptor or XAResourceInsertionInterceptor (useTransactions (&localTransactions)) * MCFConnectionInterceptor */ private void setUpConnectionManager(String agentID, ObjectName connectionManagerName) { //check for consistency between attributes - if (securityDomain == null) { + if (realmBridge == null) { assert useSubject == false: "To use Subject in pooling, you need a SecurityDomain"; } @@ -201,8 +202,8 @@ maxSize, blockingTimeout); } - if (securityDomain != null) { - stack = new SubjectInterceptor(stack, securityDomain); + if (realmBridge != null) { + stack = new SubjectInterceptor(stack, realmBridge); } if (useTransactions) { stack = new TransactionEnlistingInterceptor(stack); @@ -216,7 +217,7 @@ stack, jndiName, connectionTracker, - securityDomain); + realmBridge); } cm = new ProxyConnectionManager(agentID, connectionManagerName, stack); @@ -231,7 +232,7 @@ */ public void doStop() { cm = null; - securityDomain = null; + realmBridge = null; connectionTracker = null; } @@ -280,12 +281,12 @@ this.maxSize = maxSize; } - public SecurityDomain getSecurityDomain() { - return securityDomain; + public RealmBridge getRealmBridge() { + return realmBridge; } - public void setSecurityDomain(SecurityDomain securityDomain) { - this.securityDomain = securityDomain; + public void setRealmBridge(RealmBridge realmBridge) { + this.realmBridge = realmBridge; } public boolean isUseConnectionRequestInfo() { @@ -313,6 +314,8 @@ this.useLocalTransactions = useLocalTransactions; } + //Even if realmBridge is present, if reauthentication is supported, you might not want to use + //the subject as pooling crieteria. public boolean isUseSubject() { return useSubject; } @@ -334,7 +337,7 @@ mBeanInfo.setTargetClass(ConnectionManagerDeployment.class); mBeanInfo.addEndpoint(new GeronimoMBeanEndpoint("ConnectionTracker", ConnectionTracker.class, ObjectName.getInstance("geronimo.connector:role=ConnectionTrackingCoordinator"), true)); - mBeanInfo.addEndpoint(new GeronimoMBeanEndpoint("SecurityDomain", SecurityDomain.class, ObjectName.getInstance("geronimo.connector:role=SecurityDomain"), false)); + mBeanInfo.addEndpoint(new GeronimoMBeanEndpoint("RealmBridge", RealmBridge.class, ObjectName.getInstance("geronimo.connector:role=SecurityDomain"), false)); mBeanInfo.addAttributeInfo(new GeronimoAttributeInfo("BlockingTimeout", true, true, "Milliseconds to wait for a connection to be returned")); mBeanInfo.addAttributeInfo(new GeronimoAttributeInfo("JndiName", true, true, "Name to use to identify this guy (needs refactoring of naming conventions)")); 1.4 +13 -6 incubator-geronimo/modules/core/src/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptor.java Index: ConnectionTrackingInterceptor.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/connector/outbound/ConnectionTrackingInterceptor.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ConnectionTrackingInterceptor.java 13 Dec 2003 23:33:53 -0000 1.3 +++ ConnectionTrackingInterceptor.java 11 Jan 2004 08:28:15 -0000 1.4 @@ -60,12 +60,15 @@ import javax.resource.spi.ManagedConnection; import javax.resource.spi.DissociatableManagedConnection; import javax.security.auth.Subject; +import javax.security.auth.login.LoginException; import java.util.Collection; import java.util.Set; import java.util.Iterator; import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTracker; +import org.apache.geronimo.security.bridge.RealmBridge; +import org.apache.geronimo.security.util.ContextManager; /** * ConnectionTrackingInterceptor.java handles communication with the @@ -82,17 +85,17 @@ private final ConnectionInterceptor next; private final String key; private final ConnectionTracker connectionTracker; - private final SecurityDomain securityDomain; + private final RealmBridge realmBridge; public ConnectionTrackingInterceptor( final ConnectionInterceptor next, final String key, final ConnectionTracker connectionTracker, - final SecurityDomain securityDomain) { + final RealmBridge realmBridge) { this.next = next; this.key = key; this.connectionTracker = connectionTracker; - this.securityDomain = securityDomain; + this.realmBridge = realmBridge; } /** @@ -134,16 +137,20 @@ //the spec says anything about this. //this is wrong } - if (securityDomain == null) { + if (realmBridge == null) { return; //this is wrong: need a "bouncing" subjectInterceptor } Subject currentSubject = null; try { - currentSubject = securityDomain.getSubject(); + currentSubject = realmBridge.mapSubject(ContextManager.getCurrentCaller()); } catch (SecurityException e) { throw new ResourceException("Can not obtain Subject for login", e); + } catch (LoginException e) { + throw new ResourceException("Can not obtain Subject for login", e); } + //TODO figure out which is right here + assert currentSubject != null; if (currentSubject == null) { //check to see if mci.getSubject() is null? return; 1.5 +11 -5 incubator-geronimo/modules/core/src/java/org/apache/geronimo/connector/outbound/SubjectInterceptor.java Index: SubjectInterceptor.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/connector/outbound/SubjectInterceptor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- SubjectInterceptor.java 10 Dec 2003 07:48:12 -0000 1.4 +++ SubjectInterceptor.java 11 Jan 2004 08:28:15 -0000 1.5 @@ -58,6 +58,10 @@ import javax.resource.ResourceException; import javax.security.auth.Subject; +import javax.security.auth.login.LoginException; + +import org.apache.geronimo.security.bridge.RealmBridge; +import org.apache.geronimo.security.util.ContextManager; /** * SubjectInterceptor.java @@ -70,20 +74,22 @@ public class SubjectInterceptor implements ConnectionInterceptor { private final ConnectionInterceptor next; - private final SecurityDomain securityDomain; + private final RealmBridge realmBridge; public SubjectInterceptor( final ConnectionInterceptor next, - final SecurityDomain securityDomain) { + final RealmBridge realmBridge) { this.next = next; - this.securityDomain = securityDomain; + this.realmBridge = realmBridge; } public void getConnection(ConnectionInfo connectionInfo) throws ResourceException { Subject currentSubject = null; try { - currentSubject = securityDomain.getSubject(); + currentSubject = realmBridge.mapSubject(ContextManager.getCurrentCaller()); } catch (SecurityException e) { + throw new ResourceException("Can not obtain Subject for login", e); + } catch (LoginException e) { throw new ResourceException("Can not obtain Subject for login", e); } assert currentSubject != null; 1.1 incubator-geronimo/modules/core/src/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModule.java Index: PasswordCredentialLoginModule.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 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 end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Geronimo" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * "Apache Geronimo", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``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 APACHE SOFTWARE FOUNDATION 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * * ==================================================================== */ package org.apache.geronimo.connector.outbound.security; import java.io.IOException; import java.util.Map; import javax.resource.spi.security.PasswordCredential; import javax.security.auth.Subject; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.callback.UnsupportedCallbackException; import javax.security.auth.login.LoginException; import javax.security.auth.spi.LoginModule; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/11 08:28:15 $ * * */ public class PasswordCredentialLoginModule implements LoginModule { private Subject subject; private CallbackHandler callbackHandler; private PasswordCredentialRealm passwordCredentialRealm; private String resourcePrincipalName; private String userName; private char[] password; public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { this.subject = subject; this.callbackHandler = callbackHandler; passwordCredentialRealm = (PasswordCredentialRealm)options.get(PasswordCredentialRealm.REALM_INSTANCE); if (passwordCredentialRealm == null) { throw new IllegalArgumentException("No realm supplied in options"); } } public boolean login() throws LoginException { if (passwordCredentialRealm == null || passwordCredentialRealm.managedConnectionFactory == null) { return false; } Callback[] callbacks = new Callback[3]; callbacks[0] = new NameCallback("Resource Principal"); callbacks[1] = new NameCallback("User name"); callbacks[2] = new PasswordCallback("Password", false); try { callbackHandler.handle(callbacks); } catch (IOException ioe) { throw (LoginException) new LoginException().initCause(ioe); } catch (UnsupportedCallbackException uce) { throw (LoginException) new LoginException().initCause(uce); } resourcePrincipalName = ((NameCallback) callbacks[0]).getName(); userName = ((NameCallback) callbacks[1]).getName(); password = ((PasswordCallback) callbacks[2]).getPassword(); return resourcePrincipalName != null && userName != null && password != null; } public boolean commit() throws LoginException { subject.getPrincipals().add(new ResourcePrincipal(resourcePrincipalName)); PasswordCredential passwordCredential = new PasswordCredential(userName, password); passwordCredential.setManagedConnectionFactory(passwordCredentialRealm.getManagedConnectionFactory()); subject.getPrivateCredentials().add(passwordCredential); return true; } public boolean abort() throws LoginException { subject = null; userName = null; password = null; return true; } public boolean logout() throws LoginException { subject = null; userName = null; password = null; return true; } } 1.1 incubator-geronimo/modules/core/src/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialRealm.java Index: PasswordCredentialRealm.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 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 end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Geronimo" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * "Apache Geronimo", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``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 APACHE SOFTWARE FOUNDATION 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * * ==================================================================== */ package org.apache.geronimo.connector.outbound.security; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.security.Principal; import javax.resource.spi.ManagedConnectionFactory; import javax.resource.spi.security.PasswordCredential; import javax.security.auth.login.AppConfigurationEntry; import org.apache.geronimo.kernel.service.GeronimoAttributeInfo; import org.apache.geronimo.kernel.service.GeronimoMBeanInfo; import org.apache.geronimo.security.GeronimoSecurityException; import org.apache.geronimo.security.SecurityRealm; import org.apache.regexp.RE; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/11 08:28:15 $ * * */ public class PasswordCredentialRealm implements SecurityRealm { private String realmName; ManagedConnectionFactory managedConnectionFactory; static final String REALM_INSTANCE = "org.apache.connector.outbound.security.PasswordCredentialRealm"; public static GeronimoMBeanInfo getGeronimoMBeanInfo() { GeronimoMBeanInfo mbeanInfo = new GeronimoMBeanInfo(); mbeanInfo.setTargetClass(PasswordCredentialRealm.class); mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Realm", true, true, "Name of this realm")); return mbeanInfo; } public void setRealmName(String realmName) { this.realmName = realmName; } public String getRealmName() { return realmName; } public Set getGroupPrincipals() throws GeronimoSecurityException { return null; } public Set getGroupPrincipals(RE regexExpression) throws GeronimoSecurityException { return null; } public Set getUserPrincipals() throws GeronimoSecurityException { return null; } public Set getUserPrincipals(RE regexExpression) throws GeronimoSecurityException { return null; } public void refresh() throws GeronimoSecurityException { } public AppConfigurationEntry[] getAppConfigurationEntry() { Map options = new HashMap(); options.put(REALM_INSTANCE, this); AppConfigurationEntry appConfigurationEntry = new AppConfigurationEntry(PasswordCredentialLoginModule.class.getName(), AppConfigurationEntry.LoginModuleControlFlag.REQUISITE, options); return new AppConfigurationEntry[] {appConfigurationEntry}; } public void setManagedConnectionFactory(ManagedConnectionFactory managedConnectionFactory) { this.managedConnectionFactory = managedConnectionFactory; } ManagedConnectionFactory getManagedConnectionFactory() { return managedConnectionFactory; } } 1.1 incubator-geronimo/modules/core/src/java/org/apache/geronimo/connector/outbound/security/ResourcePrincipal.java Index: ResourcePrincipal.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 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 end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Geronimo" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", * "Apache Geronimo", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``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 APACHE SOFTWARE FOUNDATION 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * * ==================================================================== */ package org.apache.geronimo.connector.outbound.security; import java.security.Principal; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/11 08:28:15 $ * * */ public class ResourcePrincipal implements Principal { private final String resourcePrincipal; public ResourcePrincipal(String resourcePrincipal) { this.resourcePrincipal = resourcePrincipal; } public String getName() { return resourcePrincipal; } } 1.3 +8 -8 incubator-geronimo/modules/core/src/java/org/apache/geronimo/deployment/model/geronimo/connector/GeronimoConnectionDefinition.java Index: GeronimoConnectionDefinition.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/deployment/model/geronimo/connector/GeronimoConnectionDefinition.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- GeronimoConnectionDefinition.java 13 Nov 2003 22:22:30 -0000 1.2 +++ GeronimoConnectionDefinition.java 11 Jan 2004 08:28:15 -0000 1.3 @@ -67,7 +67,7 @@ private String name; private GeronimoConnectionManagerFactory geronimoConnectionManagerFactory; - private String securityDomain; + private String realmBridge; public GeronimoConnectionDefinition(ConnectionDefinition connectionDefinition) { setManagedConnectionFactoryClass(connectionDefinition.getManagedConnectionFactoryClass()); @@ -107,17 +107,17 @@ } /** - * @return Returns the securityDomain. + * @return Returns the realmBridge. */ - public String getSecurityDomain() { - return securityDomain; + public String getRealmBridge() { + return realmBridge; } /** - * @param securityDomain The securityDomain to set. + * @param realmBridge The realmBridge to set. */ - public void setSecurityDomain(String securityDomain) { - this.securityDomain = securityDomain; + public void setRealmBridge(String realmBridge) { + this.realmBridge = realmBridge; } } 1.2 +56 -56 incubator-geronimo/modules/core/src/java/org/apache/geronimo/xml/deployment/GeronimoConnectorLoader.java Index: GeronimoConnectorLoader.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/xml/deployment/GeronimoConnectorLoader.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- GeronimoConnectorLoader.java 11 Nov 2003 21:11:58 -0000 1.1 +++ GeronimoConnectorLoader.java 11 Jan 2004 08:28:15 -0000 1.2 @@ -72,20 +72,20 @@ /** * Knows how to load a set of POJOs from a DOM representing a ra.xml * deployment descriptor. - * + * * @version $Revision$ $Date$ */ public class GeronimoConnectorLoader { - + private GeronimoConnectorLoader() { } - + public static GeronimoConnectorDocument load(Document doc, ConnectorDocument connectorDocument) { Element root = doc.getDocumentElement(); if (!"connector".equals(root.getTagName())) { throw new IllegalArgumentException("Document is not a ra instance"); } - + Connector connector = connectorDocument.getConnector(); GeronimoConnector geronimoConnector = new GeronimoConnector(connector); geronimoConnector.setResourceAdapter(loadResourceAdapter(root, connector)); @@ -97,43 +97,43 @@ private static GeronimoResourceAdapter loadResourceAdapter(Element econ, Connector connector) { Element era = LoaderUtil.getChild(econ, "resourceadapter"); - if( null == era ) { + if (null == era) { throw new IllegalArgumentException("No resourceadapter element"); } ResourceAdapter resourceAdapter = connector.getResourceAdapter(); - GeronimoResourceAdapter ra = new GeronimoResourceAdapter(resourceAdapter); - ra.setName(LoaderUtil.getChildContent(era, "name")); - ConfigProperty[] configProperty = ra.getConfigProperty(); - loadConfigSettings(era, configProperty); - ra.setBootstrapContext(LoaderUtil.getChildContent(era, "bootstrapcontext-name")); - ra.setOutboundResourceAdapter(loadOutboundResourceadapter(era, resourceAdapter.getOutboundResourceAdapter())); - ra.setInboundResourceAdapter(loadInboundResourceadapter(era, resourceAdapter.getInboundResourceAdapter())); - ra.setAdminObject(loadAdminobject(era, resourceAdapter.getAdminObject())); - + GeronimoResourceAdapter ra = new GeronimoResourceAdapter(resourceAdapter); + ra.setName(LoaderUtil.getChildContent(era, "name")); + ConfigProperty[] configProperty = ra.getConfigProperty(); + loadConfigSettings(era, configProperty); + ra.setBootstrapContext(LoaderUtil.getChildContent(era, "bootstrapcontext-name")); + ra.setOutboundResourceAdapter(loadOutboundResourceadapter(era, resourceAdapter.getOutboundResourceAdapter())); + ra.setInboundResourceAdapter(loadInboundResourceadapter(era, resourceAdapter.getInboundResourceAdapter())); + ra.setAdminObject(loadAdminobject(era, resourceAdapter.getAdminObject())); + return ra; } - + private static void loadConfigSettings(Element era, ConfigProperty[] configProperty) { Element[] roots = LoaderUtil.getChildren(era, "config-property-setting"); - for(int i = 0; i < roots.length; i++) + for (int i = 0; i < roots.length; i++) outer: { - Element root = roots[i]; - String name = root.getAttribute("name"); - for (int j = 0; j < configProperty.length; j++) { - if (configProperty[j].getConfigPropertyName().equals(name)) { - configProperty[j].setConfigPropertyValue(LoaderUtil.getContent(root)); - break outer; + Element root = roots[i]; + String name = root.getAttribute("name"); + for (int j = 0; j < configProperty.length; j++) { + if (configProperty[j].getConfigPropertyName().equals(name)) { + configProperty[j].setConfigPropertyValue(LoaderUtil.getContent(root)); + break outer; + } } + throw new IllegalArgumentException("No such property as " + name); } - throw new IllegalArgumentException("No such property as " + name); - } } private static ConfigProperty[] loadConfigPropertySettings(Element era) { Element[] roots = LoaderUtil.getChildren(era, "config-property-setting"); ConfigProperty[] configProperties = new ConfigProperty[roots.length]; - for(int i = 0; i < roots.length; i++) { + for (int i = 0; i < roots.length; i++) { Element root = roots[i]; configProperties[i] = new ConfigProperty(); configProperties[i].setConfigPropertyName(root.getAttribute("name")); @@ -155,27 +155,27 @@ private static GeronimoConnectionDefinition[] loadConnectionDefinition(Element ecd, ConnectionDefinition[] connectionDefinition) { Element[] roots = LoaderUtil.getChildren(ecd, "connection-definition"); GeronimoConnectionDefinition[] conDefinition = new GeronimoConnectionDefinition[roots.length]; - for(int i = 0; i < roots.length; i++) + for (int i = 0; i < roots.length; i++) loaded: { - Element root = roots[i]; - String connectionFactoryInterface = LoaderUtil.getChildContent(root, "connectionfactory-interface"); - for (int j = 0; j < connectionDefinition.length; j++) { - if (connectionFactoryInterface.equals(connectionDefinition[j].getConnectionFactoryInterface())) { - conDefinition[i] = new GeronimoConnectionDefinition(connectionDefinition[j]); - ConfigProperty[] configProperty = conDefinition[i].getConfigProperty(); - loadConfigSettings(root, configProperty); - conDefinition[i].setName(LoaderUtil.getChildContent(root, "name")); - GeronimoConnectionManagerFactory connectionManagerFactory = new GeronimoConnectionManagerFactory(); - Element ecmf = LoaderUtil.getChild(root, "connectionmanager-factory"); - connectionManagerFactory.setConnectionManagerFactoryDescriptor(LoaderUtil.getChildContent(ecmf, "connectionmanagerfactory-descriptor")); - connectionManagerFactory.setConfigProperty(loadConfigPropertySettings(ecmf)); - conDefinition[i].setGeronimoConnectionManagerFactory(connectionManagerFactory); - break loaded; + Element root = roots[i]; + String connectionFactoryInterface = LoaderUtil.getChildContent(root, "connectionfactory-interface"); + for (int j = 0; j < connectionDefinition.length; j++) { + if (connectionFactoryInterface.equals(connectionDefinition[j].getConnectionFactoryInterface())) { + conDefinition[i] = new GeronimoConnectionDefinition(connectionDefinition[j]); + ConfigProperty[] configProperty = conDefinition[i].getConfigProperty(); + loadConfigSettings(root, configProperty); + conDefinition[i].setName(LoaderUtil.getChildContent(root, "name")); + GeronimoConnectionManagerFactory connectionManagerFactory = new GeronimoConnectionManagerFactory(); + Element ecmf = LoaderUtil.getChild(root, "connectionmanager-factory"); + connectionManagerFactory.setConnectionManagerFactoryDescriptor(LoaderUtil.getChildContent(ecmf, "connectionmanagerfactory-descriptor")); + connectionManagerFactory.setConfigProperty(loadConfigPropertySettings(ecmf)); + conDefinition[i].setGeronimoConnectionManagerFactory(connectionManagerFactory); + break loaded; + } } + throw new IllegalArgumentException("No such connectionfactory-interface as " + connectionFactoryInterface); } - throw new IllegalArgumentException("No such connectionfactory-interface as " + connectionFactoryInterface); - } return conDefinition; } @@ -187,28 +187,28 @@ Element root = LoaderUtil.getChild(era, "inbound-resourceadapter"); GeronimoInboundResourceAdapter ira = new GeronimoInboundResourceAdapter(); ira.setMessageAdapter(loadMessageAdapter(root, inboundResourceAdapter.getMessageAdapter())); - return ira; + return ira; } - + private static GeronimoMessageAdapter loadMessageAdapter(Element eira, MessageAdapter messageAdapter) { - GeronimoMessageAdapter ma = null; + GeronimoMessageAdapter ma = null; Element root = LoaderUtil.getChild(eira, "messageadapter"); - if ( null != root && null != messageAdapter ) { + if (null != root && null != messageAdapter) { ma = new GeronimoMessageAdapter(); ma.setMessageListener(loadMessagelistener(root, messageAdapter.getMessageListener())); } - return ma; + return ma; } private static GeronimoMessageListener[] loadMessagelistener(Element ema, MessageListener[] messageListenerType) { Element[] roots = LoaderUtil.getChildren(ema, "messagelistener"); - GeronimoMessageListener[] messageListener = new GeronimoMessageListener[roots.length]; - for(int i = 0; i < roots.length; i++) { + GeronimoMessageListener[] messageListener = new GeronimoMessageListener[roots.length]; + for (int i = 0; i < roots.length; i++) { Element root = roots[i]; String messageListenerTypeName = LoaderUtil.getChildContent(root, "messagelistener-type"); for (int j = 0; j < messageListenerType.length; j++) { if (messageListenerType[j].getMessageListenerType().equals(messageListenerTypeName)) { - messageListener[i] = new GeronimoMessageListener(messageListenerType[j]); + messageListener[i] = new GeronimoMessageListener(messageListenerType[j]); messageListener[i].setMessageEndpointFactoryName(LoaderUtil.getChildContent(root, "message-endpoint-factory")); break; } @@ -216,17 +216,17 @@ } return messageListener; } - - + + private static AdminObject[] loadAdminobject(Element era, AdminObject[] adminObjectType) { Element[] roots = LoaderUtil.getChildren(era, "adminobject"); AdminObject[] adminObject = new AdminObject[roots.length]; - for(int i = 0; i < roots.length; i++) { + for (int i = 0; i < roots.length; i++) { Element root = roots[i]; adminObject[i] = new AdminObject(); adminObject[i].setAdminObjectInterface(LoaderUtil.getChildContent(root, "adminobject-interface")); adminObject[i].setAdminObjectClass(LoaderUtil.getChildContent(root, "adminobject-class")); - for (int j = 0; j < adminObjectType.length; j++ ) { + for (int j = 0; j < adminObjectType.length; j++) { if (adminObjectType[j].getAdminObjectInterface().equals(adminObject[i].getAdminObjectInterface()) && adminObjectType[j].getAdminObjectClass().equals(adminObject[i].getAdminObjectClass())) { adminObject[i].setConfigProperty( @@ -238,5 +238,5 @@ } return adminObject; } - + } 1.2 +14 -17 incubator-geronimo/modules/core/src/test/org/apache/geronimo/connector/outbound/ConnectionManagerTest.java Index: ConnectionManagerTest.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/test/org/apache/geronimo/connector/outbound/ConnectionManagerTest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ConnectionManagerTest.java 23 Dec 2003 17:34:35 -0000 1.1 +++ ConnectionManagerTest.java 11 Jan 2004 08:28:15 -0000 1.2 @@ -56,26 +56,23 @@ package org.apache.geronimo.connector.outbound; -import java.util.Set; import java.util.HashSet; +import java.util.Set; -import javax.transaction.TransactionManager; -import javax.transaction.Transaction; -import javax.transaction.Status; -import javax.resource.spi.ConnectionManager; import javax.security.auth.Subject; +import javax.transaction.TransactionManager; import junit.framework.TestCase; +import org.apache.geronimo.connector.mock.MockConnection; +import org.apache.geronimo.connector.mock.MockConnectionFactory; +import org.apache.geronimo.connector.mock.MockManagedConnection; +import org.apache.geronimo.connector.mock.MockManagedConnectionFactory; +import org.apache.geronimo.connector.mock.MockXAResource; import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinator; import org.apache.geronimo.connector.outbound.connectiontracking.defaultimpl.DefaultComponentContext; -import org.apache.geronimo.connector.outbound.connectiontracking.defaultimpl.DefaultTransactionContext; -import org.apache.geronimo.connector.outbound.connectiontracking.defaultimpl.DefaultInterceptor; import org.apache.geronimo.connector.outbound.connectiontracking.defaultimpl.DefaultComponentInterceptor; -import org.apache.geronimo.connector.mock.MockManagedConnectionFactory; -import org.apache.geronimo.connector.mock.MockConnectionFactory; -import org.apache.geronimo.connector.mock.MockConnection; -import org.apache.geronimo.connector.mock.MockXAResource; -import org.apache.geronimo.connector.mock.MockManagedConnection; +import org.apache.geronimo.connector.outbound.connectiontracking.defaultimpl.DefaultInterceptor; +import org.apache.geronimo.security.bridge.RealmBridge; import org.apache.geronimo.transaction.manager.TransactionManagerImpl; /** @@ -84,7 +81,7 @@ * @version $Revision$ $Date$ * * */ -public class ConnectionManagerTest extends TestCase implements DefaultInterceptor, SecurityDomain { +public class ConnectionManagerTest extends TestCase implements DefaultInterceptor, RealmBridge { protected boolean useConnectionRequestInfo = false; protected boolean useSubject = true; @@ -95,7 +92,7 @@ protected int blockingTimeout = 100; protected String jndiName = "testCF"; //dependencies - protected SecurityDomain securityDomain = this; + protected RealmBridge realmBridge = this; protected ConnectionTrackingCoordinator connectionTrackingCoordinator; protected TransactionManager transactionManager; @@ -120,7 +117,7 @@ useTransactions, maxSize, blockingTimeout, - securityDomain, + realmBridge, jndiName, connectionTrackingCoordinator); connectionFactory = (MockConnectionFactory)connectionManagerDeployment.createConnectionFactory(mockManagedConnectionFactory); @@ -176,7 +173,7 @@ return null; } - public Subject getSubject() { + public Subject mapSubject(Subject sourceSubject) { return subject; } } 1.3 +5 -4 incubator-geronimo/modules/core/src/test/org/apache/geronimo/connector/outbound/ConnectionManagerTestUtils.java Index: ConnectionManagerTestUtils.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/test/org/apache/geronimo/connector/outbound/ConnectionManagerTestUtils.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ConnectionManagerTestUtils.java 13 Dec 2003 23:33:54 -0000 1.2 +++ ConnectionManagerTestUtils.java 11 Jan 2004 08:28:15 -0000 1.3 @@ -74,6 +74,7 @@ import junit.framework.TestCase; import org.apache.geronimo.connector.outbound.connectiontracking.defaultimpl.DefaultTransactionContext; +import org.apache.geronimo.security.bridge.RealmBridge; /** * @@ -81,7 +82,7 @@ * @version $Revision$ $Date$ * * */ -public class ConnectionManagerTestUtils extends TestCase implements SecurityDomain, ConnectionInterceptor { +public class ConnectionManagerTestUtils extends TestCase implements RealmBridge, ConnectionInterceptor { protected Subject subject; protected ConnectionInfo obtainedConnectionInfo; protected ConnectionInfo returnedConnectionInfo; @@ -100,8 +101,8 @@ public void testNothing() throws Exception { } - //SecurityDomain implementation - public Subject getSubject() { + //RealmBridge implementation + public Subject mapSubject(Subject sourceSubject) { return subject; } 1.3 +8 -8 incubator-geronimo/modules/core/src/test/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorTest.java Index: ConnectionTrackingCoordinatorTest.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/core/src/test/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorTest.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ConnectionTrackingCoordinatorTest.java 10 Dec 2003 09:39:46 -0000 1.2 +++ ConnectionTrackingCoordinatorTest.java 11 Jan 2004 08:28:15 -0000 1.3 @@ -56,23 +56,23 @@ package org.apache.geronimo.connector.outbound.connectiontracking; -import java.util.Set; import java.util.HashSet; import java.util.Map; +import java.util.Set; import javax.security.auth.Subject; -import javax.transaction.TransactionManager; import javax.transaction.Transaction; +import javax.transaction.TransactionManager; import junit.framework.TestCase; +import org.apache.geronimo.connector.outbound.ConnectionInfo; import org.apache.geronimo.connector.outbound.ConnectionTrackingInterceptor; -import org.apache.geronimo.connector.outbound.SecurityDomain; import org.apache.geronimo.connector.outbound.ConnectorComponentContext; -import org.apache.geronimo.connector.outbound.ConnectionInfo; -import org.apache.geronimo.connector.outbound.ManagedConnectionInfo; import org.apache.geronimo.connector.outbound.ConnectorTransactionContext; +import org.apache.geronimo.connector.outbound.ManagedConnectionInfo; import org.apache.geronimo.connector.outbound.connectiontracking.defaultimpl.DefaultComponentContext; import org.apache.geronimo.connector.outbound.connectiontracking.defaultimpl.DefaultTransactionContext; +import org.apache.geronimo.security.bridge.RealmBridge; import org.apache.geronimo.transaction.manager.TransactionManagerImpl; /** @@ -82,7 +82,7 @@ * * */ public class ConnectionTrackingCoordinatorTest extends TestCase - implements SecurityDomain { + implements RealmBridge { private static final String name1 = "foo"; private static final String name2 = "bar"; @@ -194,7 +194,7 @@ assertNull("Expected no transactionContext", availableTransactionContext2); } - public Subject getSubject() { + public Subject mapSubject(Subject sourceSubject) { return subject; } }