Author: timothyjward
Date: Fri Feb 11 14:38:43 2011
New Revision: 1069818

URL: http://svn.apache.org/viewvc?rev=1069818&view=rev
Log:
ARIES-573: doPriv protection for geting persistence bundle bundle contexts

Modified:
    
aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/ManagedPersistenceContextFactory.java

Modified: 
aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/ManagedPersistenceContextFactory.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/ManagedPersistenceContextFactory.java?rev=1069818&r1=1069817&r2=1069818&view=diff
==============================================================================
--- 
aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/ManagedPersistenceContextFactory.java
 (original)
+++ 
aries/trunk/jpa/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/impl/ManagedPersistenceContextFactory.java
 Fri Feb 11 14:38:43 2011
@@ -18,6 +18,8 @@
  */
 package org.apache.aries.jpa.container.context.impl;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -77,7 +79,14 @@ public class ManagedPersistenceContextFa
       _logger.debug("Creating a container managed entity manager for the 
perstence unit {} with the following properties {}",
           new Object[] {emf, properties});
     }
-    EntityManagerFactory factory = (EntityManagerFactory) 
emf.getBundle().getBundleContext().getService(emf);
+    //Getting the BundleContext is a privileged operation that the 
+    //client might not be able to do.
+    EntityManagerFactory factory = AccessController.doPrivileged(
+        new PrivilegedAction<EntityManagerFactory>() {
+          public EntityManagerFactory run() {
+            return (EntityManagerFactory) 
emf.getBundle().getBundleContext().getService(emf);
+          }
+        });
     
     if(type == PersistenceContextType.TRANSACTION || type == null)
       return new JTAEntityManager(factory, properties, registry, activeCount, 
this);


Reply via email to