mulemanagedconnection.java
来自「提供ESB 应用mule源代码 提供ESB 应用mule源代码」· Java 代码 · 共 444 行
JAVA
444 行
/* * $Id: MuleManagedConnection.java 10670 2008-02-01 17:12:38Z romikk $ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com * * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */package org.mule.module.jca;import org.mule.module.jca.i18n.JcaMessages;import org.mule.security.MuleCredentials;import java.io.PrintWriter;import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;import javax.resource.NotSupportedException;import javax.resource.ResourceException;import javax.resource.spi.ConnectionEvent;import javax.resource.spi.ConnectionEventListener;import javax.resource.spi.ConnectionRequestInfo;import javax.resource.spi.ManagedConnection;import javax.resource.spi.ManagedConnectionMetaData;import javax.resource.spi.security.PasswordCredential;import javax.security.auth.Subject;import javax.transaction.xa.XAResource;/** * <code>MuleManagedConnection</code> TODO */public class MuleManagedConnection implements ManagedConnection{ private MuleManagedConnectionFactory mcf; private List listeners = new ArrayList(); private Set connectionSet; private PrintWriter logWriter; private boolean destroyed; private PasswordCredential passCred; /** * Constructor. * * @param mcf the ManagedConnectionFactory that created this instance * @param subject security context as JAAS subject * @param cxRequestInfo ConnectionRequestInfo instance * @throws javax.resource.ResourceException in case of any error */ MuleManagedConnection(MuleManagedConnectionFactory mcf, Subject subject, ConnectionRequestInfo cxRequestInfo) throws ResourceException { this.mcf = mcf; // Note: this will select the credential that matches this MC's MCF. // The credential's MCF is set by the application server. this.passCred = RaHelper.getPasswordCredential(mcf, subject, cxRequestInfo); connectionSet = new HashSet(); } /** * Creates a new connection handle to the Mail Server represented by the * ManagedConnection instance. This connection handle is used by the application * code to refer to the underlying physical connection. * * @param subject security context as JAAS subject * @param connectionRequestInfo ConnectionRequestInfo instance * @return Connection instance representing the connection handle * @throws ResourceException if the method fails to get a connection */ public Object getConnection(Subject subject, ConnectionRequestInfo connectionRequestInfo) throws ResourceException { checkIfDestroyed(); PasswordCredential pc = RaHelper.getPasswordCredential(mcf, subject, connectionRequestInfo); if (!passCred.equals(pc)) { // TODO change the message, we are not dealing with an endpoint here throw new javax.resource.spi.SecurityException( JcaMessages.authDeniedOnEndpoint(this).getMessage()); } String user; String password; MuleConnectionRequestInfo info = (MuleConnectionRequestInfo)connectionRequestInfo; user = info.getUserName(); password = info.getPassword(); if (user == null) { // Use default values user = mcf.getUsername(); password = mcf.getPassword(); } MuleCredentials creds = null; if (user != null) { if (password == null) { password = ""; } creds = new MuleCredentials(user, password.toCharArray()); } MuleConnection connection = new DefaultMuleConnection(this, info.getMuleContext(), creds); addConnection(connection); return connection; } /** * Destroys the physical connection. * * @throws ResourceException if the method fails to destroy the connection */ public void destroy() throws ResourceException { if (destroyed) { return; } destroyed = true; invalidateConnections(); } /** * Initiates a cleanup of the client-specific state maintained by a * ManagedConnection instance. The cleanup should invalidate all connection * handles created using this ManagedConnection instance. * * @throws ResourceException if the cleanup fails */ public void cleanup() throws ResourceException { checkIfDestroyed(); invalidateConnections(); } private void invalidateConnections() { Iterator it = connectionSet.iterator(); while (it.hasNext()) { DefaultMuleConnection connection = (DefaultMuleConnection)it.next(); connection.invalidate(); } connectionSet.clear(); } /** * Used by the container to change the association of an application-level * connection handle with a ManagedConnection instance. The container should find * the right ManagedConnection instance and call the associateConnection method. * * @param connection application-level connection handle * @throws ResourceException if the attempt to change the association fails */ public void associateConnection(Object connection) throws ResourceException { checkIfDestroyed(); if (connection instanceof MuleConnection) { MuleConnection cnn = (MuleConnection)connection; cnn.associateConnection(this); } else { throw new IllegalStateException( JcaMessages.objectMarkedInvalid(DefaultMuleConnection.class.getName() + ": " + (connection == null ? "null" : connection.getClass().getName())).toString()); } } /** * Adds a connection event listener to the ManagedConnection instance. The * registered ConnectionEventListener instances are notified of connection close * and error events as well as local-transaction-related events on the Managed * Connection. * * @param listener a new ConnectionEventListener to be registered */ public void addConnectionEventListener(ConnectionEventListener listener) { listeners.add(listener); } /** * Removes an already registered connection event listener from the * ManagedConnection instance. * * @param listener already registered connection event listener to be removed */ public void removeConnectionEventListener(ConnectionEventListener listener) { listeners.remove(listener); } /** * Returns a javax.transaction.xa.XAresource instance. An application server * enlists this XAResource instance with the Transaction Manager if the * ManagedConnection instance is being used in a JTA transaction that is being * coordinated by the Transaction Manager. <p/> Because this implementation does * not support transactions, the method throws an exception. * * @return the XAResource instance * @throws ResourceException if transactions are not supported */ // TODO public XAResource getXAResource() throws ResourceException { throw new NotSupportedException("getXAResource"); } /** * Returns a javax.resource.spi.LocalTransaction instance. The LocalTransaction * interface is used by the container to manage local transactions for a RM * instance. <p/> Because this implementation does not support transactions, the * method throws an exception. * * @return javax.resource.spi.LocalTransaction instance * @throws ResourceException if transactions are not supported */ public javax.resource.spi.LocalTransaction getLocalTransaction() throws ResourceException { throw new NotSupportedException("getLocalTransaction"); } /** * Gets the metadata information for this connection's underlying EIS resource * manager instance. The ManagedConnectionMetaData interface provides information * about the underlying EIS instance associated with the ManagedConnection * instance. * * @return ManagedConnectionMetaData ManagedConnectionMetaData instance * @throws ResourceException if the metadata cannot be retrieved */ public ManagedConnectionMetaData getMetaData() throws ResourceException { checkIfDestroyed(); return new MuleManagedConnectionMetaData(this); } /** * Sets the log writer for this ManagedConnection instance. The log writer is a * character output stream to which all logging and tracing messages for this * ManagedConnection instance will be printed. * * @param out character output stream to be associated * @throws ResourceException if the method fails */ public void setLogWriter(PrintWriter out) throws ResourceException { this.logWriter = out; } /** * Gets the log writer for this ManagedConnection instance. * * @return the character output stream associated with this ManagedConnection * instance * @throws ResourceException if the method fails */ public PrintWriter getLogWriter() throws ResourceException { return logWriter; } /** * Gets the user name of the user associated with the ManagedConnection instance. * * @return the username for this connection */ public String getUsername() { if (passCred != null) { return passCred.getUserName(); } else { return null; } } /** * Gets the password for the user associated with the ManagedConnection instance. * * @return the password for this connection */ public PasswordCredential getPasswordCredential() { return passCred; } /** * Associate connection handle with the physical connection. * * @param connection connection handle */ public void addConnection(MuleConnection connection) { connectionSet.add(connection); } /** * Check validation of the physical connection. * * @throws ResourceException if the connection has been destroyed */ private void checkIfDestroyed() throws ResourceException { if (destroyed) { throw new ResourceException( JcaMessages.objectIsDisposed("MuleManagedConnection").toString()); } } /** * Removes the associated connection handle from the connections set to the * physical connection. * * @param connection the connection handle */ public void removeConnection(MuleConnection connection) { connectionSet.remove(connection); } /** * Checks validation of the physical connection. * * @return true if the connection has been destroyed; false otherwise */ boolean isDestroyed() { return destroyed; } /** * Returns the ManagedConnectionFactory that created this instance of * ManagedConnection. * * @return the ManagedConnectionFactory for this connection */ public MuleManagedConnectionFactory getManagedConnectionFactory() { return this.mcf; } void fireBeginEvent() { ConnectionEvent event = new ConnectionEvent(MuleManagedConnection.this, ConnectionEvent.LOCAL_TRANSACTION_STARTED); Iterator iterator = listeners.iterator(); while (iterator.hasNext()) { ConnectionEventListener l = (ConnectionEventListener)iterator.next(); l.localTransactionStarted(event); } } void fireCommitEvent() { ConnectionEvent event = new ConnectionEvent(MuleManagedConnection.this, ConnectionEvent.LOCAL_TRANSACTION_COMMITTED); Iterator iterator = listeners.iterator(); while (iterator.hasNext()) { ConnectionEventListener l = (ConnectionEventListener)iterator.next(); l.localTransactionCommitted(event); } } void fireRollbackEvent() { ConnectionEvent event = new ConnectionEvent(MuleManagedConnection.this, ConnectionEvent.LOCAL_TRANSACTION_ROLLEDBACK); Iterator iterator = listeners.iterator(); while (iterator.hasNext()) { ConnectionEventListener l = (ConnectionEventListener)iterator.next(); l.localTransactionRolledback(event); } } void fireCloseEvent(MuleConnection connection) { ConnectionEvent event = new ConnectionEvent(MuleManagedConnection.this, ConnectionEvent.CONNECTION_CLOSED); event.setConnectionHandle(connection); Iterator iterator = listeners.iterator(); while (iterator.hasNext()) { ConnectionEventListener l = (ConnectionEventListener)iterator.next(); l.connectionClosed(event); } } void fireErrorOccurredEvent(Exception error) { ConnectionEvent event = new ConnectionEvent(MuleManagedConnection.this, ConnectionEvent.CONNECTION_ERROR_OCCURRED, error); Iterator iterator = listeners.iterator(); while (iterator.hasNext()) { ConnectionEventListener l = (ConnectionEventListener)iterator.next(); l.connectionErrorOccurred(event); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?