You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by kw...@apache.org on 2007/09/18 21:44:07 UTC

svn commit: r577029 - in /openjpa/trunk: openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ openjpa-lib/src/main/java/org/apache/openjpa/lib/util/ openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/ openjpa-persistence/s...

Author: kwsutter
Date: Tue Sep 18 12:44:06 2007
New Revision: 577029

URL: http://svn.apache.org/viewvc?rev=577029&view=rev
Log:
OPENJPA-369.  Committed Albert's changes for the Java 2 Security updates for the Solaris platform.

Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheScheduler.java
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java
    openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceXMLMetaDataParser.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheScheduler.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheScheduler.java?rev=577029&r1=577028&r2=577029&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheScheduler.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/DataCacheScheduler.java Tue Sep 18 12:44:06 2007
@@ -99,10 +99,9 @@
         _caches.put(cache, schedule);
         _stop = false;
         if (_thread == null) {
-            _thread = (Thread) AccessController
-                .doPrivileged(J2DoPrivHelper.newThreadAction(this, _loc.get(
-                    "scheduler-name").getMessage()));
-            _thread.setDaemon(true);
+            _thread = (Thread) AccessController.doPrivileged(J2DoPrivHelper
+                .newDaemonThreadAction(this, _loc.get("scheduler-name")
+                    .getMessage()));
             _thread.start();
             if (_log.isTraceEnabled())
                 _log.trace(_loc.get("scheduler-start", _thread.getName()));

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java?rev=577029&r1=577028&r2=577029&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/J2DoPrivHelper.java Tue Sep 18 12:44:06 2007
@@ -24,6 +24,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.AnnotatedElement;
 import java.net.InetAddress;
 import java.net.MalformedURLException;
 import java.net.ServerSocket;
@@ -48,6 +49,9 @@
  * methods:
  * <ul>
  * <li>AccessibleObject.setAccessible
+ * <li>AnnotatedElement.getAnnotations
+ * <li>AnnotatedElement.getDeclaredAnnotations
+ * <li>AnnotatedElement.isAnnotationPresent
  * <li>Class.forName
  * <li>Class.getClassLoader
  * <li>Class.getDeclaredField
@@ -325,6 +329,60 @@
     }
 
     /**
+     * Return a PrivilegeAction object for AnnotatedElement.getAnnotations().
+     * 
+     * Requires security policy:
+     *   'permission java.lang.RuntimePermission "accessDeclaredMembers";'
+     * 
+     * @return Annotation[]
+     */
+    public static final PrivilegedAction getAnnotationsAction(
+        final AnnotatedElement element) {
+        return new PrivilegedAction() {
+            public Object run() {
+                return element.getAnnotations();
+            }
+        };
+    }
+
+    /**
+     * Return a PrivilegeAction object for 
+     *   AnnotatedElement.getDeclaredAnnotations().
+     * 
+     * Requires security policy:
+     *   'permission java.lang.RuntimePermission "accessDeclaredMembers";'
+     * 
+     * @return Annotation[]
+     */
+    public static final PrivilegedAction getDeclaredAnnotationsAction(
+        final AnnotatedElement element) {
+        return new PrivilegedAction() {
+            public Object run() {
+                return element.getDeclaredAnnotations();
+            }
+        };
+    }
+
+    /**
+     * Return a PrivilegeAction object for
+     *   AnnotatedElement.isAnnotationPresent().
+     * 
+     * Requires security policy:
+     *   'permission java.lang.RuntimePermission "accessDeclaredMembers";'
+     * 
+     * @return Boolean
+     */
+    public static final PrivilegedAction isAnnotationPresentAction(
+        final AnnotatedElement element, final Class annotationClazz) {
+        return new PrivilegedAction() {
+            public Object run() {
+                return element.isAnnotationPresent(annotationClazz)
+                    ? Boolean.TRUE : Boolean.FALSE;
+            }
+        };
+    }
+
+    /**
      * Return a PrivilegedExceptionAction object for clazz.newInstance().
      * 
      * Requires security policy:
@@ -794,14 +852,17 @@
      * 
      * Requires security policy:
      *   'permission java.lang.RuntimePermission "modifyThreadGroup";'
+     *   'permission java.lang.RuntimePermission "modifyThread";'
      * 
      * @return Thread
      */
-    public static final PrivilegedAction newThreadAction(
+    public static final PrivilegedAction newDaemonThreadAction(
         final Runnable target, final String name) {
         return new PrivilegedAction() {
             public Object run() {
-                return new Thread(target, name);
+                Thread thread = new Thread(target, name);
+                thread.setDaemon(true);
+                return thread;
             }
         };
     }

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java?rev=577029&r1=577028&r2=577029&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/main/java/org/apache/openjpa/persistence/jdbc/AnnotationPersistenceMappingParser.java Tue Sep 18 12:44:06 2007
@@ -21,6 +21,7 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.Modifier;
+import java.security.AccessController;
 import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -74,6 +75,7 @@
 import org.apache.openjpa.jdbc.schema.Unique;
 import org.apache.openjpa.jdbc.sql.DBDictionary;
 import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.util.J2DoPrivHelper;
 import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.meta.ClassMetaData;
 import org.apache.openjpa.meta.FieldMetaData;
@@ -1058,7 +1060,9 @@
             
             if (xmlTypeClass != null
                 && StringUtils.isEmpty(pcols[i].columnDefinition())
-                && fm.getDeclaredType().isAnnotationPresent(xmlTypeClass)) {
+                && ((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                    .isAnnotationPresentAction(fm.getDeclaredType(),
+                        xmlTypeClass))).booleanValue()) {
                 DBDictionary dict = ((MappingRepository) getRepository())
                     .getDBDictionary();
                 if (dict.supportsXMLColumn)

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java?rev=577029&r1=577028&r2=577029&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceMetaDataParser.java Tue Sep 18 12:44:06 2007
@@ -465,9 +465,14 @@
         // check immediately whether the user is using any annotations,
         // regardless of mode.  this prevents adding non-entity classes to
         // repository if we're ignoring these annotations in mapping mode
-        if (!_cls.isAnnotationPresent(Entity.class)
-            && !_cls.isAnnotationPresent(Embeddable.class)
-            && !_cls.isAnnotationPresent(MappedSuperclass.class))
+        if (!((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+            .isAnnotationPresentAction(_cls, Entity.class))).booleanValue()
+            && !((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(_cls, Embeddable.class)))
+                .booleanValue()
+            && !((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(_cls, MappedSuperclass.class)))
+                .booleanValue())
             return null;
 
         // find / create metadata
@@ -762,7 +767,9 @@
                 J2DoPrivHelper.getDeclaredFieldsAction(
                     meta.getDescribedType())); 
             for (int i = 0; i < fields.length; i++)
-                if (fields[i].isAnnotationPresent(DetachedState.class))
+                if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                    .isAnnotationPresentAction(fields[i], DetachedState.class)))
+                    .booleanValue())
                     meta.setDetachedState(fields[i].getName());
         }
     }
@@ -818,7 +825,8 @@
 
         MetaDataDefaults def = repos.getMetaDataFactory().getDefaults();
         for (Method m : methods) {
-            for (Annotation anno : m.getDeclaredAnnotations()) {
+            for (Annotation anno : (Annotation[]) AccessController
+                .doPrivileged(J2DoPrivHelper.getDeclaredAnnotationsAction(m))) {
                 MetaDataTag tag = _tags.get(anno.annotationType());
                 if (tag == null)
                     continue;
@@ -956,7 +964,8 @@
         fmd.setExplicit(true);
 
         AnnotatedElement el = (AnnotatedElement) member;
-        boolean lob = el.isAnnotationPresent(Lob.class);
+        boolean lob = ((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+            .isAnnotationPresentAction(el, Lob.class))).booleanValue();
         if (isMetaDataMode()) {
             switch (pstrat) {
                 case BASIC:

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceXMLMetaDataParser.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceXMLMetaDataParser.java?rev=577029&r1=577028&r2=577029&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceXMLMetaDataParser.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/AnnotationPersistenceXMLMetaDataParser.java Tue Sep 18 12:44:06 2007
@@ -22,10 +22,12 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Member;
 import java.lang.reflect.Method;
+import java.security.AccessController;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.util.J2DoPrivHelper;
 import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.meta.DelegatingMetaDataFactory;
 import org.apache.openjpa.meta.FieldMetaData;
@@ -171,8 +173,11 @@
     private XMLMetaData parseXMLClassAnnotations() {
         // check immediately whether the class has JAXB XML annotations
         if (_cls == null || xmlTypeClass == null
-            || !(_cls.isAnnotationPresent(xmlTypeClass)
-                && _cls.isAnnotationPresent(xmlRootElementClass)))
+            || !(((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(_cls, xmlTypeClass))).booleanValue()
+                && ((Boolean) AccessController
+                .doPrivileged(J2DoPrivHelper.isAnnotationPresentAction(_cls,
+                    xmlRootElementClass))).booleanValue()))
             return null;
 
         // find / create metadata
@@ -220,7 +225,9 @@
         Class superclass = cls.getSuperclass();
 
         // handle inheritance at sub-element level
-        if (superclass.isAnnotationPresent(xmlTypeClass))
+        if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+            .isAnnotationPresentAction(superclass, xmlTypeClass)))
+            .booleanValue())
             populateFromReflection(superclass, meta);
 
         try {
@@ -240,8 +247,9 @@
                     // avoid JAXB XML bind default name
                     if (StringUtils.equals(XMLMetaData.defaultName, xmlname))
                         xmlname = member.getName();
-                    if (((Field) member).getType()
-                        .isAnnotationPresent(xmlTypeClass)) {
+                    if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                        .isAnnotationPresentAction(((Field) member).getType(),
+                            xmlTypeClass))).booleanValue()) {
                         field = _repos.addXMLMetaData(((Field) member).getType()
                             , member.getName());
                         parseXmlRootElement(((Field) member).getType(), field);

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java?rev=577029&r1=577028&r2=577029&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataDefaults.java Tue Sep 18 12:44:06 2007
@@ -116,7 +116,8 @@
         if (member == null)
             return null;
         AnnotatedElement el = (AnnotatedElement) member;
-        if (el.isAnnotationPresent(Transient.class))
+        if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+            .isAnnotationPresentAction(el, Transient.class))).booleanValue())
             return TRANSIENT;
         if (fmd != null
             && fmd.getManagement() != FieldMetaData.MANAGE_PERSISTENT)
@@ -182,7 +183,8 @@
         }
 
         //### EJB3: what if defined in XML?
-        if (type.isAnnotationPresent(Embeddable.class))
+        if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+            .isAnnotationPresentAction(type, Embeddable.class))).booleanValue())
             return EMBEDDED;
         if (Serializable.class.isAssignableFrom(type))
             return BASIC;
@@ -271,7 +273,8 @@
         Annotation[] annos;
         String name;
         for (int i = 0; i < members.length; i++) {
-            annos = members[i].getAnnotations();
+            annos = (Annotation[]) AccessController.doPrivileged(J2DoPrivHelper
+                .getAnnotationsAction(members[i]));
             for (int j = 0; j < annos.length; j++) {
                 name = annos[j].annotationType().getName();
                 if ((name.startsWith("javax.persistence.")
@@ -317,7 +320,9 @@
 
     private boolean isAnnotatedTransient(Member member) {
         return member instanceof AnnotatedElement
-            && ((AnnotatedElement) member).isAnnotationPresent(Transient.class);
+            && ((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(((AnnotatedElement) member),
+                    Transient.class))).booleanValue();
     }
 
     private void logNoSetter(ClassMetaData meta, String name, Exception e) {

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java?rev=577029&r1=577028&r2=577029&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java Tue Sep 18 12:44:06 2007
@@ -293,18 +293,26 @@
             return null;
         Collection classes = repos.loadPersistentTypes(false, loader);
         for (Class cls : (Collection<Class>) classes) {
-            if (cls.isAnnotationPresent(NamedQuery.class) && hasNamedQuery
+            if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(cls, NamedQuery.class)))
+                .booleanValue() && hasNamedQuery
                 (queryName, (NamedQuery) cls.getAnnotation(NamedQuery.class)))
                 return cls;
-            if (cls.isAnnotationPresent(NamedQueries.class) &&
+            if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(cls, NamedQueries.class)))
+                .booleanValue() &&
                 hasNamedQuery(queryName, ((NamedQueries) cls.
                     getAnnotation(NamedQueries.class)).value()))
                 return cls;
-            if (cls.isAnnotationPresent(NamedNativeQuery.class) &&
+            if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(cls, NamedNativeQuery.class)))
+                .booleanValue() &&
                 hasNamedNativeQuery(queryName, (NamedNativeQuery) cls.
                     getAnnotation(NamedNativeQuery.class)))
                 return cls;
-            if (cls.isAnnotationPresent(NamedNativeQueries.class) &&
+            if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(cls, NamedNativeQueries.class)))
+                .booleanValue() &&
                 hasNamedNativeQuery(queryName, ((NamedNativeQueries) cls.
                     getAnnotation(NamedNativeQueries.class)).value()))
                 return cls;
@@ -320,13 +328,17 @@
         
         Collection classes = repos.loadPersistentTypes(false, loader);
         for (Class cls : (Collection<Class>) classes) {
-            
-            if (cls.isAnnotationPresent(SqlResultSetMapping.class) && 
+
+            if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(cls, SqlResultSetMapping.class)))
+                .booleanValue() &&
                 hasRSMapping(rsMappingName, (SqlResultSetMapping) cls.
                 getAnnotation(SqlResultSetMapping.class)))
                 return cls;
-            
-            if (cls.isAnnotationPresent(SqlResultSetMappings.class) && 
+
+            if (((Boolean) AccessController.doPrivileged(J2DoPrivHelper
+                .isAnnotationPresentAction(cls, SqlResultSetMappings.class)))
+                .booleanValue() &&
                 hasRSMapping(rsMappingName, ((SqlResultSetMappings) cls.
                 getAnnotation(SqlResultSetMappings.class)).value()))
                 return cls;