You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2017/06/17 08:13:08 UTC
tomee git commit: Patch from Svetlin Zarev fixing the pojo usage of
@DataSourceDefinition
Repository: tomee
Updated Branches:
refs/heads/master 3e29ab90b -> ea6127f73
Patch from Svetlin Zarev fixing the pojo usage of @DataSourceDefinition
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/ea6127f7
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/ea6127f7
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/ea6127f7
Branch: refs/heads/master
Commit: ea6127f73299c5ce0e7b39e68e5cab4f7e6c036d
Parents: 3e29ab9
Author: rmannibucau <rm...@apache.org>
Authored: Sat Jun 17 10:13:02 2017 +0200
Committer: rmannibucau <rm...@apache.org>
Committed: Sat Jun 17 10:13:02 2017 +0200
----------------------------------------------------------------------
.../datasource/definition/DataSourceBean.java | 21 ++-----
.../definition/DataSourceDefinitionTest.java | 21 +++++++
.../definition/DataSourceServlet.java | 65 ++++++++++++++------
.../config/ConvertDataSourceDefinitions.java | 14 +++++
4 files changed, 88 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/ea6127f7/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceBean.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceBean.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceBean.java
index 1234ebd..8a304d5 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceBean.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceBean.java
@@ -21,10 +21,7 @@ import javax.annotation.Resource;
import javax.annotation.sql.DataSourceDefinition;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
-import javax.naming.InitialContext;
import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.SQLException;
@Stateless
@LocalBean
@@ -33,20 +30,14 @@ public class DataSourceBean {
@Resource(name = "jdbc/database")
private DataSource dataSource;
- public String getUrlFromInjectedDataSource() throws SQLException {
- return getDataSourceUrl(dataSource);
- }
-
- public String getUrlFromLookedUpDataSource() throws Exception {
- final InitialContext initialContext = new InitialContext();
- final DataSource ds = (DataSource) initialContext.lookup("java:comp/env/jdbc/database");
+ @Resource(name = "jdbc/pojodb")
+ private DataSource dataSourceFromPojo;
- return getDataSourceUrl(ds);
+ public DataSource getDataSource() {
+ return dataSource;
}
- private String getDataSourceUrl(DataSource dataSource) throws SQLException {
- try (Connection connection = dataSource.getConnection()) {
- return connection.getMetaData().getURL();
- }
+ public DataSource getDataSourceFromPojo() {
+ return dataSourceFromPojo;
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/ea6127f7/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceDefinitionTest.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceDefinitionTest.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceDefinitionTest.java
index 2691dc1..a5bb716 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceDefinitionTest.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceDefinitionTest.java
@@ -65,6 +65,7 @@ public class DataSourceDefinitionTest {
.addClass(DataSourceDefinitionTest.class)
.addClass(DataSourceServlet.class)
.addClass(DataSourceBean.class)
+ .addClass(DataSourcePojo.class)
.addClass(Runner.class)
.addAsLibraries(JarLocation.jarLocation(Test.class))
.addAsWebInfResource(new ClassLoaderAsset(CONTENT_LOCATION_EJB_JAR_XML), RESOURCE_EJB_JAR_XML)
@@ -89,10 +90,30 @@ public class DataSourceDefinitionTest {
}
@Test
+ public void testDataSourceFromPojoInjectionInServlet() throws IOException {
+ validateTest("testDataSourceFromPojoInjectionInServlet");
+ }
+
+ @Test
+ public void testDataSourceFromPojoLookUpFromServlet() throws IOException {
+ validateTest("testDataSourceFromPojoLookUpFromServlet");
+ }
+
+ @Test
public void testDataSourceLookUpFromEjb() throws IOException {
validateTest("testDataSourceLookUpFromEjb");
}
+ @Test
+ public void testDataSourceFromPojoInjectionInEjbDSFromPojo() throws IOException {
+ validateTest("testDataSourceFromPojoInjectionInEjbDSFromPojo");
+ }
+
+ @Test
+ public void testDataSourceFromPojoLookUpFromEjb() throws IOException {
+ validateTest("testDataSourceFromPojoLookUpFromEjb");
+ }
+
private void validateTest(String testName) throws IOException {
final String expectedOutput = testName + "=true";
http://git-wip-us.apache.org/repos/asf/tomee/blob/ea6127f7/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceServlet.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceServlet.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceServlet.java
index bd8664e..319777d 100644
--- a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceServlet.java
+++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasource/definition/DataSourceServlet.java
@@ -21,6 +21,7 @@ package org.apache.openejb.arquillian.tests.datasource.definition;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.naming.InitialContext;
+import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -34,10 +35,14 @@ import java.sql.Connection;
import java.sql.SQLException;
public class DataSourceServlet extends HttpServlet {
- private static final String EXPECTED_URL = "jdbc:hsqldb:mem:expected";
+ private static final String EXPECTED_URL_BEAN = "jdbc:hsqldb:mem:expected";
+ private static final String EXPECTED_URL_POJO = "jdbc:hsqldb:mem:pojo";
@Resource(name = "jdbc/database")
- DataSource dataSource;
+ DataSource dataSourceFromManagedBean;
+
+ @Resource(name = "jdbc/pojodb")
+ DataSource dataSourceFromPojo;
@EJB
DataSourceBean dataSourceBean;
@@ -59,33 +64,57 @@ public class DataSourceServlet extends HttpServlet {
}
public void testDataSourceInjectionInEjb() throws SQLException {
- final String dataSourceUrl = dataSourceBean.getUrlFromInjectedDataSource();
- if (!EXPECTED_URL.equals(dataSourceUrl)) {
- throw new IllegalStateException("[BEAN - INJECTION] Unexpected URL: " + dataSourceUrl);
- }
+ final DataSource ds = dataSourceBean.getDataSource();
+ verifyDataSource(ds, EXPECTED_URL_BEAN, "BEAN, INJECTION, DEF_FROM_MANAGED_BEAN");
}
public void testDataSourceLookUpFromEjb() throws Exception {
- final String dataSourceUrl = dataSourceBean.getUrlFromLookedUpDataSource();
- if (!EXPECTED_URL.equals(dataSourceUrl)) {
- throw new IllegalStateException("[BEAN - LOOKUP] Unexpected URL: " + dataSourceUrl);
- }
+ final DataSource ds = dataSourceBean.getDataSource();
+ verifyDataSource(ds, EXPECTED_URL_BEAN, "BEAN, LOOKUP, DEF_FROM_MANAGED_BEAN");
+ }
+
+ public void testDataSourceFromPojoInjectionInEjbDSFromPojo() throws SQLException {
+ final DataSource ds = dataSourceBean.getDataSourceFromPojo();
+ verifyDataSource(ds, EXPECTED_URL_POJO, "BEAN, INJECTION, DEF_FROM_POJO");
}
+ public void testDataSourceFromPojoLookUpFromEjb() throws Exception {
+ final DataSource ds = dataSourceBean.getDataSourceFromPojo();
+ verifyDataSource(ds, EXPECTED_URL_POJO, "BEAN, LOOKUP, DEF_FROM_POJO");
+ }
+
+
public void testDataSourceInjectionInServlet() throws SQLException {
- final String dataSourceUrl = getDataSourceUrl(dataSource);
- if (!EXPECTED_URL.equals(dataSourceUrl)) {
- throw new IllegalStateException("[SERVLET - INJECTION] Unexpected URL: " + dataSourceUrl);
- }
+ verifyDataSource(dataSourceFromManagedBean, EXPECTED_URL_BEAN, "SERVLET, INJECTION, DEF_FROM_MANAGED_BEAN");
}
public void testDataSourceLookUpFromServlet() throws Exception {
+ final DataSource ds = lookUpDataSource("java:comp/env/jdbc/database");
+ verifyDataSource(ds, EXPECTED_URL_BEAN, "SERVLET, LOOKUP, DEF_FROM_MANAGED_BEAN");
+ }
+
+ public void testDataSourceFromPojoInjectionInServlet() throws SQLException {
+ verifyDataSource(dataSourceFromPojo, EXPECTED_URL_POJO, "SERVLET, INJECTION, DEF_FROM_POJO");
+ }
+
+ public void testDataSourceFromPojoLookUpFromServlet() throws Exception {
+ final DataSource ds = lookUpDataSource("java:comp/env/jdbc/pojodb");
+ verifyDataSource(ds, EXPECTED_URL_POJO, "SERVLET, LOOKUP, DEF_FROM_POJO");
+ }
+
+ private DataSource lookUpDataSource(String name) throws NamingException {
final InitialContext initialContext = new InitialContext();
- final DataSource ds = (DataSource) initialContext.lookup("java:comp/env/jdbc/database");
+ return (DataSource) initialContext.lookup(name);
+ }
+
+ private void verifyDataSource(DataSource dataSource, String expectedUrl, String context) throws SQLException {
+ final String dataSourceUrl = getDataSourceUrl(dataSource);
- final String dataSourceUrl = getDataSourceUrl(ds);
- if (!EXPECTED_URL.equals(dataSourceUrl)) {
- throw new IllegalStateException("[SERVLET - LOOKUP] Unexpected URL: " + dataSourceUrl);
+ if (!expectedUrl.equals(dataSourceUrl)) {
+ throw new IllegalStateException("[" + context + "] "
+ + "Expected={URL=" + EXPECTED_URL_BEAN + "} "
+ + "Actual={URL=" + dataSourceUrl + "}"
+ );
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/ea6127f7/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java b/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java
index 568e95a..d7bb6f3 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java
@@ -29,6 +29,7 @@ import org.apache.openejb.util.PropertyPlaceHolderHelper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
/**
@@ -42,6 +43,7 @@ public class ConvertDataSourceDefinitions extends BaseConvertDefinitions {
final List<JndiConsumer> jndiConsumers = collectConsumers(appModule);
final KeyedCollection<String, DataSource> dataSources = new KeyedCollection<String, DataSource>();
+ final KeyedCollection<String, DataSource> dataSourcesFromCompManagedBeans = new KeyedCollection<String, DataSource>();
for (final JndiConsumer consumer : jndiConsumers) {
if (consumer == null) {
@@ -52,12 +54,24 @@ public class ConvertDataSourceDefinitions extends BaseConvertDefinitions {
/*
* TOMEE-2053: It may contain invalid datasource definitions
* because it is never updated with content from the ejb-jar.xml
+ * Wait until all other consumers have been processed, to safely
+ * decide which data sources to transfer;
*/
+
+ dataSourcesFromCompManagedBeans.addAll(consumer.getDataSource());
continue;
}
dataSources.addAll(consumer.getDataSource());
}
+ final Map<String, DataSource> dataSourcesMap = dataSources.toMap();
+ for(DataSource dataSource : dataSourcesFromCompManagedBeans){
+ //Interested only in DataSources that come from non-JndiConsumers
+ if(!dataSourcesMap.containsKey(dataSource.getKey())){
+ dataSources.add(dataSource);
+ }
+ }
+
for (final DataSource dataSource : dataSources) {
appModule.getResources().add(toResource(dataSource));
}