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;