diff --git a/zanata-war/src/test/java/org/zanata/jdbc/ConnectionWrapper.java b/zanata-war/src/main/java/org/zanata/database/ConnectionWrapper.java similarity index 99% rename from zanata-war/src/test/java/org/zanata/jdbc/ConnectionWrapper.java rename to zanata-war/src/main/java/org/zanata/database/ConnectionWrapper.java index f4f9909195..fb7dc47159 100644 --- a/zanata-war/src/test/java/org/zanata/jdbc/ConnectionWrapper.java +++ b/zanata-war/src/main/java/org/zanata/database/ConnectionWrapper.java @@ -19,7 +19,7 @@ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ -package org.zanata.jdbc; +package org.zanata.database; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; diff --git a/zanata-war/src/test/java/org/zanata/jdbc/ResultSetWrapper.java b/zanata-war/src/main/java/org/zanata/database/ResultSetWrapper.java similarity index 99% rename from zanata-war/src/test/java/org/zanata/jdbc/ResultSetWrapper.java rename to zanata-war/src/main/java/org/zanata/database/ResultSetWrapper.java index 5122b0f3d7..34f94dbad5 100644 --- a/zanata-war/src/test/java/org/zanata/jdbc/ResultSetWrapper.java +++ b/zanata-war/src/main/java/org/zanata/database/ResultSetWrapper.java @@ -19,7 +19,7 @@ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ -package org.zanata.jdbc; +package org.zanata.database; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; diff --git a/zanata-war/src/test/java/org/zanata/jdbc/StatementWrapper.java b/zanata-war/src/main/java/org/zanata/database/StatementWrapper.java similarity index 99% rename from zanata-war/src/test/java/org/zanata/jdbc/StatementWrapper.java rename to zanata-war/src/main/java/org/zanata/database/StatementWrapper.java index 34e1b08f31..a258a52f37 100644 --- a/zanata-war/src/test/java/org/zanata/jdbc/StatementWrapper.java +++ b/zanata-war/src/main/java/org/zanata/database/StatementWrapper.java @@ -19,7 +19,7 @@ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ -package org.zanata.jdbc; +package org.zanata.database; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; diff --git a/zanata-war/src/test/java/org/zanata/jdbc/StreamingResultSetSQLException.java b/zanata-war/src/main/java/org/zanata/database/StreamingResultSetSQLException.java similarity index 98% rename from zanata-war/src/test/java/org/zanata/jdbc/StreamingResultSetSQLException.java rename to zanata-war/src/main/java/org/zanata/database/StreamingResultSetSQLException.java index 79cd2215be..534b884b46 100644 --- a/zanata-war/src/test/java/org/zanata/jdbc/StreamingResultSetSQLException.java +++ b/zanata-war/src/main/java/org/zanata/database/StreamingResultSetSQLException.java @@ -19,7 +19,7 @@ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ -package org.zanata.jdbc; +package org.zanata.database; import java.sql.SQLException; diff --git a/zanata-war/src/test/java/org/zanata/dao/WrappedConnectionProvider.java b/zanata-war/src/main/java/org/zanata/database/WrappedConnectionProvider.java similarity index 81% rename from zanata-war/src/test/java/org/zanata/dao/WrappedConnectionProvider.java rename to zanata-war/src/main/java/org/zanata/database/WrappedConnectionProvider.java index 600d56f248..eeca3a02d4 100644 --- a/zanata-war/src/test/java/org/zanata/dao/WrappedConnectionProvider.java +++ b/zanata-war/src/main/java/org/zanata/database/WrappedConnectionProvider.java @@ -19,13 +19,13 @@ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ -package org.zanata.dao; +package org.zanata.database; import java.sql.Connection; +import java.sql.DatabaseMetaData; import java.sql.SQLException; import org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl; -import org.zanata.jdbc.ConnectionWrapper; /** * This class wraps JDBC Connections/Statements/ResultSets to detect @@ -38,11 +38,22 @@ */ public class WrappedConnectionProvider extends DriverManagerConnectionProviderImpl { + private static final long serialVersionUID = 1L; + @Override public Connection getConnection() throws SQLException { Connection connection = super.getConnection(); - return ConnectionWrapper.wrap(connection); + DatabaseMetaData metaData = connection.getMetaData(); + String databaseName = metaData.getDatabaseProductName(); + if ("MySQL".equals(databaseName)) + { + return connection; + } + else + { + return ConnectionWrapper.wrap(connection); + } } } diff --git a/zanata-war/src/main/webapp-jboss/WEB-INF/classes/META-INF/persistence.xml b/zanata-war/src/main/webapp-jboss/WEB-INF/classes/META-INF/persistence.xml index 0f1d2d31c9..40b00951e2 100644 --- a/zanata-war/src/main/webapp-jboss/WEB-INF/classes/META-INF/persistence.xml +++ b/zanata-war/src/main/webapp-jboss/WEB-INF/classes/META-INF/persistence.xml @@ -57,7 +57,9 @@ - + + + diff --git a/zanata-war/src/test/java/org/zanata/dao/TextFlowStreamDAOTest.java b/zanata-war/src/test/java/org/zanata/dao/TextFlowStreamDAOTest.java index 3b4aae6fee..3f6e0a55bd 100644 --- a/zanata-war/src/test/java/org/zanata/dao/TextFlowStreamDAOTest.java +++ b/zanata-war/src/test/java/org/zanata/dao/TextFlowStreamDAOTest.java @@ -2,36 +2,21 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Iterator; - import lombok.Cleanup; -import lombok.extern.slf4j.Slf4j; import org.dbunit.operation.DatabaseOperation; import org.hamcrest.Matchers; -import org.hibernate.JDBCException; -import org.hibernate.Query; -import org.hibernate.ScrollMode; -import org.hibernate.ScrollableResults; import org.hibernate.Session; import org.hibernate.ejb.HibernateEntityManagerFactory; -import org.hibernate.jdbc.Work; -import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.zanata.ZanataDbunitJpaTest; -import org.zanata.jdbc.StreamingResultSetSQLException; import org.zanata.model.HProject; import org.zanata.model.HProjectIteration; import org.zanata.model.HTextFlow; import org.zanata.util.CloseableIterator; @Test(groups = { "jpa-tests" }) -@Slf4j public class TextFlowStreamDAOTest extends ZanataDbunitJpaTest { @@ -58,88 +43,6 @@ public void setup() projectIterDao = new ProjectIterationDAO(session); } - @Test - public void testWrapperWithNestedExecute() throws Exception - { - @Cleanup - ScrollableResults scroll1 = streamQuery("from HTextFlow"); - try - { - session.doWork(new Work() - { - @Override - public void execute(Connection connection) throws SQLException - { - Statement statement = connection.createStatement(); - statement.executeUpdate("delete from HTextFlow where 0=1"); - } - }); - Assert.fail("Failed to detect concurrent ResultSet - is WrappedConnectionProvider enabled?"); - } - catch (JDBCException e) - { - if (!(e.getSQLException() instanceof StreamingResultSetSQLException)) - { - throw e; - } - } - } - - @Test - public void testWrapperWithNestedStreaming() throws Exception - { - @Cleanup - ScrollableResults scroll1 = streamQuery("from HTextFlow"); - try - { - @Cleanup - ScrollableResults scroll2 = streamQuery("from HTextFlowTarget"); - Assert.fail("Failed to detect concurrent ResultSet - is WrappedConnectionProvider enabled?"); - } - catch (JDBCException e) - { - if (!(e.getSQLException() instanceof StreamingResultSetSQLException)) - { - throw e; - } - } - } - - @Test - public void testWrapperWithNestedResults() throws Exception - { - @Cleanup - ScrollableResults scroll1 = streamQuery("from HTextFlow"); - try - { - @Cleanup - ScrollableResults scroll2 = scrollQuery("from HTextFlowTarget"); - Assert.fail("Failed to detect concurrent ResultSet - is WrappedConnectionProvider enabled?"); - } - catch (JDBCException e) - { - if (!(e.getSQLException() instanceof StreamingResultSetSQLException)) - { - throw e; - } - } - } - - private ScrollableResults streamQuery(String queryString) - { - Query q = session.createQuery(queryString); - q.setFetchSize(Integer.MIN_VALUE); - ScrollableResults scroll = q.scroll(ScrollMode.FORWARD_ONLY); - return scroll; - } - - private ScrollableResults scrollQuery(String queryString) - { - Query q = session.createQuery(queryString); - ScrollableResults scroll = q.scroll(); - return scroll; - } - @Test public void findAllTextFlows() throws Exception { diff --git a/zanata-war/src/test/java/org/zanata/database/WrappedConnectionProviderTest.java b/zanata-war/src/test/java/org/zanata/database/WrappedConnectionProviderTest.java new file mode 100644 index 0000000000..68ad7363d1 --- /dev/null +++ b/zanata-war/src/test/java/org/zanata/database/WrappedConnectionProviderTest.java @@ -0,0 +1,128 @@ +package org.zanata.database; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; + +import lombok.Cleanup; + +import org.dbunit.operation.DatabaseOperation; +import org.hibernate.JDBCException; +import org.hibernate.Query; +import org.hibernate.ScrollMode; +import org.hibernate.ScrollableResults; +import org.hibernate.Session; +import org.hibernate.jdbc.Work; +import org.testng.Assert; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import org.zanata.ZanataDbunitJpaTest; + +@Test(groups = { "jpa-tests" }) +public class WrappedConnectionProviderTest extends ZanataDbunitJpaTest +{ + + private Session session; + + @Override + protected void prepareDBUnitOperations() + { + beforeTestOperations.add(new DataSetOperation("org/zanata/test/model/ProjectsData.dbunit.xml", DatabaseOperation.CLEAN_INSERT)); + beforeTestOperations.add(new DataSetOperation("org/zanata/test/model/TextFlowTestData.dbunit.xml", DatabaseOperation.CLEAN_INSERT)); + beforeTestOperations.add(new DataSetOperation("org/zanata/test/model/LocalesData.dbunit.xml", DatabaseOperation.CLEAN_INSERT)); + beforeTestOperations.add(new DataSetOperation("org/zanata/test/model/AccountData.dbunit.xml", DatabaseOperation.CLEAN_INSERT)); + } + + @BeforeMethod(firstTimeOnly = true) + public void setup() + { + session = getSession(); + } + + @Test + public void testWrapperWithNestedExecute() throws Exception + { + @Cleanup + ScrollableResults scroll1 = streamQuery("from HTextFlow"); + try + { + session.doWork(new Work() + { + @Override + public void execute(Connection connection) throws SQLException + { + Statement statement = connection.createStatement(); + statement.executeUpdate("delete from HTextFlow where 0=1"); + } + }); + concurrentResultSetNotDetected(); + } + catch (JDBCException e) + { + checkExceptionType(e); + } + } + + @Test + public void testWrapperWithNestedStreaming() throws Exception + { + @Cleanup + ScrollableResults scroll1 = streamQuery("from HTextFlow"); + try + { + @Cleanup + ScrollableResults scroll2 = streamQuery("from HTextFlowTarget"); + concurrentResultSetNotDetected(); + } + catch (JDBCException e) + { + checkExceptionType(e); + } + } + + @Test + public void testWrapperWithNestedResults() throws Exception + { + @Cleanup + ScrollableResults scroll1 = streamQuery("from HTextFlow"); + try + { + @Cleanup + ScrollableResults scroll2 = scrollQuery("from HTextFlowTarget"); + concurrentResultSetNotDetected(); + } + catch (JDBCException e) + { + checkExceptionType(e); + } + } + + private void concurrentResultSetNotDetected() + { + Assert.fail("Failed to detect concurrent ResultSet - is WrappedConnectionProvider enabled in persistence.xml?"); + } + + private void checkExceptionType(JDBCException e) + { + if (!(e.getSQLException() instanceof StreamingResultSetSQLException)) + { + throw e; + } + } + + private ScrollableResults streamQuery(String queryString) + { + Query q = session.createQuery(queryString); + q.setFetchSize(Integer.MIN_VALUE); + ScrollableResults scroll = q.scroll(ScrollMode.FORWARD_ONLY); + return scroll; + } + + private ScrollableResults scrollQuery(String queryString) + { + Query q = session.createQuery(queryString); + ScrollableResults scroll = q.scroll(); + return scroll; + } + +} diff --git a/zanata-war/src/test/resources/META-INF/persistence.xml b/zanata-war/src/test/resources/META-INF/persistence.xml index f9205ff03b..c57cff0c2c 100755 --- a/zanata-war/src/test/resources/META-INF/persistence.xml +++ b/zanata-war/src/test/resources/META-INF/persistence.xml @@ -60,7 +60,7 @@ - +