You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2008/10/20 20:23:42 UTC

svn commit: r706357 [3/13] - in /geronimo/server/trunk/plugins/connector-1_6: ./ client-transaction-1_6/ client-transaction-1_6/src/ client-transaction-1_6/src/main/ client-transaction-1_6/src/main/history/ client-transaction-1_6/src/main/plan/ client-...

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorGBean.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorGBean.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorGBean.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,71 @@
+/**
+ *  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.connector.outbound.connectiontracking;
+
+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.manager.MonitorableTransactionManager;
+
+/**
+ * 
+ * @version $Revision$
+ */
+public class ConnectionTrackingCoordinatorGBean extends ConnectionTrackingCoordinator implements GBeanLifecycle {
+    private final MonitorableTransactionManager monitorableTm;
+    private final GeronimoTransactionListener listener;
+
+    public ConnectionTrackingCoordinatorGBean(MonitorableTransactionManager monitorableTm, boolean lazyConnect) {
+        super(lazyConnect);
+        this.monitorableTm = monitorableTm;
+        listener = new GeronimoTransactionListener(this);
+    }
+
+    public void doStart() throws Exception {
+        monitorableTm.addTransactionAssociationListener(listener);
+    }
+
+    public void doStop() throws Exception {
+        monitorableTm.removeTransactionAssociationListener(listener);
+    }
+
+    public void doFail() {
+        monitorableTm.removeTransactionAssociationListener(listener);
+    }
+
+    public final static GBeanInfo GBEAN_INFO;
+
+    static {
+        GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(ConnectionTrackingCoordinatorGBean.class, NameFactory.JCA_CONNECTION_TRACKER);
+
+        infoFactory.addReference("TransactionManager", MonitorableTransactionManager.class, NameFactory.JTA_RESOURCE);
+        infoFactory.addAttribute("lazyConnect", boolean.class, true);
+
+        infoFactory.addInterface(TrackedConnectionAssociator.class);
+        infoFactory.addInterface(ConnectionTracker.class);
+
+        infoFactory.setConstructor(new String[] {"TransactionManager", "lazyConnect"});
+        GBEAN_INFO = infoFactory.getBeanInfo();
+    }
+
+    public static GBeanInfo getGBeanInfo() {
+        return GBEAN_INFO;
+    }
+
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorGBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorGBean.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/connectiontracking/ConnectionTrackingCoordinatorGBean.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/CallerIdentityPasswordCredentialLoginModule.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/CallerIdentityPasswordCredentialLoginModule.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/CallerIdentityPasswordCredentialLoginModule.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/CallerIdentityPasswordCredentialLoginModule.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,129 @@
+/**
+ *  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.connector.outbound.security;
+
+import java.io.IOException;
+import java.util.Map;
+
+import javax.resource.spi.ManagedConnectionFactory;
+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;
+
+/**
+ * CallerIdentityPasswordCredentialLoginModule uses the username and password from the CallbackHandler
+ * and a ManagedConnectionFactory from the Options to construct a j2ca PasswordCredential that can be
+ * used for j2ca container managed security.
+ *
+ * This login module does not check credentials so it should never be able to cause a login to succeed.
+ * Therefore the lifecycle methods must return false to indicate success or throw a LoginException to indicate failure.
+ *
+ * @version $Rev$ $Date$
+ *
+ * */
+public class CallerIdentityPasswordCredentialLoginModule implements LoginModule {
+
+    private Subject subject;
+    private CallbackHandler callbackHandler;
+
+    private ManagedConnectionFactory managedConnectionFactory;
+
+    private String resourcePrincipalName;
+    private String userName;
+    private char[] password;
+    private ResourcePrincipal resourcePrincipal;
+    private PasswordCredential passwordCredential;
+
+    public void initialize(Subject subject, CallbackHandler callbackHandler,
+            Map sharedState, Map options) {
+        this.subject = subject;
+        this.callbackHandler = callbackHandler;
+        managedConnectionFactory = (ManagedConnectionFactory) options.get(PasswordCredentialLoginModuleWrapper.MANAGED_CONNECTION_FACTORY_OPTION);
+        if (managedConnectionFactory == null) {
+            throw new IllegalArgumentException("No ManagedConnectionFactory supplied in options");
+        }
+    }
+
+    public boolean login() throws LoginException {
+        if (managedConnectionFactory == null) {
+            return false;
+        }
+        Callback[] callbacks = new Callback[2];
+
+        callbacks[0] = new NameCallback("User name");
+        callbacks[1] = 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[0]).getName();
+        password = ((PasswordCallback) callbacks[1]).getPassword();
+        return false;
+    }
+
+    public boolean commit() throws LoginException {
+        if (resourcePrincipalName == null || userName == null || password == null) {
+            return false;
+        }
+        resourcePrincipal = new ResourcePrincipal(resourcePrincipalName);
+        subject.getPrincipals().add(resourcePrincipal);
+        passwordCredential = new PasswordCredential(userName, password);
+        passwordCredential.setManagedConnectionFactory(managedConnectionFactory);
+        subject.getPrivateCredentials().add(passwordCredential);
+        
+        // Clear private state
+        resourcePrincipalName = null;
+        userName = null;
+        password = null;
+        return false;
+    }
+
+    public boolean abort() throws LoginException {
+        resourcePrincipalName = null;
+        userName = null;
+        password = null;
+        return false;
+    }
+
+    public boolean logout() throws LoginException {
+        if(!subject.isReadOnly()) {
+            subject.getPrincipals().remove(resourcePrincipal);
+            subject.getPrivateCredentials().remove(passwordCredential);
+        }
+        
+        // TODO: Destroy the credential when subject is read-only.
+        resourcePrincipal = null;
+        passwordCredential = null;
+
+        // Clear private state
+        resourcePrincipalName = null;
+        userName = null;
+        password = null;
+        return false;
+    }
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/CallerIdentityPasswordCredentialLoginModule.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/CallerIdentityPasswordCredentialLoginModule.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/CallerIdentityPasswordCredentialLoginModule.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapper.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapper.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapper.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapper.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,47 @@
+/**
+ *  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.connector.outbound.security;
+
+import java.util.Map;
+import java.util.HashMap;
+
+import javax.resource.spi.ManagedConnectionFactory;
+
+import org.apache.geronimo.connector.outbound.ManagedConnectionFactoryWrapper;
+import org.apache.geronimo.security.jaas.LoginModuleGBean;
+import net.sf.cglib.beans.BeanMap;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class PasswordCredentialLoginModuleWrapper extends LoginModuleGBean {
+    public static final String MANAGED_CONNECTION_FACTORY_OPTION = "geronimo.managedconnectionfactory.option";
+
+    public PasswordCredentialLoginModuleWrapper(String loginModuleClass, String objectName, boolean wrapPrincipals, Map<String, Object> options, String loginDomainName, ManagedConnectionFactoryWrapper managedConnectionFactoryWrapper, ClassLoader classLoader) {
+        super(loginModuleClass, objectName, wrapPrincipals, getOptions(options, managedConnectionFactoryWrapper), loginDomainName, classLoader);
+    }
+
+    private static Map<String, Object> getOptions(Map<String, Object> options, ManagedConnectionFactoryWrapper managedConnectionFactoryWrapper) {
+        if (options == null) {
+            options = new HashMap<String, Object>();
+        }
+        ManagedConnectionFactory managedConnectionFactory = managedConnectionFactoryWrapper.$getManagedConnectionFactory();
+        options.put(MANAGED_CONNECTION_FACTORY_OPTION, managedConnectionFactory);
+        return options;
+    }
+
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapper.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapper.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapperGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapperGBean.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapperGBean.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapperGBean.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,46 @@
+/**
+ *  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.connector.outbound.security;
+
+import org.apache.geronimo.connector.outbound.ManagedConnectionFactoryWrapper;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.security.jaas.LoginModuleGBean;
+import org.apache.geronimo.security.SecurityNames;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class PasswordCredentialLoginModuleWrapperGBean {
+
+    private static final GBeanInfo GBEAN_INFO;
+
+    static {
+        GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(PasswordCredentialLoginModuleWrapper.class, LoginModuleGBean.GBEAN_INFO, SecurityNames.LOGIN_MODULE);
+
+        infoBuilder.addReference("ManagedConnectionFactoryWrapper", ManagedConnectionFactoryWrapper.class, NameFactory.JCA_MANAGED_CONNECTION_FACTORY);
+        infoBuilder.setConstructor(new String[] {"loginModuleClass", "objectName", "wrapPrincipals", "options", "loginDomainName", "ManagedConnectionFactoryWrapper", "classLoader"});
+
+        GBEAN_INFO = infoBuilder.getBeanInfo();
+    }
+
+    public static GBeanInfo getGBeanInfo() {
+        return GBEAN_INFO;
+    }
+
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapperGBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapperGBean.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/security/PasswordCredentialLoginModuleWrapperGBean.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLog.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLog.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLog.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLog.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,202 @@
+/**
+ *  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.connector.outbound.transactionlog;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.resource.ResourceException;
+import javax.sql.DataSource;
+import javax.transaction.xa.Xid;
+
+import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.naming.ResourceSource;
+import org.apache.geronimo.transaction.manager.LogException;
+import org.apache.geronimo.transaction.manager.Recovery;
+import org.apache.geronimo.transaction.manager.TransactionBranchInfo;
+import org.apache.geronimo.transaction.manager.TransactionBranchInfoImpl;
+import org.apache.geronimo.transaction.manager.TransactionLog;
+import org.apache.geronimo.transaction.manager.XidFactory;
+
+/**
+ * "Last Resource optimization" for single servers wishing to have valid xa transactions with
+ * a single 1-pc datasource.  The database is used for the log, and the database work is
+ * committed when the log writes its prepare record.
+ *
+ * @version $Rev$ $Date$
+ */
+public class JDBCLog implements TransactionLog, GBeanLifecycle {
+    private final static String INSERT_XID = "INSERT INTO TXLOG (SYSTEMID, FORMATID, GLOBALID, GLOBALBRANCHID, BRANCHBRANCHID, NAME) VALUES (?, ?, ?, ?, ?)";
+    private final static String DELETE_XID = "DELETE FROM TXLOG WHERE SYSTEMID = ? AND FORMATID = ? AND GLOBALID = ?  AND GLOBALBRANCHID = ?";
+    private final static String RECOVER = "SELECT FORMATID, GLOBALID, GLOBALBRANCHID, BRANCHBRANCHID, NAME FROM TXLOG WHERE SYSTEMID = ? ORDER BY FORMATID, GLOBALID, GLOBALBRANCHID, BRANCHBRANCHID, NAME";
+
+    private DataSource dataSource;
+    private final String systemId;
+    private final ResourceSource<ResourceException> managedConnectionFactoryWrapper;
+
+    public JDBCLog(String systemId, ResourceSource<ResourceException> managedConnectionFactoryWrapper) {
+        this.systemId = systemId;
+        this.managedConnectionFactoryWrapper = managedConnectionFactoryWrapper;
+    }
+
+    public JDBCLog(String systemId, DataSource dataSource) {
+        this.systemId = systemId;
+        this.managedConnectionFactoryWrapper = null;
+        this.dataSource = dataSource;
+    }
+
+    public void doStart() throws Exception {
+        dataSource = (DataSource) managedConnectionFactoryWrapper.$getResource();
+    }
+
+    public void doStop() throws Exception {
+        dataSource = null;
+    }
+
+    public void doFail() {
+    }
+
+    public void begin(Xid xid) throws LogException {
+    }
+
+    public Object prepare(Xid xid, List branches) throws LogException {
+        int formatId = xid.getFormatId();
+        byte[] globalTransactionId = xid.getGlobalTransactionId();
+        byte[] branchQualifier = xid.getBranchQualifier();
+        try {
+            Connection connection = dataSource.getConnection();
+            try {
+                PreparedStatement ps = connection.prepareStatement(INSERT_XID);
+                try {
+                    for (Iterator iterator = branches.iterator(); iterator.hasNext();) {
+                        TransactionBranchInfo branch = (TransactionBranchInfo) iterator.next();
+                        ps.setString(0, systemId);
+                        ps.setInt(1, formatId);
+                        ps.setBytes(2, globalTransactionId);
+                        ps.setBytes(3, branchQualifier);
+                        ps.setBytes(4, branch.getBranchXid().getBranchQualifier());
+                        ps.setString(5, branch.getResourceName());
+                        ps.execute();
+                    }
+                } finally {
+                    ps.close();
+                }
+                if (!connection.getAutoCommit()) {
+                    connection.commit();
+                }
+            } finally {
+                connection.close();
+            }
+        } catch (SQLException e) {
+            throw new LogException("Failure during prepare or commit", e);
+        }
+        return null;
+    }
+
+    public void commit(Xid xid, Object logMark) throws LogException {
+        try {
+            Connection connection = dataSource.getConnection();
+            try {
+                PreparedStatement ps = connection.prepareStatement(DELETE_XID);
+                try {
+                    ps.setString(0, systemId);
+                    ps.setInt(1, xid.getFormatId());
+                    ps.setBytes(2, xid.getGlobalTransactionId());
+                    ps.setBytes(3, xid.getBranchQualifier());
+                    ps.execute();
+                } finally {
+                    ps.close();
+                }
+                if (!connection.getAutoCommit()) {
+                    connection.commit();
+                }
+            } finally {
+                connection.close();
+            }
+        } catch (SQLException e) {
+            throw new LogException("Failure during prepare or commit", e);
+        }
+    }
+
+    public void rollback(Xid xid, Object logMark) throws LogException {
+        throw new LogException("JDBCLog does not support rollback of prepared transactions.  Use it only on servers that do not import transactions");
+    }
+
+    public Collection recover(XidFactory xidFactory) throws LogException {
+        try {
+            Connection connection = dataSource.getConnection();
+            try {
+                Collection recovered = new ArrayList();
+                PreparedStatement ps = connection.prepareStatement(RECOVER);
+                try {
+                    ps.setString(0, systemId);
+                    ResultSet rs = ps.executeQuery();
+                    try {
+                        Xid lastXid = null;
+                        Xid currentXid = null;
+                        Recovery.XidBranchesPair xidBranchesPair = null;
+                        while (rs.next()) {
+                            int formatId = rs.getInt(0);
+                            byte[] globalId = rs.getBytes(1);
+                            byte[] globalBranchId = rs.getBytes(2);
+                            byte[] branchBranchId = rs.getBytes(3);
+                            String name = rs.getString(4);
+                            currentXid = xidFactory.recover(formatId, globalId, globalBranchId);
+                            Xid branchXid = xidFactory.recover(formatId, globalId, branchBranchId);
+                            if (!currentXid.equals(lastXid)) {
+                                xidBranchesPair = new Recovery.XidBranchesPair(currentXid, null);
+                                recovered.add(xidBranchesPair);
+                                lastXid = currentXid;
+                            }
+                            xidBranchesPair.addBranch(new TransactionBranchInfoImpl(branchXid, name));
+                        }
+                        return recovered;
+                    } finally {
+                        rs.close();
+                    }
+                } finally {
+                    ps.close();
+                }
+            } finally {
+                connection.close();
+            }
+        } catch (SQLException e) {
+            throw new LogException("Recovery failure", e);
+        }
+
+    }
+
+    public String getXMLStats() {
+        return null;
+    }
+
+    public int getAverageForceTime() {
+        return 0;
+    }
+
+    public int getAverageBytesPerForce() {
+        return 0;
+    }
+
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLog.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLog.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLog.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLogGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLogGBean.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLogGBean.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLogGBean.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,52 @@
+/**
+ *  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.connector.outbound.transactionlog;
+
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.naming.ResourceSource;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.transaction.manager.TransactionLog;
+
+/**
+ * 
+ * @version $Revision$
+ */
+public class JDBCLogGBean {
+    
+    public static final GBeanInfo GBEAN_INFO;
+
+    static {
+        GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(JDBCLogGBean.class, JDBCLog.class, NameFactory.JCA_RESOURCE);
+
+        infoFactory.addAttribute("systemId", String.class, true);
+
+        infoFactory.addInterface(TransactionLog.class);
+
+        infoFactory.addReference("ConnectionFactorySource", ResourceSource.class, NameFactory.JCA_MANAGED_CONNECTION_FACTORY);
+
+        infoFactory.setConstructor(new String[]{"systemId", "ConnectionFactorySource"});
+
+        GBEAN_INFO = infoFactory.getBeanInfo();
+    }
+
+    public static GBeanInfo getGBeanInfo() {
+        return GBEAN_INFO;
+    }
+
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLogGBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLogGBean.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/outbound/transactionlog/JDBCLogGBean.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,68 @@
+/**
+ *  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.connector.work;
+
+import java.util.concurrent.Executor;
+
+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.manager.XAWork;
+
+/**
+ * 
+ * @version $Revision$
+ */
+public class GeronimoWorkManagerGBean extends GeronimoWorkManager implements GBeanLifecycle {
+
+    public GeronimoWorkManagerGBean() {
+    }
+
+    public GeronimoWorkManagerGBean(Executor sync, Executor start, Executor sched, XAWork xaWork) {
+        super(sync, start, sched, xaWork);
+    }
+
+    public static final GBeanInfo GBEAN_INFO;
+
+    static {
+        GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(GeronimoWorkManagerGBean.class, NameFactory.JCA_WORK_MANAGER);
+        infoFactory.addInterface(GeronimoWorkManager.class);
+
+        infoFactory.addReference("SyncPool", Executor.class, GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
+        infoFactory.addReference("StartPool", Executor.class, GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
+        infoFactory.addReference("ScheduledPool", Executor.class, GBeanInfoBuilder.DEFAULT_J2EE_TYPE);
+
+        infoFactory.addReference("TransactionManager", XAWork.class, NameFactory.JTA_RESOURCE);
+
+        infoFactory.setConstructor(new String[]{
+            "SyncPool",
+            "StartPool",
+            "ScheduledPool",
+            "TransactionManager"});
+
+        GBEAN_INFO = infoFactory.getBeanInfo();
+    }
+
+    public static GBeanInfo getGBeanInfo() {
+        return GBEAN_INFO;
+    }
+
+
+
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/main/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/AdminObjectWrapperTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/AdminObjectWrapperTest.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/AdminObjectWrapperTest.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/AdminObjectWrapperTest.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,110 @@
+/**
+ *  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.connector;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+import org.apache.geronimo.connector.mock.MockAdminObject;
+import org.apache.geronimo.connector.mock.MockAdminObjectImpl;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.gbean.GBeanData;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext;
+import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelFactory;
+import org.apache.geronimo.kernel.repository.Artifact;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class AdminObjectWrapperTest extends TestCase {
+
+    private Kernel kernel;
+    private AbstractName selfName;
+    private static final String TARGET_NAME = "testAOName";
+
+    public void testProxy() throws Exception {
+        Object proxy = kernel.invoke(selfName, "$getResource");
+        assertNotNull(proxy);
+        assertTrue(proxy instanceof MockAdminObject);
+        MockAdminObject mockAdminObject = ((MockAdminObject) proxy).getSomething();
+        assertNotNull(mockAdminObject);
+    }
+
+    public void testSerialization() throws Exception {
+        MockAdminObject proxy = (MockAdminObject) kernel.invoke(selfName, "$getResource");
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(baos);
+        oos.writeObject(proxy);
+        oos.flush();
+        byte[] bytes = baos.toByteArray();
+        oos.close();
+        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
+        Object proxy2 = ois.readObject();
+        assertNotNull(proxy2);
+        assertTrue(proxy instanceof MockAdminObject);
+        MockAdminObject mockAdminObject = proxy.getSomething();
+        assertNotNull(mockAdminObject);
+        kernel.stopGBean(selfName);
+        ObjectInputStream ois2 = new ObjectInputStream(new ByteArrayInputStream(bytes));
+        MockAdminObject proxy3 = (MockAdminObject) ois2.readObject();
+        kernel.startGBean(selfName);
+        proxy3.getSomething();
+
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        J2eeContext j2eeContext = new J2eeContextImpl("test.domain", "geronimo.server", "testapp", NameFactory.RESOURCE_ADAPTER_MODULE, "testmodule", TARGET_NAME, NameFactory.JMS_RESOURCE);
+        kernel = KernelFactory.newInstance().createKernel(j2eeContext.getJ2eeDomainName());
+        kernel.boot();
+
+        GBeanData aow = buildGBeanData("name", TARGET_NAME, AdminObjectWrapperGBean.getGBeanInfo());
+        selfName = aow.getAbstractName();
+        aow.setAttribute("adminObjectInterface", MockAdminObject.class.getName());
+        aow.setAttribute("adminObjectClass", MockAdminObjectImpl.class.getName());
+        kernel.loadGBean(aow, this.getClass().getClassLoader());
+
+        kernel.startGBean(selfName);
+    }
+
+    private GBeanData buildGBeanData(String key, String value, GBeanInfo info) {
+        AbstractName abstractName = buildAbstractName(key, value);
+        return new GBeanData(abstractName, info);
+    }
+
+    private AbstractName buildAbstractName(String key, String value) {
+        Map names = new HashMap();
+        names.put(key, value);
+        return new AbstractName(new Artifact("test", "foo", "1", "car"), names);
+    }
+
+    protected void tearDown() throws Exception {
+        kernel.stopGBean(selfName);
+        kernel.shutdown();
+        super.tearDown();
+    }
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/AdminObjectWrapperTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/AdminObjectWrapperTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/AdminObjectWrapperTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/GenericConnectionManagerGBeanSerializationTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/GenericConnectionManagerGBeanSerializationTest.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/GenericConnectionManagerGBeanSerializationTest.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/GenericConnectionManagerGBeanSerializationTest.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,63 @@
+/*
+ * 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.connector.outbound;
+
+import java.net.URI;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+
+import junit.framework.TestCase;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.basic.BasicKernel;
+import org.apache.geronimo.gbean.GBeanData;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.connector.outbound.connectionmanagerconfig.NoTransactions;
+import org.apache.geronimo.connector.outbound.connectionmanagerconfig.SinglePool;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class GenericConnectionManagerGBeanSerializationTest extends TestCase {
+
+    public void testSerialization() throws Exception {
+        Kernel kernel = new BasicKernel("test");
+        kernel.boot();
+        AbstractName abstractName = new AbstractName(URI.create("foo/bar/1/car?name=ConnectionManager"));
+        GBeanData data = new GBeanData(abstractName, GenericConnectionManagerGBean.GBEAN_INFO);
+        data.setAttribute("transactionSupport", NoTransactions.INSTANCE);
+        data.setAttribute("pooling", new SinglePool(10, 0, 5000, 5, false, false, true));
+        kernel.loadGBean(data, this.getClass().getClassLoader());
+        kernel.startGBean(abstractName);
+        Object cm = kernel.getGBean(abstractName);
+        assertTrue(cm instanceof GenericConnectionManagerGBean);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream(baos);
+        out.writeObject(cm);
+        out.flush();
+        byte[] bytes = baos.toByteArray();
+        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+        ObjectInputStream in = new ObjectInputStream(bais);
+        Object cm2 = in.readObject();
+        assertSame(cm, cm2);
+    }
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/GenericConnectionManagerGBeanSerializationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/GenericConnectionManagerGBeanSerializationTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/GenericConnectionManagerGBeanSerializationTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/ManagedConnectionFactoryWrapperTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/ManagedConnectionFactoryWrapperTest.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/ManagedConnectionFactoryWrapperTest.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/ManagedConnectionFactoryWrapperTest.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,182 @@
+/**
+ *  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.connector.outbound;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import javax.resource.cci.Connection;
+import javax.resource.cci.ConnectionFactory;
+
+import junit.framework.TestCase;
+import org.apache.geronimo.connector.mock.ConnectionFactoryExtension;
+import org.apache.geronimo.connector.mock.MockConnection;
+import org.apache.geronimo.connector.mock.MockConnectionFactory;
+import org.apache.geronimo.connector.mock.MockManagedConnectionFactory;
+import org.apache.geronimo.connector.outbound.connectionmanagerconfig.NoPool;
+import org.apache.geronimo.connector.outbound.connectionmanagerconfig.NoTransactions;
+import org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTracker;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.gbean.GBeanData;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelFactory;
+import org.apache.geronimo.kernel.repository.Artifact;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ManagedConnectionFactoryWrapperTest extends TestCase {
+
+    private Kernel kernel;
+    private AbstractName managedConnectionFactoryName;
+    private static final String KERNEL_NAME = "testKernel";
+    private static final String TARGET_NAME = "testCFName";
+
+    public void testProxy() throws Exception {
+        Object proxy = kernel.invoke(managedConnectionFactoryName, "$getResource");
+        assertNotNull(proxy);
+        assertTrue(proxy instanceof ConnectionFactory);
+        Connection connection = ((ConnectionFactory) proxy).getConnection();
+        assertNotNull(connection);
+        kernel.stopGBean(managedConnectionFactoryName);
+        try {
+            ((ConnectionFactory) proxy).getConnection();
+//            fail();
+        } catch (IllegalStateException ise) {
+        }
+        kernel.startGBean(managedConnectionFactoryName);
+        ((ConnectionFactory) proxy).getConnection();
+        //check implemented interfaces
+        assertTrue(proxy instanceof Serializable);
+        assertTrue(proxy instanceof ConnectionFactoryExtension);
+        assertEquals("SomethingElse", ((ConnectionFactoryExtension)proxy).doSomethingElse());
+    }
+
+    public void XtestSerialization() throws Exception {
+        ConnectionFactory proxy = (ConnectionFactory) kernel.invoke(managedConnectionFactoryName, "$getResource");
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(baos);
+        oos.writeObject(proxy);
+        oos.flush();
+        byte[] bytes = baos.toByteArray();
+        oos.close();
+        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
+        Object proxy2 = ois.readObject();
+        assertNotNull(proxy2);
+        assertTrue(proxy instanceof ConnectionFactory);
+        Connection connection = proxy.getConnection();
+        assertNotNull(connection);
+        kernel.stopGBean(managedConnectionFactoryName);
+        ObjectInputStream ois2 = new ObjectInputStream(new ByteArrayInputStream(bytes));
+        ConnectionFactory proxy3 = (ConnectionFactory) ois2.readObject();
+        try {
+            proxy3.getConnection();
+            fail();
+        } catch (IllegalStateException ise) {
+        }
+        kernel.startGBean(managedConnectionFactoryName);
+        proxy3.getConnection();
+
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        kernel = KernelFactory.newInstance().createKernel(KERNEL_NAME);
+        kernel.boot();
+        ClassLoader cl = MockConnectionTrackingCoordinator.class.getClassLoader();
+
+        GBeanData ctc = buildGBeanData("name", "ConnectionTrackingCoordinator", MockConnectionTrackingCoordinator.getGBeanInfo());
+        AbstractName ctcName = ctc.getAbstractName();
+        kernel.loadGBean(ctc, cl);
+
+        GBeanData cmf = buildGBeanData("name", "ConnectionManagerContainer", GenericConnectionManagerGBean.getGBeanInfo());
+        AbstractName cmfName = cmf.getAbstractName();
+        cmf.setAttribute("transactionSupport", NoTransactions.INSTANCE);
+        cmf.setAttribute("pooling", new NoPool());
+        cmf.setReferencePattern("ConnectionTracker", ctcName);
+        kernel.loadGBean(cmf, cl);
+
+
+        GBeanData mcfw = buildGBeanData("name", TARGET_NAME, ManagedConnectionFactoryWrapperGBean.getGBeanInfo());
+        managedConnectionFactoryName = mcfw.getAbstractName();
+        mcfw.setAttribute("managedConnectionFactoryClass", MockManagedConnectionFactory.class.getName());
+        mcfw.setAttribute("connectionFactoryInterface", ConnectionFactory.class.getName());
+        mcfw.setAttribute("implementedInterfaces", new String[]{Serializable.class.getName(), ConnectionFactoryExtension.class.getName()});
+        mcfw.setAttribute("connectionFactoryImplClass", MockConnectionFactory.class.getName());
+        mcfw.setAttribute("connectionInterface", Connection.class.getName());
+        mcfw.setAttribute("connectionImplClass", MockConnection.class.getName());
+        //"ResourceAdapterWrapper",
+        mcfw.setReferencePattern("ConnectionManagerContainer", cmfName);
+        //"ManagedConnectionFactoryListener",
+        kernel.loadGBean(mcfw, cl);
+
+        kernel.startGBean(ctcName);
+        kernel.startGBean(cmfName);
+        kernel.startGBean(managedConnectionFactoryName);
+    }
+    private GBeanData buildGBeanData(String key, String value, GBeanInfo info) {
+        AbstractName abstractName = buildAbstractName(key, value);
+        return new GBeanData(abstractName, info);
+    }
+
+    private AbstractName buildAbstractName(String key, String value) {
+        Map names = new HashMap();
+        names.put(key, value);
+        return new AbstractName(new Artifact("test", "foo", "1", "car"), names);
+    }
+
+
+    protected void tearDown() throws Exception {
+        kernel.stopGBean(managedConnectionFactoryName);
+        kernel.shutdown();
+        super.tearDown();
+    }
+
+    public static class MockConnectionTrackingCoordinator implements ConnectionTracker {
+        public void handleObtained(ConnectionTrackingInterceptor connectionTrackingInterceptor,
+                                   ConnectionInfo connectionInfo,
+                                   boolean reassociate) {
+        }
+
+        public void handleReleased(ConnectionTrackingInterceptor connectionTrackingInterceptor,
+                                   ConnectionInfo connectionInfo,
+                                   ConnectionReturnAction connectionReturnAction) {
+        }
+
+        public void setEnvironment(ConnectionInfo connectionInfo, String key) {
+        }
+
+        static final GBeanInfo GBEAN_INFO;
+
+        static {
+            GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(MockConnectionTrackingCoordinator.class);
+            infoFactory.addInterface(ConnectionTracker.class);
+            GBEAN_INFO = infoFactory.getBeanInfo();
+        }
+
+        public static GBeanInfo getGBeanInfo() {
+            return GBEAN_INFO;
+        }
+    }
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/ManagedConnectionFactoryWrapperTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/ManagedConnectionFactoryWrapperTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/ManagedConnectionFactoryWrapperTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/security/GBeanTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/security/GBeanTest.java?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/security/GBeanTest.java (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/security/GBeanTest.java Mon Oct 20 11:23:36 2008
@@ -0,0 +1,34 @@
+/*
+ * 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.connector.outbound.security;
+
+import junit.framework.TestCase;
+import org.apache.geronimo.gbean.GBeanInfo;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class GBeanTest extends TestCase {
+
+    public void testGBeans() throws Exception {
+        GBeanInfo gBeanInfo = PasswordCredentialLoginModuleWrapperGBean.getGBeanInfo();
+    }
+}

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/security/GBeanTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/security/GBeanTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-1_6/src/test/java/org/apache/geronimo/connector/outbound/security/GBeanTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/pom.xml?rev=706357&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/pom.xml (added)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/pom.xml Mon Oct 20 11:23:36 2008
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+    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.
+-->
+
+<!-- $Rev$ $Date$ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.geronimo.plugins</groupId>
+        <artifactId>connector-1_6</artifactId>
+        <version>2.2-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.geronimo.modules</groupId>
+    <artifactId>geronimo-connector-builder-1_6</artifactId>
+    <name>Geronimo Plugins, Connector :: Builder</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.geronimo.modules</groupId>
+            <artifactId>geronimo-connector-1_6</artifactId>
+            <version>${version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.framework</groupId>
+            <artifactId>geronimo-deploy-config</artifactId>
+            <version>${version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.framework</groupId>
+            <artifactId>jee-specs</artifactId>
+            <version>${version}</version>
+            <type>car</type>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.modules</groupId>
+            <artifactId>geronimo-naming-builder</artifactId>
+            <version>${version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.schema</groupId>
+            <artifactId>geronimo-schema-j2ee_1.4</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.modules</groupId>
+            <artifactId>geronimo-test-ddbean</artifactId>
+            <version>${version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.framework</groupId>
+            <artifactId>geronimo-kernel</artifactId>
+            <version>${version}</version>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>xmlbeans-maven-plugin</artifactId>
+            </plugin>
+
+            <!--
+            HACK: Copy XmlBeans generated schemas.
+            -->
+            <plugin>
+                <groupId>org.apache.geronimo.buildsupport</groupId>
+                <artifactId>buildsupport-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>copy-xmlbeans-schemas</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>process-test-resources</phase>
+                        <configuration>
+                            <tasks>
+                                <ant antfile="${pom.basedir}/src/test/script/test-setup.xml"/>
+                            </tasks>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <systemProperties>
+                        <property>
+                            <name>java.security.auth.login.config</name>
+                            <value>${basedir}/src/test/resources/data/login.config</value>
+                        </property>
+                    </systemProperties>
+
+                    <excludes>
+                        <exclude>**/Abstract*.java</exclude>
+
+                        <!--
+                        FIXME: This test was disabled because it is failing in non-obvious ways
+                               and requires someone with more insight to resolve
+                        -->
+                        <exclude>**/Connector15DCBTest.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
+

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml