C:\devel\mocks\src\com\ociweb\jnb\ex2\TransactionManagerImpl.java

1    package com.ociweb.jnb.ex2; 
2     
3    import java.util.Properties; 
4    import java.io.IOException; 
5    import java.sql.Connection; 
6    import java.sql.SQLException; 
7    import java.lang.reflect.Proxy; 
8    import java.lang.reflect.InvocationHandler; 
9    import java.lang.reflect.Method; 
10    
11   public class TransactionManagerImpl implements TransactionManager { 
12       private static final String PROPERTIES_NAME = "TransactionManager.properties"; 
13       private static final String DB_DRIVER; 
14       private static final String DB_URL; 
15       private static final String USERNAME; 
16       private static final String PASSWORD; 
17    
18       private Connection conn; 
19       private Connection proxy; 
20    
21       static { 
22           Properties props = new Properties(); 
23           try { 
24               props.load(TransactionManagerImpl.class.getResourceAsStream(PROPERTIES_NAME)); 
25           } catch (IOException e) { 
26               e.printStackTrace(); 
27           } 
28           DB_DRIVER = props.getProperty("DB_DRIVER"); 
29           DB_URL = props.getProperty("DB_URL"); 
30           USERNAME = props.getProperty("USERNAME"); 
31           PASSWORD = props.getProperty("PASSWORD"); 
32       } 
33    
34       public TransactionManagerImpl(ConnectionFactory connectionFactory) { 
35           initialize(connectionFactory); 
36       } 
37    
38       private void initialize(ConnectionFactory connectionFactory) { 
39           //Connect to database 
40           try { 
41               conn = connectionFactory.createConnection(DB_DRIVER, DB_URL, USERNAME, PASSWORD); 
42               conn.setAutoCommit(false); 
43               proxy = createConnectionProxy(); 
44           } catch (SQLException e) { 
45               e.printStackTrace(); 
46           } 
47       } 
48    
49       public void commit() throws TransactionException { 
50           try { 
51               conn.commit(); 
52           } catch (SQLException e) { 
53               throw new TransactionException(e); 
54           } 
55       } 
56    
57       public void rollback() throws TransactionException { 
58           try { 
59               conn.rollback(); 
60           } catch (SQLException e) { 
61               throw new TransactionException(e); 
62           } 
63       } 
64    
65       public Connection getConnection() { 
66           return proxy; 
67       } 
68    
69       private Connection createConnectionProxy() { 
70           return (Connection) Proxy.newProxyInstance( 
71                   getClass().getClassLoader(), new Class[]{Connection.class}, new ConnectionProxy(conn)); 
72       } 
73    
74       private static class ConnectionProxy implements InvocationHandler { 
75           private Connection delegate; 
76    
77           ConnectionProxy(Connection delegate) { 
78               this.delegate = delegate; 
79           } 
80    
81           public Object invoke(Object proxy, Method method, Object[] args) 
82                   throws Throwable { 
83               if (method.getName().equalsIgnoreCase("commit")) { 
84                   return null; 
85               } else if (method.getName().equalsIgnoreCase("rollback")) { 
86                   return null; 
87               } 
88               return method.invoke(delegate, args); 
89           } 
90       } 
91   } 
92