From 60a29259da1137c77b1b6f7f50219f06133c27fd Mon Sep 17 00:00:00 2001 From: erik Date: Sun, 4 Apr 2010 20:15:11 +0000 Subject: [PATCH] --- support/test/eclipselink/pom.xml | 49 +++++++++++++++ .../eclipselink/EclipselinkJpaCustomizer.java | 30 ++++++++++ .../eclipselink/EclipselinkTables.java | 20 +++++++ .../eclipselink/JndiSessionCustomizer.java | 59 +++++++++++++++++++ ....wamblee.support.persistence.JpaCustomizer | 1 + .../eclipselink/DatabaseUtilsTest.java | 23 ++++++++ .../eclipselink/MyEntityExampleTest.java | 29 +++++++++ support/test/pom.xml | 2 + support/test/toplink-essentials/pom.xml | 50 ++++++++++++++++ .../toplink/JndiSessionCustomizer.java | 59 +++++++++++++++++++ .../toplink/ToplinkJpaCustomizer.java | 30 ++++++++++ .../persistence/toplink/ToplinkTables.java | 20 +++++++ ....wamblee.support.persistence.JpaCustomizer | 1 + .../toplink/DatabaseUtilsTest.java | 23 ++++++++ .../toplink/MyEntityExampleTest.java | 29 +++++++++ 15 files changed, 425 insertions(+) create mode 100644 support/test/eclipselink/pom.xml create mode 100644 support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/EclipselinkJpaCustomizer.java create mode 100644 support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/EclipselinkTables.java create mode 100644 support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/JndiSessionCustomizer.java create mode 100644 support/test/eclipselink/src/main/resources/META-INF/services/org.wamblee.support.persistence.JpaCustomizer create mode 100644 support/test/eclipselink/src/test/java/org/wamblee/support/persistence/eclipselink/DatabaseUtilsTest.java create mode 100644 support/test/eclipselink/src/test/java/org/wamblee/support/persistence/eclipselink/MyEntityExampleTest.java create mode 100644 support/test/toplink-essentials/pom.xml create mode 100644 support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/JndiSessionCustomizer.java create mode 100644 support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/ToplinkJpaCustomizer.java create mode 100644 support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/ToplinkTables.java create mode 100644 support/test/toplink-essentials/src/main/resources/META-INF/services/org.wamblee.support.persistence.JpaCustomizer create mode 100644 support/test/toplink-essentials/src/test/java/org/wamblee/support/persistence/toplink/DatabaseUtilsTest.java create mode 100644 support/test/toplink-essentials/src/test/java/org/wamblee/support/persistence/toplink/MyEntityExampleTest.java diff --git a/support/test/eclipselink/pom.xml b/support/test/eclipselink/pom.xml new file mode 100644 index 00000000..271d05a2 --- /dev/null +++ b/support/test/eclipselink/pom.xml @@ -0,0 +1,49 @@ + + + + org.wamblee + wamblee-utils + 0.2-SNAPSHOT + + + 4.0.0 + org.wamblee + wamblee-support-test-eclipselink + jar + /support/test/eclipselink + http://wamblee.org + + + + org.wamblee + wamblee-support-test-enterprise + 0.2-SNAPSHOT + + + + org.wamblee + wamblee-support-test-enterprise + 0.2-SNAPSHOT + test-jar + + + + org.dbunit + dbunit + + + + javax.persistence + persistence-api + + + + org.eclipse.persistence + eclipselink + + + + + diff --git a/support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/EclipselinkJpaCustomizer.java b/support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/EclipselinkJpaCustomizer.java new file mode 100644 index 00000000..856b0519 --- /dev/null +++ b/support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/EclipselinkJpaCustomizer.java @@ -0,0 +1,30 @@ +package org.wamblee.support.persistence.eclipselink; + +import java.util.Map; + +import org.dbunit.dataset.filter.ITableFilterSimple; +import org.wamblee.support.persistence.JpaCustomizer; +import org.wamblee.support.persistence.PersistenceUnitDescription; + +public class EclipselinkJpaCustomizer implements JpaCustomizer { + + public EclipselinkJpaCustomizer() { + // Empty + } + + @Override + public void customize(PersistenceUnitDescription aPersistenceUnit, Map aJpaProperties) { + // Hack to make JNDI lookup of the datasource work with toplink + aJpaProperties.put("eclipselink.session.customizer", JndiSessionCustomizer.class + .getName()); + + // DDL generation for toplink + aJpaProperties.put("eclipselink.ddl-generation", "create-tables"); + } + + @Override + public ITableFilterSimple getJpaTables() { + return new EclipselinkTables(); + } + +} diff --git a/support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/EclipselinkTables.java b/support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/EclipselinkTables.java new file mode 100644 index 00000000..d4df0ddd --- /dev/null +++ b/support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/EclipselinkTables.java @@ -0,0 +1,20 @@ +package org.wamblee.support.persistence.eclipselink; + +import java.util.Arrays; +import java.util.List; + +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.filter.ITableFilterSimple; + +/** + * Toplink-specific tables. + */ +public class EclipselinkTables implements ITableFilterSimple { + + private static final List TABLES = Arrays.asList(new String[] { "SEQUENCE" } ); + + public boolean accept(String aTableName) throws DataSetException { + return TABLES.contains(aTableName); + } + +} diff --git a/support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/JndiSessionCustomizer.java b/support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/JndiSessionCustomizer.java new file mode 100644 index 00000000..9b856f05 --- /dev/null +++ b/support/test/eclipselink/src/main/java/org/wamblee/support/persistence/eclipselink/JndiSessionCustomizer.java @@ -0,0 +1,59 @@ +package org.wamblee.support.persistence.eclipselink; + +import javax.naming.Context; +import javax.naming.InitialContext; + +import org.eclipse.persistence.config.SessionCustomizer; +import org.eclipse.persistence.sessions.DatabaseLogin; +import org.eclipse.persistence.sessions.JNDIConnector; +import org.eclipse.persistence.sessions.Session; +import org.eclipse.persistence.sessions.server.ServerSession; + +/** + * See http://wiki.eclipse.org/Customizing_the_EclipseLink_Application_(ELUG) Use for clients that would like to use a + * JTA SE pu instead of a RESOURCE_LOCAL SE pu. + * + * This utility also makes sure that using a persistence.xml with a JTA datasource works in a standalone Java SE + * environment together with our JNDI stub. + */ +public class JndiSessionCustomizer + implements SessionCustomizer { + + public JndiSessionCustomizer() { + // Empty. + } + + /** + * Get a dataSource connection and set it on the session with lookupType=STRING_LOOKUP + */ + public void customize(Session session) throws Exception { + JNDIConnector connector = null; + Context context = null; + try { + context = new InitialContext(); + if(null != context) { + connector = (JNDIConnector)session.getLogin().getConnector(); // possible CCE + // Change from COMPOSITE_NAME_LOOKUP to STRING_LOOKUP + // Note: if both jta and non-jta elements exist this will only change the first one - and may still result in + // the COMPOSITE_NAME_LOOKUP being set + // Make sure only jta-data-source is in persistence.xml with no non-jta-data-source property set + connector.setLookupType(JNDIConnector.STRING_LOOKUP); + + // Or, if you are specifying both JTA and non-JTA in your persistence.xml then set both connectors to be safe + JNDIConnector writeConnector = (JNDIConnector)session.getLogin().getConnector(); + writeConnector.setLookupType(JNDIConnector.STRING_LOOKUP); + JNDIConnector readConnector = + (JNDIConnector)((DatabaseLogin)((ServerSession)session).getReadConnectionPool().getLogin()).getConnector(); + readConnector.setLookupType(JNDIConnector.STRING_LOOKUP); + + System.out.println("JndiSessionCustomizer: configured " + connector.getName()); + } + else { + throw new Exception("JndiSessionCustomizer: Context is null"); + } + } + catch(Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/support/test/eclipselink/src/main/resources/META-INF/services/org.wamblee.support.persistence.JpaCustomizer b/support/test/eclipselink/src/main/resources/META-INF/services/org.wamblee.support.persistence.JpaCustomizer new file mode 100644 index 00000000..35638de1 --- /dev/null +++ b/support/test/eclipselink/src/main/resources/META-INF/services/org.wamblee.support.persistence.JpaCustomizer @@ -0,0 +1 @@ +org.wamblee.support.persistence.eclipselink.EclipselinkJpaCustomizer diff --git a/support/test/eclipselink/src/test/java/org/wamblee/support/persistence/eclipselink/DatabaseUtilsTest.java b/support/test/eclipselink/src/test/java/org/wamblee/support/persistence/eclipselink/DatabaseUtilsTest.java new file mode 100644 index 00000000..870e20a2 --- /dev/null +++ b/support/test/eclipselink/src/test/java/org/wamblee/support/persistence/eclipselink/DatabaseUtilsTest.java @@ -0,0 +1,23 @@ +package org.wamblee.support.persistence.eclipselink; + +import static junit.framework.Assert.assertEquals; + +import javax.persistence.EntityManager; +import javax.sql.DataSource; + +import org.dbunit.IDatabaseTester; +import org.dbunit.dataset.ITable; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.wamblee.support.persistence.Database; +import org.wamblee.support.persistence.DatabaseBuilder; +import org.wamblee.support.persistence.DatabaseUtils; +import org.wamblee.support.persistence.DatabaseUtilsTestBase; +import org.wamblee.support.persistence.JpaBuilder; +import org.wamblee.support.persistence.PersistenceUnitDescription; +import org.wamblee.support.persistence.JpaBuilder.JpaUnitOfWork; + +public class DatabaseUtilsTest extends DatabaseUtilsTestBase { + // Empty, all tests inherited +} diff --git a/support/test/eclipselink/src/test/java/org/wamblee/support/persistence/eclipselink/MyEntityExampleTest.java b/support/test/eclipselink/src/test/java/org/wamblee/support/persistence/eclipselink/MyEntityExampleTest.java new file mode 100644 index 00000000..84c3fff5 --- /dev/null +++ b/support/test/eclipselink/src/test/java/org/wamblee/support/persistence/eclipselink/MyEntityExampleTest.java @@ -0,0 +1,29 @@ +package org.wamblee.support.persistence.eclipselink; + +import javax.persistence.EntityManager; +import javax.persistence.Persistence; +import javax.sql.DataSource; + +import org.dbunit.DataSourceDatabaseTester; +import org.dbunit.DatabaseTestCase; +import org.dbunit.IDatabaseTester; +import org.dbunit.dataset.ITable; +import org.dbunit.dataset.filter.ITableFilterSimple; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.wamblee.support.persistence.DatabaseUtils; +import org.wamblee.support.persistence.JpaBuilder; +import org.wamblee.support.persistence.JpaTester; +import org.wamblee.support.persistence.MyEntityExampleTestBase; +import org.wamblee.support.persistence.JpaBuilder.JpaUnitOfWork; + +import static junit.framework.Assert.*; + + +/** + * This class shows an example of how to test an entity using jpa. + */ +public class MyEntityExampleTest extends MyEntityExampleTestBase { + // Empty, all tests are inherited +} diff --git a/support/test/pom.xml b/support/test/pom.xml index 0952eee7..1a2617fc 100644 --- a/support/test/pom.xml +++ b/support/test/pom.xml @@ -18,5 +18,7 @@ enterprise hibernate + eclipselink + toplink-essentials diff --git a/support/test/toplink-essentials/pom.xml b/support/test/toplink-essentials/pom.xml new file mode 100644 index 00000000..07af9267 --- /dev/null +++ b/support/test/toplink-essentials/pom.xml @@ -0,0 +1,50 @@ + + + + org.wamblee + wamblee-utils + 0.2-SNAPSHOT + + + 4.0.0 + org.wamblee + wamblee-support-test-toplink-essentials + jar + /support/test/toplinkessentials + http://wamblee.org + + + + org.wamblee + wamblee-support-test-enterprise + 0.2-SNAPSHOT + + + + org.wamblee + wamblee-support-test-enterprise + 0.2-SNAPSHOT + test-jar + + + + org.dbunit + dbunit + + + + javax.persistence + persistence-api + + + + toplink.essentials + toplink-essentials + + + + + + diff --git a/support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/JndiSessionCustomizer.java b/support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/JndiSessionCustomizer.java new file mode 100644 index 00000000..814fe593 --- /dev/null +++ b/support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/JndiSessionCustomizer.java @@ -0,0 +1,59 @@ +package org.wamblee.support.persistence.toplink; + +import javax.naming.Context; +import javax.naming.InitialContext; + +import oracle.toplink.essentials.jndi.JNDIConnector; +import oracle.toplink.essentials.sessions.DatabaseLogin; +import oracle.toplink.essentials.sessions.Session; +import oracle.toplink.essentials.threetier.ServerSession; +import oracle.toplink.essentials.tools.sessionconfiguration.SessionCustomizer; + +/** + * See http://wiki.eclipse.org/Customizing_the_EclipseLink_Application_(ELUG) Use for clients that would like to use a + * JTA SE pu instead of a RESOURCE_LOCAL SE pu. + * + * This utility also makes sure that using a persistence.xml with a JTA datasource works in a standalone Java SE + * environment together with our JNDI stub. + */ +public class JndiSessionCustomizer + implements SessionCustomizer { + + public JndiSessionCustomizer() { + // Empty. + } + + /** + * Get a dataSource connection and set it on the session with lookupType=STRING_LOOKUP + */ + public void customize(Session session) throws Exception { + JNDIConnector connector = null; + Context context = null; + try { + context = new InitialContext(); + if(null != context) { + connector = (JNDIConnector)session.getLogin().getConnector(); // possible CCE + // Change from COMPOSITE_NAME_LOOKUP to STRING_LOOKUP + // Note: if both jta and non-jta elements exist this will only change the first one - and may still result in + // the COMPOSITE_NAME_LOOKUP being set + // Make sure only jta-data-source is in persistence.xml with no non-jta-data-source property set + connector.setLookupType(JNDIConnector.STRING_LOOKUP); + + // Or, if you are specifying both JTA and non-JTA in your persistence.xml then set both connectors to be safe + JNDIConnector writeConnector = (JNDIConnector)session.getLogin().getConnector(); + writeConnector.setLookupType(JNDIConnector.STRING_LOOKUP); + JNDIConnector readConnector = + (JNDIConnector)((DatabaseLogin)((ServerSession)session).getReadConnectionPool().getLogin()).getConnector(); + readConnector.setLookupType(JNDIConnector.STRING_LOOKUP); + + System.out.println("JndiSessionCustomizer: configured " + connector.getName()); + } + else { + throw new Exception("JndiSessionCustomizer: Context is null"); + } + } + catch(Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/ToplinkJpaCustomizer.java b/support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/ToplinkJpaCustomizer.java new file mode 100644 index 00000000..5ba15e84 --- /dev/null +++ b/support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/ToplinkJpaCustomizer.java @@ -0,0 +1,30 @@ +package org.wamblee.support.persistence.toplink; + +import java.util.Map; + +import org.dbunit.dataset.filter.ITableFilterSimple; +import org.wamblee.support.persistence.JpaCustomizer; +import org.wamblee.support.persistence.PersistenceUnitDescription; + +public class ToplinkJpaCustomizer implements JpaCustomizer { + + public ToplinkJpaCustomizer() { + // Empty + } + + @Override + public void customize(PersistenceUnitDescription aPersistenceUnit, Map aJpaProperties) { + // Hack to make JNDI lookup of the datasource work with toplink + aJpaProperties.put("toplink.session.customizer", JndiSessionCustomizer.class + .getName()); + + // DDL generation for toplink + aJpaProperties.put("toplink.ddl-generation", "create-tables"); + } + + @Override + public ITableFilterSimple getJpaTables() { + return new ToplinkTables(); + } + +} diff --git a/support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/ToplinkTables.java b/support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/ToplinkTables.java new file mode 100644 index 00000000..cd3a0562 --- /dev/null +++ b/support/test/toplink-essentials/src/main/java/org/wamblee/support/persistence/toplink/ToplinkTables.java @@ -0,0 +1,20 @@ +package org.wamblee.support.persistence.toplink; + +import java.util.Arrays; +import java.util.List; + +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.filter.ITableFilterSimple; + +/** + * Toplink-specific tables. + */ +public class ToplinkTables implements ITableFilterSimple { + + private static final List TABLES = Arrays.asList(new String[] { "SEQUENCE" } ); + + public boolean accept(String aTableName) throws DataSetException { + return TABLES.contains(aTableName); + } + +} diff --git a/support/test/toplink-essentials/src/main/resources/META-INF/services/org.wamblee.support.persistence.JpaCustomizer b/support/test/toplink-essentials/src/main/resources/META-INF/services/org.wamblee.support.persistence.JpaCustomizer new file mode 100644 index 00000000..82d1265a --- /dev/null +++ b/support/test/toplink-essentials/src/main/resources/META-INF/services/org.wamblee.support.persistence.JpaCustomizer @@ -0,0 +1 @@ +org.wamblee.support.persistence.toplink.ToplinkJpaCustomizer diff --git a/support/test/toplink-essentials/src/test/java/org/wamblee/support/persistence/toplink/DatabaseUtilsTest.java b/support/test/toplink-essentials/src/test/java/org/wamblee/support/persistence/toplink/DatabaseUtilsTest.java new file mode 100644 index 00000000..095109d3 --- /dev/null +++ b/support/test/toplink-essentials/src/test/java/org/wamblee/support/persistence/toplink/DatabaseUtilsTest.java @@ -0,0 +1,23 @@ +package org.wamblee.support.persistence.toplink; + +import static junit.framework.Assert.assertEquals; + +import javax.persistence.EntityManager; +import javax.sql.DataSource; + +import org.dbunit.IDatabaseTester; +import org.dbunit.dataset.ITable; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.wamblee.support.persistence.Database; +import org.wamblee.support.persistence.DatabaseBuilder; +import org.wamblee.support.persistence.DatabaseUtils; +import org.wamblee.support.persistence.DatabaseUtilsTestBase; +import org.wamblee.support.persistence.JpaBuilder; +import org.wamblee.support.persistence.PersistenceUnitDescription; +import org.wamblee.support.persistence.JpaBuilder.JpaUnitOfWork; + +public class DatabaseUtilsTest extends DatabaseUtilsTestBase { + // Empty, all tests inherited +} diff --git a/support/test/toplink-essentials/src/test/java/org/wamblee/support/persistence/toplink/MyEntityExampleTest.java b/support/test/toplink-essentials/src/test/java/org/wamblee/support/persistence/toplink/MyEntityExampleTest.java new file mode 100644 index 00000000..415ee70f --- /dev/null +++ b/support/test/toplink-essentials/src/test/java/org/wamblee/support/persistence/toplink/MyEntityExampleTest.java @@ -0,0 +1,29 @@ +package org.wamblee.support.persistence.toplink; + +import javax.persistence.EntityManager; +import javax.persistence.Persistence; +import javax.sql.DataSource; + +import org.dbunit.DataSourceDatabaseTester; +import org.dbunit.DatabaseTestCase; +import org.dbunit.IDatabaseTester; +import org.dbunit.dataset.ITable; +import org.dbunit.dataset.filter.ITableFilterSimple; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.wamblee.support.persistence.DatabaseUtils; +import org.wamblee.support.persistence.JpaBuilder; +import org.wamblee.support.persistence.JpaTester; +import org.wamblee.support.persistence.MyEntityExampleTestBase; +import org.wamblee.support.persistence.JpaBuilder.JpaUnitOfWork; + +import static junit.framework.Assert.*; + + +/** + * This class shows an example of how to test an entity using jpa. + */ +public class MyEntityExampleTest extends MyEntityExampleTestBase { + // Empty, all tests are inherited +} -- 2.31.1