View Javadoc

1   package org.itracker;
2   
3   import com.sun.tools.internal.ws.processor.model.java.JavaArrayType;
4   import org.apache.log4j.Logger;
5   import org.dbunit.database.DatabaseConfig;
6   import org.dbunit.database.DatabaseConnection;
7   import org.dbunit.dataset.CompositeDataSet;
8   import org.dbunit.dataset.IDataSet;
9   import org.dbunit.dataset.xml.XmlDataSet;
10  import org.dbunit.ext.hsqldb.HsqldbDataTypeFactory;
11  import org.dbunit.operation.DatabaseOperation;
12  import org.hibernate.Session;
13  import org.hibernate.SessionFactory;
14  import org.itracker.services.ConfigurationService;
15  import org.itracker.services.util.SystemConfigurationUtilities;
16  import org.junit.After;
17  import org.junit.Before;
18  import org.junit.internal.runners.JUnit4ClassRunner;
19  import org.junit.runner.RunWith;
20  import org.springframework.mail.MailSender;
21  import org.springframework.mail.javamail.JavaMailSender;
22  import org.springframework.mail.javamail.JavaMailSenderImpl;
23  import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
24  import org.springframework.orm.hibernate3.SessionHolder;
25  import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
26  import org.springframework.transaction.support.TransactionSynchronizationManager;
27  
28  import javax.naming.InitialContext;
29  import javax.sql.DataSource;
30  import java.sql.SQLException;
31  import java.util.Properties;
32  
33  @RunWith(JUnit4ClassRunner.class)
34  public abstract class AbstractDependencyInjectionTest extends
35          AbstractDependencyInjectionSpringContextTests {
36  
37      private static final Logger log = Logger
38              .getLogger(AbstractDependencyInjectionSpringContextTests.class);
39      private DataSource dataSource;
40      private LocalSessionFactoryBean sessionFactoryBean;
41      public ClassLoader classLoader;
42      public IDataSet dataSet;
43      private SessionFactory sessionFactory;
44  
45      protected AbstractDependencyInjectionTest() {
46          classLoader = getClass().getClassLoader();
47      }
48  
49      @Override
50      public void onSetUp() throws Exception {
51          super.onSetUp();
52          sessionFactory = (SessionFactory) applicationContext
53                  .getBean("sessionFactory");
54          Session session = sessionFactory.openSession();
55          TransactionSynchronizationManager.bindResource(sessionFactory,
56                  new SessionHolder(session));
57  
58          dataSet = getDataSet();
59          DatabaseConnection dbConnection = null;
60          try {
61  
62              resetConfiguration();
63  
64              dbConnection = new DatabaseConnection(getDataSource().getConnection());
65              dbConnection.getConfig().setProperty(
66                      DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
67                      new HsqldbDataTypeFactory());
68  
69              if (dataSet != null) {
70                  DatabaseOperation.CLEAN_INSERT.execute(dbConnection, dataSet);
71              }
72  
73              if (!dbConnection.getConnection().getAutoCommit()) {
74                  dbConnection.getConnection().commit();
75              }
76          } catch (Exception e) {
77              log.error("onSetUp: failed to set up datasets", e);
78              throw e;
79          } finally {
80              if (null != dbConnection) {
81                  try {
82                      dbConnection.close();
83                  } catch (SQLException e) {
84                      log.warn("onSetUp: failed to close connection", e);
85                  }
86              }
87          }
88      }
89  
90      @Override
91      public void onTearDown() throws Exception {
92          DatabaseConnection dbConnection = null;
93          try {
94              dbConnection = new DatabaseConnection(getDataSource()
95                      .getConnection());
96  
97              if (dataSet != null) {
98                  DatabaseOperation.DELETE_ALL.execute(dbConnection, dataSet);
99              }
100 
101             if (!dbConnection.getConnection().getAutoCommit()) {
102                 dbConnection.getConnection().commit();
103             }
104 
105         } catch (Exception e) {
106             log.error("onTearDown: failed to tear down datasets", e);
107             throw e;
108         } finally {
109             TransactionSynchronizationManager.unbindResource(sessionFactory);
110             sessionFactoryBean.destroy();
111 
112 
113             if (null != dbConnection) {
114                 try {
115                     dbConnection.close();
116                 } catch (SQLException e) {
117                     log.warn("onTearDown: failed to close connection", e);
118                 }
119             }
120             super.onTearDown();
121         }
122     }
123 
124     final protected void resetConfiguration() {
125         ConfigurationService configurationService = (ConfigurationService) applicationContext
126                 .getBean("configurationService");
127 
128         SystemConfigurationUtilities.initializeAllLanguages(configurationService, true);
129         configurationService.initializeConfiguration();
130 
131         configurationService.resetConfigurationCache();
132     }
133 
134     private IDataSet getDataSet() throws Exception {
135         final String[] aDataSet = getDataSetFiles();
136         final IDataSet[] dataSets = new IDataSet[aDataSet.length];
137 
138         for (int i = 0; i < aDataSet.length; i++) {
139             dataSets[i] = new XmlDataSet(classLoader
140                     .getResourceAsStream(aDataSet[i]));
141         }
142         return new CompositeDataSet(dataSets);
143     }
144 
145     /**
146      * must make sure, that the order is correct, so no constraints will be
147      * violated.
148      *
149      * @return
150      */
151     protected abstract String[] getDataSetFiles();
152 
153     public LocalSessionFactoryBean getSessionFactoryBean() {
154         return sessionFactoryBean;
155     }
156 
157     public void setSessionFactoryBean(LocalSessionFactoryBean sessionFactoryBean) {
158         this.sessionFactoryBean = sessionFactoryBean;
159     }
160 
161     public DataSource getDataSource() {
162         return dataSource;
163     }
164 
165     public void setDataSource(DataSource dataSource) {
166         this.dataSource = dataSource;
167     }
168 
169     @Before
170     public final void callSetup() throws Exception {
171         super.setUp();
172     }
173 
174     @After
175     public final void callTeardown() throws Exception {
176         super.tearDown();
177     }
178 
179 }