Package org.apache.cxf.jca.core.resourceadapter

Source Code of org.apache.cxf.jca.core.resourceadapter.AbstractManagedConnectionFactoryImpl

/**
* 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.cxf.jca.core.resourceadapter;

import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.resource.ResourceException;
import javax.resource.spi.ConnectionManager;
import javax.resource.spi.ConnectionRequestInfo;
import javax.resource.spi.ManagedConnection;
import javax.resource.spi.ManagedConnectionFactory;
import javax.resource.spi.ResourceAdapterInternalException;
import javax.security.auth.Subject;

import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.jca.core.logging.LoggerHelper;

public abstract class AbstractManagedConnectionFactoryImpl extends ResourceBean
    implements ManagedConnectionFactory {

    private static final Logger LOG = LogUtils.getL7dLogger(AbstractManagedConnectionFactoryImpl.class);

    private PrintWriter printWriter;

    public AbstractManagedConnectionFactoryImpl() {
        super();
    }

    public AbstractManagedConnectionFactoryImpl(Properties props) {
        super(props);
    }

    public abstract Object createConnectionFactory(ConnectionManager connMgr) throws ResourceException;

    public abstract Object createConnectionFactory() throws ResourceException;

    public abstract ManagedConnection createManagedConnection(Subject subject,
                                                              ConnectionRequestInfo connReqInfo)
        throws ResourceException;

    public abstract void close() throws ResourceAdapterInternalException;

    protected abstract void validateReference(AbstractManagedConnectionImpl conn, Subject subject)
        throws ResourceAdapterInternalException;

    public ManagedConnection matchManagedConnections(
        Set aMCSet, Subject subject, ConnectionRequestInfo crInfo)
        throws ResourceException {
       
        LOG.log(Level.FINE, "MATCHING_CONNECTIONS",
            new Object[] {new Integer(aMCSet.size()), crInfo, subject});

        for (Iterator iterator = aMCSet.iterator(); iterator.hasNext();) {
            AbstractManagedConnectionImpl conn = (AbstractManagedConnectionImpl)iterator.next();

            LOG.log(Level.FINE, "MATCH_CONNECTION_AGAINST",
                       new Object[] {((AbstractManagedConnectionImpl)conn).getConnectionRequestInfo(),
                                     crInfo});

            if (!((AbstractManagedConnectionImpl)conn).isBound()) {
                LOG.fine("match against unbounded, con= " + conn + ", info=" + crInfo);
                return conn;
            } else {
                if (isMatch(conn, crInfo, subject)) {
                    LOG.fine("match against bounded, con= " + conn + ", info=" + crInfo);

                    return conn;
                }
            }
        }

        return null;
    }

    private boolean isMatch(final AbstractManagedConnectionImpl canditateConn,
                            final ConnectionRequestInfo crInfo, final Subject subject)
        throws ResourceAdapterInternalException {
        boolean result = false;
        final ConnectionRequestInfo canditate = canditateConn.getConnectionRequestInfo();

        if (canditate.equals(crInfo)) {
            LOG.fine("found match canditate=" + canditate + ", info=" + crInfo);
            LOG.fine("Checking Subjects Match " + subject + " " + canditateConn.getSubject());

            if ((subject == null)
                || (subject.equals(((AbstractManagedConnectionImpl)canditateConn).getSubject()))) {
                try {
                    validateReference(canditateConn, subject);
                    result = true;
                } catch (Exception thrown) {
                    result = false;
                }
            }
        }

        return result;
    }

    public PrintWriter getLogWriter() throws ResourceException {
        return printWriter;
    }

    public void setLogWriter(final PrintWriter aPrintWriter) throws ResourceException {
        if (aPrintWriter == null) {
            throw new IllegalArgumentException("NULL_LOG_WRITER");
        }

        printWriter = aPrintWriter;
        LoggerHelper.initializeLoggingOnWriter(printWriter);
    }
}
TOP

Related Classes of org.apache.cxf.jca.core.resourceadapter.AbstractManagedConnectionFactoryImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.