View Javadoc

1   /*** 
2    * 
3    * Copyright 2004 Hiram Chirino
4    * 
5    * Licensed under the Apache License, Version 2.0 (the "License"); 
6    * you may not use this file except in compliance with the License. 
7    * You may obtain a copy of the License at 
8    * 
9    * http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, 
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
14   * See the License for the specific language governing permissions and 
15   * limitations under the License. 
16   * 
17   **/
18  package org.codehaus.activemq.ra;
19  
20  import org.apache.commons.logging.Log;
21  import org.apache.commons.logging.LogFactory;
22  
23  import javax.resource.ResourceException;
24  import javax.resource.spi.ConnectionEvent;
25  import javax.resource.spi.ConnectionEventListener;
26  import javax.resource.spi.ConnectionManager;
27  import javax.resource.spi.ConnectionRequestInfo;
28  import javax.resource.spi.ManagedConnection;
29  import javax.resource.spi.ManagedConnectionFactory;
30  import javax.security.auth.Subject;
31  
32  
33  /***
34   * A simple implementation of a ConnectionManager.
35   * An App Server will have a better implementation with pooling and security etc.
36   * 
37   * @version $Revision: 1.4 $
38   */
39  public class DefaultConnectionManager implements ConnectionManager, ConnectionEventListener {
40  
41      private static final Log log = LogFactory.getLog(DefaultConnectionManager.class);
42  
43      /***
44       * @see javax.resource.spi.ConnectionManager#allocateConnection(javax.resource.spi.ManagedConnectionFactory, javax.resource.spi.ConnectionRequestInfo)
45       */
46      public Object allocateConnection(ManagedConnectionFactory connectionFactory, ConnectionRequestInfo info) throws ResourceException {
47          Subject subject = null;
48          ManagedConnection connection = connectionFactory.createManagedConnection(subject, info);
49          connection.addConnectionEventListener(this);
50          return connection.getConnection(subject, info);
51      }
52  
53      /***
54       * @see javax.resource.spi.ConnectionEventListener#connectionClosed(javax.resource.spi.ConnectionEvent)
55       */
56      public void connectionClosed(ConnectionEvent event) {
57          try {
58              ((ManagedConnection) event.getSource()).cleanup();
59          }
60          catch (ResourceException e) {
61              log.warn("Error occured during the cleanup of a managed connection: ", e);
62          }
63          try {
64              ((ManagedConnection) event.getSource()).destroy();
65          }
66          catch (ResourceException e) {
67              log.warn("Error occured during the destruction of a managed connection: ", e);
68          }
69      }
70  
71      /***
72       * @see javax.resource.spi.ConnectionEventListener#localTransactionStarted(javax.resource.spi.ConnectionEvent)
73       */
74      public void localTransactionStarted(ConnectionEvent event) {
75      }
76  
77      /***
78       * @see javax.resource.spi.ConnectionEventListener#localTransactionCommitted(javax.resource.spi.ConnectionEvent)
79       */
80      public void localTransactionCommitted(ConnectionEvent event) {
81      }
82  
83      /***
84       * @see javax.resource.spi.ConnectionEventListener#localTransactionRolledback(javax.resource.spi.ConnectionEvent)
85       */
86      public void localTransactionRolledback(ConnectionEvent event) {
87      }
88  
89      /***
90       * @see javax.resource.spi.ConnectionEventListener#connectionErrorOccurred(javax.resource.spi.ConnectionEvent)
91       */
92      public void connectionErrorOccurred(ConnectionEvent event) {
93          log.warn("Managed connection experiened an error: ", event.getException());
94          try {
95              ((ManagedConnection) event.getSource()).cleanup();
96          }
97          catch (ResourceException e) {
98              log.warn("Error occured during the cleanup of a managed connection: ", e);
99          }
100         try {
101             ((ManagedConnection) event.getSource()).destroy();
102         }
103         catch (ResourceException e) {
104             log.warn("Error occured during the destruction of a managed connection: ", e);
105         }
106     }
107 
108 }