Repository: tomee Updated Branches: refs/heads/tomee-1.7.x ae7f37b76 -> ded183522
TOMEE-1580 issue with p.xml root url when p.mlx is in a jar + trying to fix datasource url in p.xml properties + TOMEE-1585 fix concurrency in live registry of base ejb proxy handler (all are backport from master) Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/ded18352 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/ded18352 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/ded18352 Branch: refs/heads/tomee-1.7.x Commit: ded1835221b19c7768ad5f0963a0a1f40e6d6bc2 Parents: ae7f37b Author: Romain Manni-Bucau <rmannibu...@apache.org> Authored: Fri May 15 15:30:29 2015 +0200 Committer: Romain Manni-Bucau <rmannibu...@apache.org> Committed: Fri May 15 15:30:29 2015 +0200 ---------------------------------------------------------------------- .../apache/openejb/config/AppInfoBuilder.java | 16 +++++++++++ .../apache/openejb/config/ReadDescriptors.java | 7 +++-- .../openejb/core/ivm/BaseEjbProxyHandler.java | 30 +++++++++++--------- 3 files changed, 37 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/ded18352/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java b/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java index c2517cd..3b9c86f 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java @@ -97,6 +97,8 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; import static org.apache.openejb.util.URLs.toFile; /** @@ -845,6 +847,13 @@ class AppInfoBuilder { info.properties.setProperty(ECLIPSELINK_SESSION_CUSTOMIZER, PREFIX_SESSION_CUSTOMIZER); } } + + for (final String key : singletonList("eclipselink.jdbc.sequence-connection-pool.non-jta-data-source")) { + final String ds = info.properties.getProperty(key); + if (ds != null && !ds.contains(":") /* java:, openejb:, other: namespace */) { + info.properties.setProperty(key, "java:openejb/Resource/" + ds); + } + } } else if (info.provider == null || "org.apache.openjpa.persistence.PersistenceProviderImpl".equals(info.provider)) { // Apply the overrides that apply to all persistence units of this provider @@ -895,6 +904,13 @@ class AppInfoBuilder { // Apply the overrides that apply to just this persistence unit override(appModule.getProperties(), info); + + for (final String key : asList("javax.persistence.jtaDataSource", "javax.persistence.nonJtaDataSource")) { + final String ds = info.properties.getProperty(key); + if (ds != null && !ds.contains(":") /* java:, openejb:, other: namespace */) { + info.properties.setProperty(key, "java:openejb/Resource/" + ds); + } + } } private static void overrideFromSystemProp(final PersistenceUnitInfo info) { http://git-wip-us.apache.org/repos/asf/tomee/blob/ded18352/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java b/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java index aaf31ed..5cd9f84 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java @@ -146,9 +146,12 @@ public class ReadDescriptors implements DynamicDeployer { path = file.getAbsolutePath(); if (file.getName().endsWith("persistence.xml")) { - final String parent = file.getParentFile().getName(); + final File parentFile = file.getParentFile(); + final String parent = parentFile.getName(); if (parent.equalsIgnoreCase("WEB-INF") || parent.equalsIgnoreCase("META-INF")) { - file = file.getParentFile().getParentFile(); + file = parentFile.getParentFile(); + } else if (parent.equalsIgnoreCase("lib") && "WEB-INF".equals(parentFile.getParentFile().getName())) { + file = parentFile.getParentFile().getParentFile(); } else { // we don't really know so simply go back (users will often put persistence.xml in root resource folder with arquillian) file = file.getParentFile(); } http://git-wip-us.apache.org/repos/asf/tomee/blob/ded18352/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java b/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java index 2a01773..34f9ef7 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java @@ -52,6 +52,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.WeakHashMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import java.util.concurrent.locks.ReentrantLock; import javax.ejb.AccessLocalException; import javax.ejb.EJBException; @@ -608,20 +610,20 @@ public abstract class BaseEjbProxyHandler implements InvocationHandler, Serializ protected abstract Object _writeReplace(Object proxy) throws ObjectStreamException; protected void registerHandler(final Object key, final BaseEjbProxyHandler handler) { - HashSet set = (HashSet) getLiveHandleRegistry().get(key); - if (set != null) { - final ReentrantLock l = lock; - l.lock(); - - try { - set.add(handler); - } finally { - l.unlock(); - } - } else { + Set set = (Set) getLiveHandleRegistry().get(key); + if (set == null) { set = new HashSet(); + final Object existing = getLiveHandleRegistry().putIfAbsent(key, set); + if (existing != null) { + set = Set.class.cast(existing); + } + } + final ReentrantLock l = lock; + l.lock(); + try { set.add(handler); - getLiveHandleRegistry().put(key, set); + } finally { + l.unlock(); } } @@ -640,7 +642,7 @@ public abstract class BaseEjbProxyHandler implements InvocationHandler, Serializ this.beanContextRef = new WeakReference<BeanContext>(beanContext); } - public HashMap getLiveHandleRegistry() { + public ConcurrentMap getLiveHandleRegistry() { final BeanContext beanContext = getBeanContext(); ProxyRegistry proxyRegistry = beanContext.get(ProxyRegistry.class); if (proxyRegistry == null) { @@ -675,6 +677,6 @@ public abstract class BaseEjbProxyHandler implements InvocationHandler, Serializ private static class ProxyRegistry { - protected final HashMap liveHandleRegistry = new HashMap(); + protected final ConcurrentMap liveHandleRegistry = new ConcurrentHashMap(); } }