KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > IBatisSimpleDaoTestApp


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 JavaDoc;
25 import java.sql.Connection JavaDoc;
26 import java.sql.PreparedStatement JavaDoc;
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 JavaDoc 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 JavaDoc e) {
88       notifyError(e);
89     }
90
91   }
92
93   private void setupDatabase() throws Exception JavaDoc {
94     try {
95       DaoManager daoManager = connectDatabase();
96       dao = (AccountDAO) daoManager.getDao(AccountDAO.class);
97
98       Connection JavaDoc conn = getConnection(daoManager, dao);
99       PreparedStatement JavaDoc 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 JavaDoc e) {
110       e.printStackTrace(System.err);
111       throw e;
112     }
113   }
114
115   private DaoManager connectDatabase() throws Exception JavaDoc {
116     dbServer = new HSqlDBServer();
117     dbServer.start();
118     Reader JavaDoc 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 JavaDoc {
125     dbServer.stop();
126   }
127
128   private Connection JavaDoc 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 JavaDoc 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