You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Patrick Linskey <pl...@gmail.com> on 2007/09/23 19:51:28 UTC
Re: 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-persist
Hi,
This change (and r577877, the port of this to the 1.0.x branch)
contains Java 5 code. So, it should be in the a new class in a
1.5-capable module (either a new openjpa-lib-5 dir, or maybe the
openjpa-kernel-5 module, to save on module explosion).
FYI, you can run a compile that detects these types of problems by
running 'mvn compile -Djava14.jar=/path/to/jdk1.4/rt.jar', or
alternately, by submitting your changes through the TeamCity install
that I wrote about earlier. You can see these types of problems as
they occur by monitoring that same TeamCity install.
I could set things up so that key build failures were emailed out to
dev@openjpa.apache.org from the TeamCity install.
-Patrick
On 9/18/07, kwsutter@apache.org <kw...@apache.org> wrote:
> 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;
>
>
>
--
Patrick Linskey
202 669 5907
Re: 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-persist
Posted by Craig L Russell <Cr...@Sun.COM>.
Hi Patrick,
Works for me.
Craig
On Sep 24, 2007, at 3:34 PM, Patrick Linskey wrote:
> Seems fair enough to me. We could simplify this by making
> J2DoPriv5Helper extend J2DoPrivHelper, in which case developers can
> stick with a single class within a given module.
>
> -Patrick
>
> On 9/24/07, Albert Lee <al...@gmail.com> wrote:
>>>> 2) If we put the new 1.5 functions in lib-5, then we need a
>>>> different
>> class
>>>> e.g. J2DoPriv15Helper.java. This makes an unnatural feel of
>>>> using the
>>>> J2DoPrivHelper.
>>>
>>> How is that unnatural?
>>
>> What I mean is if J2DoPrivHelper is split to 2 classes, developers
>> will need
>> to call J2DoPrivHelper.getXXXAction() or
>> J2DoPriv5Helper.getXXXAction()
>> depends on if the action is 1.5 specific.
>>
>> Albert Lee.
>>
>> On 9/24/07, Patrick Linskey <pl...@gmail.com> wrote:
>>>
>>>> 1) To avoid "module explosion", you suggested to put it in e.g.
>>>> kernel-5
>>>> instead of a new lib-5. We can use that approach but now we are
>>>> limiting
>>> the
>>>> usage of the new methods in kernel and/or other modules that has
>>>> dependency/access to kernel-5 module. From design perspective,
>>>> it makes
>>>> sense to have the 1.5 J2DoPrivHelp functions in lib(-5), that
>>>> can be
>>>> potentially accessed from ANY other modules.
>>>
>>> Agreed. In practice, this isn't that big of a problem, since it
>>> happens that all Java 5 modules have a dependency on kernel-5.
>>> Either
>>> approach is fine with me.
>>>
>>>> 2) If we put the new 1.5 functions in lib-5, then we need a
>>>> different
>>> class
>>>> e.g. J2DoPriv15Helper.java. This makes an unnatural feel of
>>>> using the
>>>> J2DoPrivHelper.
>>>
>>> How is that unnatural?
>>>
>>>> 3) Is there still a need to support 1.4 at all? Is the benefit of
>>> supporting
>>>> 1.4 justify the source module complexity?
>>>
>>> At least one downstream product (Kodo) still supports deploying
>>> against
>>> 1.4.
>>>
>>> -Patrick
>>>
>>> On 9/24/07, Albert Lee <al...@gmail.com> wrote:
>>>> Patrick,
>>>>
>>>> Thanks for spotting the 1.4 compile scenario which I am still
>>>> new and
>>>> ignorance on this topic.
>>>>
>>>> Now that I understand the problem, I have a few observations and
>>> questions:
>>>>
>>>> 1) To avoid "module explosion", you suggested to put it in e.g.
>>>> kernel-5
>>>> instead of a new lib-5. We can use that approach but now we are
>>>> limiting
>>> the
>>>> usage of the new methods in kernel and/or other modules that has
>>>> dependency/access to kernel-5 module. From design perspective,
>>>> it makes
>>>> sense to have the 1.5 J2DoPrivHelp functions in lib(-5), that
>>>> can be
>>>> potentially accessed from ANY other modules.
>>>>
>>>> 2) If we put the new 1.5 functions in lib-5, then we need a
>>>> different
>>> class
>>>> e.g. J2DoPriv15Helper.java. This makes an unnatural feel of
>>>> using the
>>>> J2DoPrivHelper.
>>>>
>>>> 3) Is there still a need to support 1.4 at all? Is the benefit of
>>> supporting
>>>> 1.4 justify the source module complexity?
>>>>
>>>> Thanks,
>>>> Albert Lee.
>>>>
>>>> On 9/23/07, Patrick Linskey <pl...@gmail.com> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> This change (and r577877, the port of this to the 1.0.x branch)
>>>>> contains Java 5 code. So, it should be in the a new class in a
>>>>> 1.5-capable module (either a new openjpa-lib-5 dir, or maybe the
>>>>> openjpa-kernel-5 module, to save on module explosion).
>>>>>
>>>>> FYI, you can run a compile that detects these types of problems by
>>>>> running 'mvn compile -Djava14.jar=/path/to/jdk1.4/rt.jar', or
>>>>> alternately, by submitting your changes through the TeamCity
>>>>> install
>>>>> that I wrote about earlier. You can see these types of problems as
>>>>> they occur by monitoring that same TeamCity install.
>>>>>
>>>>> I could set things up so that key build failures were emailed
>>>>> out to
>>>>> dev@openjpa.apache.org from the TeamCity install.
>>>>>
>>>>> -Patrick
>>>>>
>>>>> On 9/18/07, kwsutter@apache.org <kw...@apache.org> wrote:
>>>>>> 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;
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Patrick Linskey
>>>>> 202 669 5907
>>>>>
>>>>
>>>
>>>
>>> --
>>> Patrick Linskey
>>> 202 669 5907
>>>
>>
>
>
> --
> Patrick Linskey
> 202 669 5907
Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!
Re: 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-persist
Posted by Patrick Linskey <pl...@gmail.com>.
Seems fair enough to me. We could simplify this by making
J2DoPriv5Helper extend J2DoPrivHelper, in which case developers can
stick with a single class within a given module.
-Patrick
On 9/24/07, Albert Lee <al...@gmail.com> wrote:
> > > 2) If we put the new 1.5 functions in lib-5, then we need a different
> class
> > > e.g. J2DoPriv15Helper.java. This makes an unnatural feel of using the
> > > J2DoPrivHelper.
> >
> > How is that unnatural?
>
> What I mean is if J2DoPrivHelper is split to 2 classes, developers will need
> to call J2DoPrivHelper.getXXXAction() or J2DoPriv5Helper.getXXXAction()
> depends on if the action is 1.5 specific.
>
> Albert Lee.
>
> On 9/24/07, Patrick Linskey <pl...@gmail.com> wrote:
> >
> > > 1) To avoid "module explosion", you suggested to put it in e.g. kernel-5
> > > instead of a new lib-5. We can use that approach but now we are limiting
> > the
> > > usage of the new methods in kernel and/or other modules that has
> > > dependency/access to kernel-5 module. From design perspective, it makes
> > > sense to have the 1.5 J2DoPrivHelp functions in lib(-5), that can be
> > > potentially accessed from ANY other modules.
> >
> > Agreed. In practice, this isn't that big of a problem, since it
> > happens that all Java 5 modules have a dependency on kernel-5. Either
> > approach is fine with me.
> >
> > > 2) If we put the new 1.5 functions in lib-5, then we need a different
> > class
> > > e.g. J2DoPriv15Helper.java. This makes an unnatural feel of using the
> > > J2DoPrivHelper.
> >
> > How is that unnatural?
> >
> > > 3) Is there still a need to support 1.4 at all? Is the benefit of
> > supporting
> > > 1.4 justify the source module complexity?
> >
> > At least one downstream product (Kodo) still supports deploying against
> > 1.4.
> >
> > -Patrick
> >
> > On 9/24/07, Albert Lee <al...@gmail.com> wrote:
> > > Patrick,
> > >
> > > Thanks for spotting the 1.4 compile scenario which I am still new and
> > > ignorance on this topic.
> > >
> > > Now that I understand the problem, I have a few observations and
> > questions:
> > >
> > > 1) To avoid "module explosion", you suggested to put it in e.g. kernel-5
> > > instead of a new lib-5. We can use that approach but now we are limiting
> > the
> > > usage of the new methods in kernel and/or other modules that has
> > > dependency/access to kernel-5 module. From design perspective, it makes
> > > sense to have the 1.5 J2DoPrivHelp functions in lib(-5), that can be
> > > potentially accessed from ANY other modules.
> > >
> > > 2) If we put the new 1.5 functions in lib-5, then we need a different
> > class
> > > e.g. J2DoPriv15Helper.java. This makes an unnatural feel of using the
> > > J2DoPrivHelper.
> > >
> > > 3) Is there still a need to support 1.4 at all? Is the benefit of
> > supporting
> > > 1.4 justify the source module complexity?
> > >
> > > Thanks,
> > > Albert Lee.
> > >
> > > On 9/23/07, Patrick Linskey <pl...@gmail.com> wrote:
> > > >
> > > > Hi,
> > > >
> > > > This change (and r577877, the port of this to the 1.0.x branch)
> > > > contains Java 5 code. So, it should be in the a new class in a
> > > > 1.5-capable module (either a new openjpa-lib-5 dir, or maybe the
> > > > openjpa-kernel-5 module, to save on module explosion).
> > > >
> > > > FYI, you can run a compile that detects these types of problems by
> > > > running 'mvn compile -Djava14.jar=/path/to/jdk1.4/rt.jar', or
> > > > alternately, by submitting your changes through the TeamCity install
> > > > that I wrote about earlier. You can see these types of problems as
> > > > they occur by monitoring that same TeamCity install.
> > > >
> > > > I could set things up so that key build failures were emailed out to
> > > > dev@openjpa.apache.org from the TeamCity install.
> > > >
> > > > -Patrick
> > > >
> > > > On 9/18/07, kwsutter@apache.org <kw...@apache.org> wrote:
> > > > > 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;
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Patrick Linskey
> > > > 202 669 5907
> > > >
> > >
> >
> >
> > --
> > Patrick Linskey
> > 202 669 5907
> >
>
--
Patrick Linskey
202 669 5907
Re: 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-persist
Posted by Albert Lee <al...@gmail.com>.
> > 2) If we put the new 1.5 functions in lib-5, then we need a different
class
> > e.g. J2DoPriv15Helper.java. This makes an unnatural feel of using the
> > J2DoPrivHelper.
>
> How is that unnatural?
What I mean is if J2DoPrivHelper is split to 2 classes, developers will need
to call J2DoPrivHelper.getXXXAction() or J2DoPriv5Helper.getXXXAction()
depends on if the action is 1.5 specific.
Albert Lee.
On 9/24/07, Patrick Linskey <pl...@gmail.com> wrote:
>
> > 1) To avoid "module explosion", you suggested to put it in e.g. kernel-5
> > instead of a new lib-5. We can use that approach but now we are limiting
> the
> > usage of the new methods in kernel and/or other modules that has
> > dependency/access to kernel-5 module. From design perspective, it makes
> > sense to have the 1.5 J2DoPrivHelp functions in lib(-5), that can be
> > potentially accessed from ANY other modules.
>
> Agreed. In practice, this isn't that big of a problem, since it
> happens that all Java 5 modules have a dependency on kernel-5. Either
> approach is fine with me.
>
> > 2) If we put the new 1.5 functions in lib-5, then we need a different
> class
> > e.g. J2DoPriv15Helper.java. This makes an unnatural feel of using the
> > J2DoPrivHelper.
>
> How is that unnatural?
>
> > 3) Is there still a need to support 1.4 at all? Is the benefit of
> supporting
> > 1.4 justify the source module complexity?
>
> At least one downstream product (Kodo) still supports deploying against
> 1.4.
>
> -Patrick
>
> On 9/24/07, Albert Lee <al...@gmail.com> wrote:
> > Patrick,
> >
> > Thanks for spotting the 1.4 compile scenario which I am still new and
> > ignorance on this topic.
> >
> > Now that I understand the problem, I have a few observations and
> questions:
> >
> > 1) To avoid "module explosion", you suggested to put it in e.g. kernel-5
> > instead of a new lib-5. We can use that approach but now we are limiting
> the
> > usage of the new methods in kernel and/or other modules that has
> > dependency/access to kernel-5 module. From design perspective, it makes
> > sense to have the 1.5 J2DoPrivHelp functions in lib(-5), that can be
> > potentially accessed from ANY other modules.
> >
> > 2) If we put the new 1.5 functions in lib-5, then we need a different
> class
> > e.g. J2DoPriv15Helper.java. This makes an unnatural feel of using the
> > J2DoPrivHelper.
> >
> > 3) Is there still a need to support 1.4 at all? Is the benefit of
> supporting
> > 1.4 justify the source module complexity?
> >
> > Thanks,
> > Albert Lee.
> >
> > On 9/23/07, Patrick Linskey <pl...@gmail.com> wrote:
> > >
> > > Hi,
> > >
> > > This change (and r577877, the port of this to the 1.0.x branch)
> > > contains Java 5 code. So, it should be in the a new class in a
> > > 1.5-capable module (either a new openjpa-lib-5 dir, or maybe the
> > > openjpa-kernel-5 module, to save on module explosion).
> > >
> > > FYI, you can run a compile that detects these types of problems by
> > > running 'mvn compile -Djava14.jar=/path/to/jdk1.4/rt.jar', or
> > > alternately, by submitting your changes through the TeamCity install
> > > that I wrote about earlier. You can see these types of problems as
> > > they occur by monitoring that same TeamCity install.
> > >
> > > I could set things up so that key build failures were emailed out to
> > > dev@openjpa.apache.org from the TeamCity install.
> > >
> > > -Patrick
> > >
> > > On 9/18/07, kwsutter@apache.org <kw...@apache.org> wrote:
> > > > 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;
> > > >
> > > >
> > > >
> > >
> > >
> > > --
> > > Patrick Linskey
> > > 202 669 5907
> > >
> >
>
>
> --
> Patrick Linskey
> 202 669 5907
>
Re: 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-persist
Posted by Patrick Linskey <pl...@gmail.com>.
> 1) To avoid "module explosion", you suggested to put it in e.g. kernel-5
> instead of a new lib-5. We can use that approach but now we are limiting the
> usage of the new methods in kernel and/or other modules that has
> dependency/access to kernel-5 module. From design perspective, it makes
> sense to have the 1.5 J2DoPrivHelp functions in lib(-5), that can be
> potentially accessed from ANY other modules.
Agreed. In practice, this isn't that big of a problem, since it
happens that all Java 5 modules have a dependency on kernel-5. Either
approach is fine with me.
> 2) If we put the new 1.5 functions in lib-5, then we need a different class
> e.g. J2DoPriv15Helper.java. This makes an unnatural feel of using the
> J2DoPrivHelper.
How is that unnatural?
> 3) Is there still a need to support 1.4 at all? Is the benefit of supporting
> 1.4 justify the source module complexity?
At least one downstream product (Kodo) still supports deploying against 1.4.
-Patrick
On 9/24/07, Albert Lee <al...@gmail.com> wrote:
> Patrick,
>
> Thanks for spotting the 1.4 compile scenario which I am still new and
> ignorance on this topic.
>
> Now that I understand the problem, I have a few observations and questions:
>
> 1) To avoid "module explosion", you suggested to put it in e.g. kernel-5
> instead of a new lib-5. We can use that approach but now we are limiting the
> usage of the new methods in kernel and/or other modules that has
> dependency/access to kernel-5 module. From design perspective, it makes
> sense to have the 1.5 J2DoPrivHelp functions in lib(-5), that can be
> potentially accessed from ANY other modules.
>
> 2) If we put the new 1.5 functions in lib-5, then we need a different class
> e.g. J2DoPriv15Helper.java. This makes an unnatural feel of using the
> J2DoPrivHelper.
>
> 3) Is there still a need to support 1.4 at all? Is the benefit of supporting
> 1.4 justify the source module complexity?
>
> Thanks,
> Albert Lee.
>
> On 9/23/07, Patrick Linskey <pl...@gmail.com> wrote:
> >
> > Hi,
> >
> > This change (and r577877, the port of this to the 1.0.x branch)
> > contains Java 5 code. So, it should be in the a new class in a
> > 1.5-capable module (either a new openjpa-lib-5 dir, or maybe the
> > openjpa-kernel-5 module, to save on module explosion).
> >
> > FYI, you can run a compile that detects these types of problems by
> > running 'mvn compile -Djava14.jar=/path/to/jdk1.4/rt.jar', or
> > alternately, by submitting your changes through the TeamCity install
> > that I wrote about earlier. You can see these types of problems as
> > they occur by monitoring that same TeamCity install.
> >
> > I could set things up so that key build failures were emailed out to
> > dev@openjpa.apache.org from the TeamCity install.
> >
> > -Patrick
> >
> > On 9/18/07, kwsutter@apache.org <kw...@apache.org> wrote:
> > > 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;
> > >
> > >
> > >
> >
> >
> > --
> > Patrick Linskey
> > 202 669 5907
> >
>
--
Patrick Linskey
202 669 5907
Re: 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-persist
Posted by Albert Lee <al...@gmail.com>.
Patrick,
Thanks for spotting the 1.4 compile scenario which I am still new and
ignorance on this topic.
Now that I understand the problem, I have a few observations and questions:
1) To avoid "module explosion", you suggested to put it in e.g. kernel-5
instead of a new lib-5. We can use that approach but now we are limiting the
usage of the new methods in kernel and/or other modules that has
dependency/access to kernel-5 module. From design perspective, it makes
sense to have the 1.5 J2DoPrivHelp functions in lib(-5), that can be
potentially accessed from ANY other modules.
2) If we put the new 1.5 functions in lib-5, then we need a different class
e.g. J2DoPriv15Helper.java. This makes an unnatural feel of using the
J2DoPrivHelper.
3) Is there still a need to support 1.4 at all? Is the benefit of supporting
1.4 justify the source module complexity?
Thanks,
Albert Lee.
On 9/23/07, Patrick Linskey <pl...@gmail.com> wrote:
>
> Hi,
>
> This change (and r577877, the port of this to the 1.0.x branch)
> contains Java 5 code. So, it should be in the a new class in a
> 1.5-capable module (either a new openjpa-lib-5 dir, or maybe the
> openjpa-kernel-5 module, to save on module explosion).
>
> FYI, you can run a compile that detects these types of problems by
> running 'mvn compile -Djava14.jar=/path/to/jdk1.4/rt.jar', or
> alternately, by submitting your changes through the TeamCity install
> that I wrote about earlier. You can see these types of problems as
> they occur by monitoring that same TeamCity install.
>
> I could set things up so that key build failures were emailed out to
> dev@openjpa.apache.org from the TeamCity install.
>
> -Patrick
>
> On 9/18/07, kwsutter@apache.org <kw...@apache.org> wrote:
> > 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;
> >
> >
> >
>
>
> --
> Patrick Linskey
> 202 669 5907
>