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

1    package com.ociweb.jnb.ex3; 
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 String DB_DRIVER; 
14       private static String DB_URL; 
15       private static String USERNAME; 
16       private static String PASSWORD; 
17    
18       private Connection conn; 
19       private Connection proxy; 
20    
21       public TransactionManagerImpl(ConnectionFactory connectionFactory) { 
22           initialize(connectionFactory); 
23       } 
24    
25       private void initialize(ConnectionFactory connectionFactory) { 
26           try { 
27               Properties  props = GlobalPropertiesManager.get().loadProperties(PROPERTIES_NAME); 
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           } catch (IOException e) { 
33               e.printStackTrace(); 
34           } 
35    
36           //Connect to database 
37           try { 
38               conn = connectionFactory.createConnection(DB_DRIVER, DB_URL, USERNAME, PASSWORD); 
39               conn.setAutoCommit(false); 
40               proxy = createConnectionProxy(); 
41           } catch (SQLException e) { 
42               e.printStackTrace(); 
43           } 
44       } 
45    
46       public void commit() throws TransactionException { 
47           try { 
48               conn.commit(); 
49           } catch (SQLException e) { 
50               throw new TransactionException(e); 
51           } 
52       } 
53    
54       public void rollback() throws TransactionException { 
55           try { 
56               conn.rollback(); 
57           } catch (SQLException e) { 
58               throw new TransactionException(e); 
59           } 
60       } 
61    
62       public Connection getConnection() { 
63           return proxy; 
64       } 
65    
66       private Connection createConnectionProxy() { 
67           return (Connection) Proxy.newProxyInstance( 
68                   getClass().getClassLoader(), new Class[]{Connection.class}, new ConnectionProxy(conn)); 
69       } 
70    
71       private static class ConnectionProxy implements InvocationHandler { 
72           private Connection delegate; 
73    
74           ConnectionProxy(Connection delegate) { 
75               this.delegate = delegate; 
76           } 
77    
78           public Object invoke(Object proxy, Method method, Object[] args) 
79                   throws Throwable { 
80               if (method.getName().equalsIgnoreCase("commit")) { 
81                   return null; 
82               } else if (method.getName().equalsIgnoreCase("rollback")) { 
83                   return null; 
84               } 
85               return method.invoke(delegate, args); 
86           } 
87       } 
88   } 
89