⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcamanagedconnectionfactory.java

📁 jsr170接口的java实现。是个apache的开源项目。
💻 JAVA
字号:
/* * 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.jackrabbit.jca;import org.apache.jackrabbit.core.RepositoryImpl;import org.apache.jackrabbit.core.XASession;import javax.jcr.Credentials;import javax.jcr.RepositoryException;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.security.auth.Subject;import java.io.PrintWriter;import java.util.Iterator;import java.util.Set;/** * Implements the JCA ManagedConnectionFactory contract. */public final class JCAManagedConnectionFactory        implements ManagedConnectionFactory {    /**     * Home directory.     */    private String homeDir;    /**     * Config file.     */    private String configFile;    /**     * Flag indicating whether the session should be bound to the     * transaction lyfecyle.     * In other words, if this flag is true the handle     * will be closed when the transaction ends.     */    private Boolean bindSessionToTransaction = Boolean.TRUE;    /**     * Repository.     */    private transient RepositoryImpl repository;    /**     * Log writer.     */    private transient PrintWriter logWriter;    /**     * Return the repository home directory.     */    public String getHomeDir() {        return homeDir;    }    /**     * Set the repository home directory.     */    public void setHomeDir(String homeDir) {        this.homeDir = homeDir;    }    /**     * Return the repository configuration file.     */    public String getConfigFile() {        return configFile;    }    /**     * Set the repository configuration file.     */    public void setConfigFile(String configFile) {        this.configFile = configFile;    }    /**     * Get the log writer.     */    public PrintWriter getLogWriter() {        return logWriter;    }    /**     * Set the log writer.     */    public void setLogWriter(PrintWriter logWriter)            throws ResourceException {        this.logWriter = logWriter;    }    /**     * Creates a Connection Factory instance.     */    public Object createConnectionFactory()            throws ResourceException {        return createConnectionFactory(new JCAConnectionManager());    }    /**     * Creates a Connection Factory instance.     */    public Object createConnectionFactory(ConnectionManager cm)            throws ResourceException {        createRepository();        JCARepositoryHandle handle = new JCARepositoryHandle(this, cm);        log("Created repository handle (" + handle + ")");        return handle;    }    /**     * Create a new session.     */    private XASession openSession(JCAConnectionRequestInfo cri)            throws ResourceException {        createRepository();        Credentials creds = cri.getCredentials();        String workspace = cri.getWorkspace();        try {            XASession session = (XASession) getRepository().login(creds, workspace);            log("Created session (" + session + ")");            return session;        } catch (RepositoryException e) {            log("Failed to create session", e);            ResourceException exception = new ResourceException(                    "Failed to create session: " + e.getMessage());            exception.setLinkedException(e);            throw exception;        }    }    /**     * {@inheritDoc}     * <p/>     * Creates a new physical connection to the underlying EIS resource manager.     * <p/>     * WebSphere 5.1.1 will try to recover an XA resource on startup, regardless     * whether it was committed or rolled back. On this occasion, <code>cri</code>     * will be <code>null</code>. In order to be interoperable, we return an     * anonymous connection, whose XA resource is recoverable-only.     */    public ManagedConnection createManagedConnection(Subject subject, ConnectionRequestInfo cri)            throws ResourceException {        if (cri == null) {            return new AnonymousConnection();        }        return createManagedConnection((JCAConnectionRequestInfo) cri);    }    /**     * Creates a new physical connection to the underlying EIS resource manager.     */    private ManagedConnection createManagedConnection(JCAConnectionRequestInfo cri)            throws ResourceException {        return new JCAManagedConnection(this, cri, openSession(cri));    }    /**     * Returns a matched connection from the candidate set of connections.     */    public ManagedConnection matchManagedConnections(Set set, Subject subject, ConnectionRequestInfo cri)            throws ResourceException {        for (Iterator i = set.iterator(); i.hasNext();) {            Object next = i.next();            if (next instanceof JCAManagedConnection) {                JCAManagedConnection mc = (JCAManagedConnection) next;                if (equals(mc.getManagedConnectionFactory())) {                    JCAConnectionRequestInfo otherCri = mc.getConnectionRequestInfo();                    if (equals(cri, otherCri)) {                        return mc;                    }                }            }        }        return null;    }    /**     * Return the repository.     */    public RepositoryImpl getRepository() {        return repository;    }    /**     * Log a message.     */    public void log(String message) {        log(message, null);    }    /**     * Log a message.     */    public void log(String message, Throwable exception) {        if (logWriter != null) {            logWriter.println(message);            if (exception != null) {                exception.printStackTrace(logWriter);            }        }    }    /**     * Return the hash code.     */    public int hashCode() {        int result = homeDir != null ? homeDir.hashCode() : 0;        result = 37 * result + (configFile != null ? configFile.hashCode() : 0);        return result;    }    /**     * Return true if equals.     */    public boolean equals(Object o) {        if (o == this) {            return true;        } else if (o instanceof JCAManagedConnectionFactory) {            return equals((JCAManagedConnectionFactory) o);        } else {            return false;        }    }    /**     * Return true if equals.     */    private boolean equals(JCAManagedConnectionFactory o) {        return equals(homeDir, o.homeDir)            && equals(configFile, o.configFile);    }    /**     * Return true if equals.     */    private boolean equals(Object o1, Object o2) {        if (o1 == o2) {            return true;        } else if ((o1 == null) || (o2 == null)) {            return false;        } else {            return o1.equals(o2);        }    }    /**     * Create repository.     */    private void createRepository()            throws ResourceException {        if (repository == null) {            // Check the home directory            if ((homeDir == null) || homeDir.equals("")) {                throw new ResourceException("Property 'homeDir' not set");            }            // Check the config file            if ((configFile == null) || configFile.equals("")) {                throw new ResourceException("Property 'configFile' not set");            }            try {                JCARepositoryManager mgr = JCARepositoryManager.getInstance();                repository = mgr.createRepository(homeDir, configFile);                log("Created repository (" + repository + ")");            } catch (RepositoryException e) {                log("Failed to create repository", e);                ResourceException exception = new ResourceException(                        "Failed to create session: " + e.getMessage());                exception.setLinkedException(e);                throw exception;            }        }    }    /**     * Shutdown the repository.     */    protected void finalize() {        JCARepositoryManager mgr = JCARepositoryManager.getInstance();        mgr.autoShutdownRepository(homeDir, configFile);    }    public Boolean getBindSessionToTransaction() {        return bindSessionToTransaction;    }    public void setBindSessionToTransaction(Boolean bindSessionToTransaction) {        this.bindSessionToTransaction = bindSessionToTransaction;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -