/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.etk.component.database;
import org.etk.component.base.transaction.TransactionService;
import org.etk.component.database.DBTableManager;
import org.etk.component.database.DatabaseService;
import org.etk.component.database.ExoDatasource;
import org.etk.component.database.impl.XAPoolTxSupportDatabaseService;
import org.etk.component.database.table.ExoLongID;
import org.etk.component.database.table.IDGenerator;
import org.etk.kernel.container.ApplicationContainer;
import org.etk.kernel.test.BasicTestCase;
import java.sql.Connection;
import java.sql.Statement;
import javax.transaction.UserTransaction;
/*
* Thu, May 15, 2003 @
* @author: Tuan Nguyen
* @version: $Id: TestDatabaseService.java 5332 2006-04-29 18:32:44Z geaz $
* @since: 0.0
* @email: tuan08@yahoo.com
*/
public class TestDatabaseService extends BasicTestCase {
public void testDatabaseService() throws Exception {
ApplicationContainer pcontainer = ApplicationContainer.getInstance();
DatabaseService service = (DatabaseService) pcontainer.getComponentInstanceOfType(XAPoolTxSupportDatabaseService.class);
assertNotNull(service);
assertConfiguration(service);
assertDBTableManager(service);
assertIDGenerator(service);
}
private void assertConfiguration(DatabaseService service) throws Exception {
TransactionService txservice = service.getTransactionService();
assertTrue(service != null);
// TransactionManager tm = txservice.getTransactionManager() ;
UserTransaction utx = txservice.getUserTransaction();
Connection conn = service.getConnection();
Statement s = null;
utx.begin();
try {
s = conn.createStatement();
s.addBatch("create table test (name varchar(25), data varchar(25))");
s.addBatch("insert into test values('name1', 'value1')");
s.executeBatch();
s.close();
/*
* Call conn.commit() will cause an exception since the connection is now
* part of a global transaction. You should call utx.commit() here
*/
conn.commit();
utx.commit();
} catch (Exception ex) {
System.err.println("ERROR: " + ex.getMessage());
utx.rollback();
}
// tm.rollback() ;
service.closeConnection(conn);
conn = service.getConnection();
s = conn.createStatement();
ResultSet rs = s.executeQuery("select name from test");
if (rs.next()) {
fail("Should not have any data in the test table");
} else {
System.err.println("Transaction work ok");
}
}
private void assertDBTableManager(DatabaseService service) throws Exception {
// System.err.println("\n\n===>ASERT DBTableManager\n");
ExoDatasource datasource = service.getDatasource();
DBTableManager dbManager = datasource.getDBTableManager();
assertEquals(dbManager.hasTable(Mock.class), false);
dbManager.createTable(Mock.class, true);
// Test meta data here
// ResultSetMetaData metaData = datasource.g
assertEquals(dbManager.hasTable(Mock.class), true);
dbManager.dropTable(Mock.class);
assertEquals(dbManager.hasTable(Mock.class), false);
// Test metadata here
// Connection conn = service.getConnection();
// Statement s = conn.createStatement();
// Table table = TestTable.class.getAnnotation(Table.class);
// ResultSet rs = s.executeQuery("SELECT * FROM " + table.name());
// ResultSetMetaData metaData = rs.getMetaData();
// for (int i = 1; i <= metaData.getColumnCount(); i++) {
// System.out.println("Information about column " +
// metaData.getColumnName(i) + ":\n" + "type: "
// + metaData.getColumnTypeName(i) + ", is nullable: " +
// metaData.isNullable(i) + "\n");
// }
// System.err.println("\n\n<===ASSERT DBTableManager\n");
}
private void assertIDGenerator(DatabaseService service) throws Exception {
ExoDatasource datasource = service.getDatasource();
// DBTableManager dbManager = datasource.getDBTableManager() ;
IDGenerator idGenerator = new IDGenerator(datasource);
// idGenerator.restartTracker();
for (int i = 0; i < 10; i++) {
System.out.println("\n=================> IDGenerator " + i + " : "
+ idGenerator.generateLongId(ExoLongID.class));
// if (i == 5) idGenerator.restartTracker();
}
idGenerator.restartTracker();
System.out.println("\n=================> IDGenerator " + 10 + " : "
+ idGenerator.generateLongId(ExoLongID.class));
}
}