Coverage Report - org.kuali.rice.core.database.SpringConnectionFactoryManagedImpl
 
Classes in this File Line Coverage Branch Coverage Complexity
SpringConnectionFactoryManagedImpl
0%
0/3
N/A
1.5
 
 1  
 /*
 2  
  * Copyright 2007 The Kuali Foundation
 3  
  *
 4  
  * Licensed under the Educational Community License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  * http://www.opensource.org/licenses/ecl2.php
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package org.kuali.rice.core.database;
 17  
 
 18  
 import java.sql.Connection;
 19  
 
 20  
 import org.apache.ojb.broker.accesslayer.LookupException;
 21  
 import org.apache.ojb.broker.metadata.JdbcConnectionDescriptor;
 22  
 import org.apache.ojb.broker.util.pooling.ByPassConnection;
 23  
 import org.springmodules.orm.ojb.support.LocalDataSourceConnectionFactory;
 24  
 
 25  
 /**
 26  
  * <p>A subclass of the standard Spring LocalDataSourceConnectionFactory (that supplies
 27  
  * OJB with connections to datasource defined in Spring) that wraps the connection in a
 28  
  * ByPassConnection so that the JTA defined in the managed environment can control the
 29  
  * transaction.</p>
 30  
  * <p>This class works in concert with the following parameter in the corresponding OJB properties
 31  
  * config:</p>
 32  
  * <blockquote>
 33  
  *   <code>
 34  
  *     ConnectionFactoryClass=org.kuali.rice.core.database.SpringConnectionFactoryManagedImpl
 35  
  *   </code>
 36  
  * </blockquote>
 37  
  * Apparently this strategy is not required in OJB 1.0.4:
 38  
  * http://db.apache.org/ojb/release-notes.txt
 39  
  * <blockquote>
 40  
  *   "ConnectionFactoryManagedImpl is declared deprecated. Now OJB automatic detect the
 41  
  *   running JTA-transaction and suppress critical method calls on the used connection"
 42  
  * </blockquote>
 43  
  * <br/>
 44  
  * Details:
 45  
  * <blockquote>This is to overcome a shortcoming in Spring/OJB that in 1.03 you can't
 46  
  * run in a managed environment with Spring and OJB if Spring is giving OJB its Connections
 47  
  * through it's LocalDataSourceConnectionFactory (which doesn't wrap the connection in a bypass
 48  
  * connection).  This is suppressing commits - so that JTA can do it.
 49  
  * If one uses JNDI to grab the DS this wouldn't be necessary because both
 50  
  * Spring and OJB would grab the DS from there and we'd be cool.
 51  
  * The ByPassConnection is a class that comes with OJB which essentially turns calls
 52  
  * to commit, rollback, etc. into NO-OPS.  The reason it does this is because, in a
 53  
  * managed environment these methods are invoked on the individual connections by
 54  
  * the transaction manager and if you call the explicitly from the code they will
 55  
  * typically throw an exception (depending on the JTA implementation).
 56  
  * </blockquote>
 57  
  * (what about TransactionAwareDataSourceConnectionFactory mentioned in Spring docs?)
 58  
  */
 59  0
 public class SpringConnectionFactoryManagedImpl extends LocalDataSourceConnectionFactory {
 60  
 
 61  
         public Connection lookupConnection(JdbcConnectionDescriptor jcd) throws LookupException {
 62  0
                 return new ByPassConnection(super.lookupConnection(jcd));
 63  
         }
 64  
 
 65  
         protected Connection newConnectionFromDriverManager(JdbcConnectionDescriptor arg0) throws LookupException {
 66  0
                 throw new UnsupportedOperationException("Not supported in managed environment");
 67  
         }
 68  
 }