You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by Mohammad Nour El-Din <no...@gmail.com> on 2008/11/25 13:17:52 UTC

Re: svn commit: r720223 - in /openejb/trunk/openejb3: container/openejb-core/src/main/java/org/apache/openejb/core/ itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/ itests/openejb-itests-beans/src/main/java/org/apache/op

I like what you did Manu, at least for commenting the code you added ;) .

On Mon, Nov 24, 2008 at 6:45 PM,  <ma...@apache.org> wrote:
> Author: manugeorge
> Date: Mon Nov 24 08:45:47 2008
> New Revision: 720223
>
> URL: http://svn.apache.org/viewvc?rev=720223&view=rev
> Log:
> OPENEJB-951 : There are problems to deploy ejb with custom annotation where values are enums. The fix for this is to load enums with the normal classloader just like annotations.
>
> Added:
>    openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/
>    openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensible.java
>    openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensivity.java
> Modified:
>    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
>    openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/BasicStatelessBean.java
>
> Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java?rev=720223&r1=720222&r2=720223&view=diff
> ==============================================================================
> --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java (original)
> +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java Mon Nov 24 08:45:47 2008
> @@ -97,7 +97,8 @@
>         }
>
>         // Annotation classes must be loaded by the normal classloader
> -        if (isAnnotationClass(bytes)) {
> +        // So must Enum classes to prevent problems with the sun jdk.
> +        if (isAnnotationClass(bytes) || isEnum(bytes)) {
>             return Class.forName(name, resolve, getClass().getClassLoader());
>         }
>
> @@ -118,6 +119,17 @@
>             return super.loadClass(name, resolve);
>         }
>     }
> +
> +    /**
> +     * Fast-parse the given class bytecode to determine if it is an
> +     * enum class.
> +     */
> +    private static boolean isEnum(byte[] bytes) {
> +        IsEnumVisitor isEnumVisitor = new IsEnumVisitor();
> +        ClassReader classReader = new ClassReader(bytes);
> +        classReader.accept(isEnumVisitor, ClassReader.SKIP_DEBUG);
> +        return isEnumVisitor.isEnum;
> +    }
>
>     /**
>      * Fast-parse the given class bytecode to determine if it is an
> @@ -138,4 +150,14 @@
>         }
>
>     }
> +
> +    public static class IsEnumVisitor extends EmptyVisitor {
> +        public boolean isEnum = false;
> +
> +        public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
> +            isEnum = (access & Opcodes.ACC_ENUM) != 0;
> +        }
> +
> +    }
> +
>  }
>
> Added: openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensible.java
> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensible.java?rev=720223&view=auto
> ==============================================================================
> --- openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensible.java (added)
> +++ openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensible.java Mon Nov 24 08:45:47 2008
> @@ -0,0 +1,32 @@
> +/**
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + *  Unless required by applicable law or agreed to in writing, software
> + *  distributed under the License is distributed on an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + *  See the License for the specific language governing permissions and
> + *  limitations under the License.
> + */
> +package org.apache.openejb.test.annotations;
> +
> +import java.lang.annotation.Documented;
> +import java.lang.annotation.ElementType;
> +import java.lang.annotation.Retention;
> +import java.lang.annotation.RetentionPolicy;
> +import java.lang.annotation.Target;
> +
> +@Documented
> +@Retention(RetentionPolicy.RUNTIME)
> +@Target({ElementType.PARAMETER, ElementType.METHOD})
> +public @interface MeasureSensible {
> +
> +    MeasureSensivity[] value() default {};
> +
> +}
> \ No newline at end of file
>
> Added: openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensivity.java
> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensivity.java?rev=720223&view=auto
> ==============================================================================
> --- openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensivity.java (added)
> +++ openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/annotations/MeasureSensivity.java Mon Nov 24 08:45:47 2008
> @@ -0,0 +1,22 @@
> +/**
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + *  Unless required by applicable law or agreed to in writing, software
> + *  distributed under the License is distributed on an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + *  See the License for the specific language governing permissions and
> + *  limitations under the License.
> + */
> +package org.apache.openejb.test.annotations;
> +
> +public enum MeasureSensivity {
> +    PARAM,
> +    RESULT
> +}
>
> Modified: openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/BasicStatelessBean.java
> URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/BasicStatelessBean.java?rev=720223&r1=720222&r2=720223&view=diff
> ==============================================================================
> --- openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/BasicStatelessBean.java (original)
> +++ openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateless/BasicStatelessBean.java Mon Nov 24 08:45:47 2008
> @@ -28,6 +28,8 @@
>  import javax.naming.NamingException;
>
>  import org.apache.openejb.test.ApplicationException;
> +import org.apache.openejb.test.annotations.MeasureSensible;
> +import org.apache.openejb.test.annotations.MeasureSensivity;
>  import org.apache.openejb.test.beans.TimerSync;
>  import org.apache.openejb.test.object.OperationsPolicy;
>
> @@ -138,6 +140,7 @@
>     /**
>      * @throws javax.ejb.CreateException
>      */
> +    @MeasureSensible(MeasureSensivity.RESULT)
>     public void ejbCreateObject() throws javax.ejb.CreateException {
>         testAllowedOperations("ejbCreate");
>         this.name = "nameless automaton";
>
>
>



-- 
----
Thanks
- Mohammad Nour
- LinkedIn: http://www.linkedin.com/in/mnour
----
"Life is like riding a bicycle. To keep your balance you must keep moving"
- Albert Einstein