1 package com.tctest; 2 3 import EDU.oswego.cs.dl.util.concurrent.CyclicBarrier; 4 5 import com.ibatis.common.resources.Resources; 6 import com.ibatis.dao.client.Dao; 7 import com.ibatis.dao.client.DaoException; 8 import com.ibatis.dao.client.DaoManager; 9 import com.ibatis.dao.client.DaoManagerBuilder; 10 import com.ibatis.dao.engine.transaction.ConnectionDaoTransaction; 11 import com.tc.object.config.ConfigVisitor; 12 import com.tc.object.config.DSOClientConfigHelper; 13 import com.tc.object.config.spec.CyclicBarrierSpec; 14 import com.tc.simulator.app.ApplicationConfig; 15 import com.tc.simulator.listener.ListenerProvider; 16 import com.tc.util.Assert; 17 import com.tctest.domain.Account; 18 import com.tctest.domain.AccountDAO; 19 import com.tctest.domain.Customer; 20 import com.tctest.domain.CustomerDAO; 21 import com.tctest.runner.AbstractTransparentApp; 22 import com.tctest.server.HSqlDBServer; 23 24 import java.io.Reader ; 25 import java.sql.Connection ; 26 import java.sql.PreparedStatement ; 27 28 public class IBatisSimpleDaoTestApp extends AbstractTransparentApp { 29 private CyclicBarrier barrier; 30 31 private AccountDAO accountDAO, dao; 32 33 private CustomerDAO customerDAO; 34 35 private Customer cus; 36 37 private HSqlDBServer dbServer = null; 38 39 public IBatisSimpleDaoTestApp(String appId, ApplicationConfig cfg, ListenerProvider listenerProvider) { 40 super(appId, cfg, listenerProvider); 41 barrier = new CyclicBarrier(getParticipantCount()); 42 } 43 44 public void run() { 45 try { 46 int id = barrier.barrier(); 47 48 try { 49 50 if (id == 0) { 51 setupDatabase(); 52 53 synchronized (accountDAO) { 54 Account acc = new Account(); 55 acc.setNumber("ASI-001"); 56 accountDAO.insertAccount(acc); 57 Customer cus = new Customer(); 58 cus.setEmailAddress("asi@yahoo.com"); 59 cus.setFirstName("Antonio"); 60 cus.setLastName("Si"); 61 cus.setAccount(acc); 62 customerDAO.insertCustomer(cus); 63 } 64 } 65 66 barrier.barrier(); 67 68 if (id == 1) { 69 synchronized (customerDAO) { 70 cus = customerDAO.selectCustomer(0); 71 Account acc = cus.getAccount(); 72 Assert.assertEquals("ASI-001", acc.getNumber()); 73 } 74 } 75 barrier.barrier(); 76 Assert.assertEquals("asi@yahoo.com", cus.getEmailAddress()); 77 Assert.assertEquals("Antonio", cus.getFirstName()); 78 Assert.assertEquals("Si", cus.getLastName()); 79 80 barrier.barrier(); 81 } finally { 82 if (id == 0) { 83 shutdownDatabase(); 84 } 85 } 86 87 } catch (Throwable e) { 88 notifyError(e); 89 } 90 91 } 92 93 private void setupDatabase() throws Exception { 94 try { 95 DaoManager daoManager = connectDatabase(); 96 dao = (AccountDAO) daoManager.getDao(AccountDAO.class); 97 98 Connection conn = getConnection(daoManager, dao); 99 PreparedStatement stmt = conn 100 .prepareStatement("create table ACCOUNT (acc_id int not null, acc_number varchar(80) null, constraint pk_acc_id primary key (acc_id))"); 101 stmt.execute(); 102 103 stmt = conn 104 .prepareStatement("create table CUSTOMER (cus_id int not null, cus_first_name varchar(80) null, cus_last_name varchar(80) null, cus_email varchar(80) null, cus_account_id varchar(80) null, constraint pk_cus_id primary key (cus_id))"); 105 stmt.execute(); 106 107 accountDAO = dao; 108 customerDAO = (CustomerDAO) daoManager.getDao(CustomerDAO.class); 109 } catch (Exception e) { 110 e.printStackTrace(System.err); 111 throw e; 112 } 113 } 114 115 private DaoManager connectDatabase() throws Exception { 116 dbServer = new HSqlDBServer(); 117 dbServer.start(); 118 Reader reader = Resources.getResourceAsReader("com/tctest/DAOMap.xml"); 119 DaoManager daoManager = DaoManagerBuilder.buildDaoManager(reader); 120 reader.close(); 121 return daoManager; 122 } 123 124 private void shutdownDatabase() throws Exception { 125 dbServer.stop(); 126 } 127 128 private Connection getConnection(DaoManager daoManager, Dao dao) { 129 com.ibatis.dao.client.DaoTransaction trans = daoManager.getTransaction(dao); 130 if (!(trans instanceof ConnectionDaoTransaction)) throw new DaoException( 131 "The DAO manager of type " 132 + daoManager.getClass().getName() 133 + " cannot supply a JDBC Connection for this template, and is therefore not" 134 + "supported by JdbcDaoTemplate."); 135 else return ((ConnectionDaoTransaction) trans).getConnection(); 136 } 137 138 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 139 String testClass = IBatisSimpleDaoTestApp.class.getName(); 140 141 config.getOrCreateSpec(testClass).addRoot("barrier", "barrier").addRoot("cus", "cus").addRoot("list", "list") 142 .addRoot("customerDAO", "customerDAO").addRoot("accountDAO", "accountDAO"); 143 144 config.addWriteAutolock("* " + testClass + "*.*(..)"); 145 config.addIncludePattern("com.tctest.domain.*"); 146 new CyclicBarrierSpec().visit(visitor, config); 147 148 config.addNewModule("clustered-cglib-2.1.3", "1.0.0"); 149 config.addNewModule("clustered-iBatis-2.2.0", "1.0.0"); 150 } 151 152 } 153 | Popular Tags |