You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2017/04/18 12:55:29 UTC

[37/50] aries-jpa git commit: [ARIES-1689] added test to reproduce the problem

[ARIES-1689] added test to reproduce the problem

git-svn-id: https://svn.apache.org/repos/asf/aries/trunk/jpa@1785768 13f79535-47bb-0310-9956-ffa450edef68


Project: http://git-wip-us.apache.org/repos/asf/aries-jpa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-jpa/commit/8f23eb08
Tree: http://git-wip-us.apache.org/repos/asf/aries-jpa/tree/8f23eb08
Diff: http://git-wip-us.apache.org/repos/asf/aries-jpa/diff/8f23eb08

Branch: refs/heads/master
Commit: 8f23eb080bec9f59ca266e39b9669c77271fe7ca
Parents: 07a7609
Author: ggerla <gg...@13f79535-47bb-0310-9956-ffa450edef68>
Authored: Mon Mar 6 21:19:10 2017 +0000
Committer: ggerla <gg...@13f79535-47bb-0310-9956-ffa450edef68>
Committed: Mon Mar 6 21:19:10 2017 +0000

----------------------------------------------------------------------
 .../blueprint/impl/BlueprintContainerStub.java  |  51 +++++
 .../jpa/blueprint/impl/CoordinatorStub.java     |  50 +++++
 .../jpa/blueprint/impl/EntityManagerStub.java   | 206 +++++++++++++++++++
 .../jpa/blueprint/impl/JpaInterceptorTest.java  |  70 +++++++
 4 files changed, 377 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jpa/blob/8f23eb08/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/BlueprintContainerStub.java
----------------------------------------------------------------------
diff --git a/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/BlueprintContainerStub.java b/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/BlueprintContainerStub.java
new file mode 100644
index 0000000..85c20b5
--- /dev/null
+++ b/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/BlueprintContainerStub.java
@@ -0,0 +1,51 @@
+package org.apache.aries.jpa.blueprint.impl;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
+
+public class BlueprintContainerStub implements BlueprintContainer {
+
+    private Map<String, Object> instances;
+
+    public BlueprintContainerStub() {
+        instances = new HashMap<String, Object>();
+        instances.put("coordinator", new CoordinatorStub());
+        instances.put("em", new EntityManagerStub());
+    }
+
+    @Override
+    public Set<String> getComponentIds() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Object getComponentInstance(String id) {
+        if ("em".equals(id)) {
+            try {
+                Thread.sleep(3000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+        return instances.get(id);
+    }
+
+    @Override
+    public ComponentMetadata getComponentMetadata(String id) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public <T extends ComponentMetadata> Collection<T> getMetadata(Class<T> type) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/aries-jpa/blob/8f23eb08/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/CoordinatorStub.java
----------------------------------------------------------------------
diff --git a/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/CoordinatorStub.java b/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/CoordinatorStub.java
new file mode 100644
index 0000000..fe7b40e
--- /dev/null
+++ b/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/CoordinatorStub.java
@@ -0,0 +1,50 @@
+package org.apache.aries.jpa.blueprint.impl;
+
+import java.util.Collection;
+
+import org.osgi.service.coordinator.Coordination;
+import org.osgi.service.coordinator.Coordinator;
+import org.osgi.service.coordinator.Participant;
+
+public class CoordinatorStub implements Coordinator {
+
+    @Override
+    public Coordination create(String name, long timeMillis) {
+        return null;
+    }
+
+    @Override
+    public Coordination begin(String name, long timeMillis) {
+        return null;
+    }
+
+    @Override
+    public Coordination peek() {
+        return null;
+    }
+
+    @Override
+    public Coordination pop() {
+        return null;
+    }
+
+    @Override
+    public boolean fail(Throwable cause) {
+        return false;
+    }
+
+    @Override
+    public boolean addParticipant(Participant participant) {
+        return false;
+    }
+
+    @Override
+    public Collection<Coordination> getCoordinations() {
+        return null;
+    }
+
+    @Override
+    public Coordination getCoordination(long id) {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/aries-jpa/blob/8f23eb08/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/EntityManagerStub.java
----------------------------------------------------------------------
diff --git a/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/EntityManagerStub.java b/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/EntityManagerStub.java
new file mode 100644
index 0000000..ce51a33
--- /dev/null
+++ b/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/EntityManagerStub.java
@@ -0,0 +1,206 @@
+package org.apache.aries.jpa.blueprint.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.FlushModeType;
+import javax.persistence.LockModeType;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.metamodel.Metamodel;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+
+public class EntityManagerStub implements EntityManager {
+
+    @Override
+    public void clear() {
+    }
+
+    @Override
+    public void close() {
+    }
+
+    @Override
+    public boolean contains(Object arg0) {
+        return false;
+    }
+
+    @Override
+    public Query createNamedQuery(String arg0) {
+        return null;
+    }
+
+    @Override
+    public <T> TypedQuery<T> createNamedQuery(String arg0, Class<T> arg1) {
+        return null;
+    }
+
+    @Override
+    public Query createNativeQuery(String arg0) {
+        return null;
+    }
+
+    @Override
+    public Query createNativeQuery(String arg0, Class arg1) {
+        return null;
+    }
+
+    @Override
+    public Query createNativeQuery(String arg0, String arg1) {
+        return null;
+    }
+
+    @Override
+    public Query createQuery(String arg0) {
+        return null;
+    }
+
+    @Override
+    public <T> TypedQuery<T> createQuery(CriteriaQuery<T> arg0) {
+        return null;
+    }
+
+    @Override
+    public <T> TypedQuery<T> createQuery(String arg0, Class<T> arg1) {
+        return null;
+    }
+
+    @Override
+    public void detach(Object arg0) {
+    }
+
+    @Override
+    public <T> T find(Class<T> arg0, Object arg1) {
+        return null;
+    }
+
+    @Override
+    public <T> T find(Class<T> arg0, Object arg1, Map<String, Object> arg2) {
+        return null;
+    }
+
+    @Override
+    public <T> T find(Class<T> arg0, Object arg1, LockModeType arg2) {
+        return null;
+    }
+
+    @Override
+    public <T> T find(Class<T> arg0, Object arg1, LockModeType arg2, Map<String, Object> arg3) {
+        return null;
+    }
+
+    @Override
+    public void flush() {
+    }
+
+    @Override
+    public CriteriaBuilder getCriteriaBuilder() {
+        return null;
+    }
+
+    @Override
+    public Object getDelegate() {
+        return null;
+    }
+
+    @Override
+    public EntityManagerFactory getEntityManagerFactory() {
+        return null;
+    }
+
+    @Override
+    public FlushModeType getFlushMode() {
+        return null;
+    }
+
+    @Override
+    public LockModeType getLockMode(Object arg0) {
+        return null;
+    }
+
+    @Override
+    public Metamodel getMetamodel() {
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> getProperties() {
+        Map<String, Object> ret = new HashMap<String, Object>();
+        ret.put(PersistenceUnitTransactionType.class.getName(), PersistenceUnitTransactionType.JTA);
+        return ret;
+    }
+
+    @Override
+    public <T> T getReference(Class<T> arg0, Object arg1) {
+        return null;
+    }
+
+    @Override
+    public EntityTransaction getTransaction() {
+        return null;
+    }
+
+    @Override
+    public boolean isOpen() {
+        return false;
+    }
+
+    @Override
+    public void joinTransaction() {
+    }
+
+    @Override
+    public void lock(Object arg0, LockModeType arg1) {
+    }
+
+    @Override
+    public void lock(Object arg0, LockModeType arg1, Map<String, Object> arg2) {
+    }
+
+    @Override
+    public <T> T merge(T arg0) {
+        return null;
+    }
+
+    @Override
+    public void persist(Object arg0) {
+    }
+
+    @Override
+    public void refresh(Object arg0) {
+    }
+
+    @Override
+    public void refresh(Object arg0, Map<String, Object> arg1) {
+    }
+
+    @Override
+    public void refresh(Object arg0, LockModeType arg1) {
+    }
+
+    @Override
+    public void refresh(Object arg0, LockModeType arg1, Map<String, Object> arg2) {
+    }
+
+    @Override
+    public void remove(Object arg0) {
+    }
+
+    @Override
+    public void setFlushMode(FlushModeType arg0) {
+    }
+
+    @Override
+    public void setProperty(String arg0, Object arg1) {
+    }
+
+    @Override
+    public <T> T unwrap(Class<T> arg0) {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/aries-jpa/blob/8f23eb08/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/JpaInterceptorTest.java
----------------------------------------------------------------------
diff --git a/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/JpaInterceptorTest.java b/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/JpaInterceptorTest.java
new file mode 100644
index 0000000..43f16de
--- /dev/null
+++ b/jpa-blueprint/src/test/java/org/apache/aries/jpa/blueprint/impl/JpaInterceptorTest.java
@@ -0,0 +1,70 @@
+package org.apache.aries.jpa.blueprint.impl;
+
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.osgi.service.blueprint.reflect.ComponentMetadata;
+
+public class JpaInterceptorTest implements Runnable {
+    private JpaInterceptor interceptor;
+    private AtomicBoolean result = new AtomicBoolean(true);
+
+    @Test
+    public void testThreadSafePreCall() throws InterruptedException {
+        BlueprintContainer container = new BlueprintContainerStub();
+        interceptor = new JpaInterceptor(container, "coordinator", "em");
+
+        Thread t1 = new Thread(this);
+        Thread t2 = new Thread(this);
+
+        t1.start();
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        t2.start();
+        synchronized (result) {
+            result.wait();
+        }
+        Assert.assertTrue(result.get());
+    }
+
+    @Override
+    public void run() {
+        ComponentMetadata cm = new ComponentMetadata() {
+
+            @Override
+            public String getId() {
+                return "testMetadata";
+            }
+
+            @Override
+            public List<String> getDependsOn() {
+                return null;
+            }
+
+            @Override
+            public int getActivation() {
+                return 0;
+            }
+        };
+        Method m;
+        try {
+            m = this.getClass().getMethod("run", null);
+            interceptor.preCall(cm, m, null);
+        } catch (Throwable e) {
+            synchronized (result) {
+                result.set(false);
+            }
+        } finally {
+            synchronized (result) {
+                result.notifyAll();
+            }
+        }
+    }
+}