You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2012/10/14 11:54:52 UTC

svn commit: r1398045 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/component/ main/java/org/apache/webbeans/inject/instance/ test/java/org/apache/webbeans/newtests/managed/instance/ test/java/org/apache/webbeans/newtests/man...

Author: arne
Date: Sun Oct 14 09:54:52 2012
New Revision: 1398045

URL: http://svn.apache.org/viewvc?rev=1398045&view=rev
Log:
OWB-714 Fixed accessing of an Instance that is produced by a producer method that has an InjectionPoint as parameter

Added:
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBeanProducer.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/MeaningOfLife.java   (with props)
Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceFactory.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/InjectedInstanceComponentTest.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBean.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/InstanceForDependentBean.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java?rev=1398045&r1=1398044&r2=1398045&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java Sun Oct 14 09:54:52 2012
@@ -52,17 +52,12 @@ public class InstanceBean<T> extends Abs
             InjectionPoint injectionPoint = local.get();
             Set<Annotation> qualifiers;
             Type type;
-            Class injectionPointClass = null;
 
             if (injectionPoint != null)
             {
                 ParameterizedType injectedType = (ParameterizedType)injectionPoint.getType();
                 qualifiers = injectionPoint.getQualifiers();
                 type = injectedType.getActualTypeArguments()[0];
-                if (injectionPoint.getBean() != null)
-                {
-                    injectionPointClass = injectionPoint.getBean().getBeanClass();
-                }
             }
             else
             {
@@ -72,7 +67,7 @@ public class InstanceBean<T> extends Abs
 
             Object ownerInstance = AbstractInjectable.instanceUnderInjection.get();
 
-            Instance<T> instance = InstanceFactory.getInstance(type, injectionPointClass, getWebBeansContext(),
+            Instance<T> instance = InstanceFactory.getInstance(type, injectionPoint, getWebBeansContext(),
                                                                creationalContext, ownerInstance,
                                                                qualifiers.toArray(new Annotation[qualifiers.size()]));
             

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceFactory.java?rev=1398045&r1=1398044&r2=1398045&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceFactory.java Sun Oct 14 09:54:52 2012
@@ -23,6 +23,7 @@ import java.lang.reflect.Type;
 
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.InjectionPoint;
 
 import org.apache.webbeans.config.WebBeansContext;
 
@@ -36,18 +37,18 @@ public final class InstanceFactory
     /**
      *
      * @param injectedType injection class type
-     * @param injectionPointClass null or the class of the injection point
+     * @param injectionPoint null or the injection point
      * @param webBeansContext
      * @param creationalContext will get used for creating &#064;Dependent beans
      * @param ownerInstance the object the current Instance got injected into
      * @param annotations qualifier annotations
      * @return the {@link Instance<T>} for the given type.
      */
-    public static <T> Instance<T> getInstance(Type injectedType, Class<?> injectionPointClass,
+    public static <T> Instance<T> getInstance(Type injectedType, InjectionPoint injectionPoint,
                                               WebBeansContext webBeansContext, CreationalContext<?> creationalContext,
                                               Object ownerInstance, Annotation... annotations)
     {
-        InstanceImpl<T> instance = new InstanceImpl<T>(injectedType,injectionPointClass, webBeansContext,
+        InstanceImpl<T> instance = new InstanceImpl<T>(injectedType,injectionPoint, webBeansContext,
                                                        creationalContext, ownerInstance, annotations);
 
         return instance;

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java?rev=1398045&r1=1398044&r2=1398045&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java Sun Oct 14 09:54:52 2012
@@ -31,8 +31,10 @@ import java.util.Set;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.util.TypeLiteral;
 
+import org.apache.webbeans.component.InjectionPointBean;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.container.InjectionResolver;
@@ -54,9 +56,9 @@ class InstanceImpl<T> implements Instanc
     private Type injectionClazz;
 
     /**
-     * injection point class used to determine the BDA it was loaded from or null.
+     * injection point, needed for injection into producer method and used to determine the BDA it was loaded from or null.
      */
-    private Class<?> injectionPointClazz;
+    private InjectionPoint injectionPoint;
 
     /** Qualifier annotations appeared on the injection point */
     private Set<Annotation> qualifierAnnotations = new HashSet<Annotation>();
@@ -71,17 +73,17 @@ class InstanceImpl<T> implements Instanc
      * Creates new instance.
      * 
      * @param injectionClazz injection class type
-     * @param injectionPointClazz null or class of injection point
+     * @param injectionPoint null or injection point
      * @param webBeansContext
      * @param creationalContext will get used for creating &#064;Dependent beans
      * @param ownerInstance the object the current Instance got injected into
      * @param annotations qualifier annotations
      */
-    InstanceImpl(Type injectionClazz, Class<?> injectionPointClazz, WebBeansContext webBeansContext,
+    InstanceImpl(Type injectionClazz, InjectionPoint injectionPoint, WebBeansContext webBeansContext,
                  CreationalContext<?> creationalContext, Object ownerInstance, Annotation... annotations)
     {
         this.injectionClazz = injectionClazz;
-        this.injectionPointClazz=injectionPointClazz;
+        this.injectionPoint = injectionPoint;
         this.parentCreationalContext = creationalContext;
         this.ownerInstance = ownerInstance;
 
@@ -102,32 +104,40 @@ class InstanceImpl<T> implements Instanc
     {
         T instance;
 
-        Annotation[] anns = new Annotation[qualifierAnnotations.size()];
-        anns = qualifierAnnotations.toArray(anns);
+        InjectionPointBean.setThreadLocal(injectionPoint);
+        try
+        {
+            Annotation[] anns = new Annotation[qualifierAnnotations.size()];
+            anns = qualifierAnnotations.toArray(anns);
         
-        Set<Bean<?>> beans = resolveBeans();
+            Set<Bean<?>> beans = resolveBeans();
 
-        webBeansContext.getResolutionUtil().checkResolvedBeans(beans, ClassUtil.getClazz(injectionClazz), anns, null);
-        BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
+            webBeansContext.getResolutionUtil().checkResolvedBeans(beans, ClassUtil.getClazz(injectionClazz), anns, null);
+            BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
 
-        Bean<?> bean = beanManager.resolve(beans);
+            Bean<?> bean = beanManager.resolve(beans);
 
-        // since Instance<T> is Dependent, we we gonna use the parent CreationalContext by default
-        CreationalContext<?> creationalContext = parentCreationalContext;
+            // since Instance<T> is Dependent, we we gonna use the parent CreationalContext by default
+            CreationalContext<?> creationalContext = parentCreationalContext;
 
-        boolean isDependentBean = WebBeansUtil.isDependent(bean);
+            boolean isDependentBean = WebBeansUtil.isDependent(bean);
 
-        if (!isDependentBean)
-        {
-            // but for all NormalScoped beans we will need to create a fresh CreationalContext
-            creationalContext = beanManager.createCreationalContext(bean);
-        }
+            if (!isDependentBean)
+            {
+                // but for all NormalScoped beans we will need to create a fresh CreationalContext
+                creationalContext = beanManager.createCreationalContext(bean);
+            }
 
-        instance = (T) beanManager.getReference(bean, null, creationalContext);
+            instance = (T) beanManager.getReference(bean, null, creationalContext);
 
-        if (isDependentBean && ownerInstance != null && creationalContext instanceof CreationalContextImpl)
+            if (isDependentBean && ownerInstance != null && creationalContext instanceof CreationalContextImpl)
+            {
+                ((CreationalContextImpl<?>) creationalContext).addDependent(ownerInstance, bean, instance);
+            }
+        }
+        finally
         {
-            ((CreationalContextImpl<?>) creationalContext).addDependent(ownerInstance, bean, instance);
+            InjectionPointBean.removeThreadLocal();
         }
 
         return instance;
@@ -146,7 +156,13 @@ class InstanceImpl<T> implements Instanc
         InjectionResolver injectionResolver = webBeansContext.getBeanManagerImpl().getInjectionResolver();
 
         InjectionResolver resolver = injectionResolver;
-        Set<Bean<?>> beans = resolver.implResolveByType(injectionClazz, injectionPointClazz, anns);
+        Bean<?> injectionPointBean = injectionPoint.getBean();
+        Class<?> injectionPointClass = null;
+        if (injectionPointBean != null)
+        {
+            injectionPointClass = injectionPointBean.getBeanClass();
+        }
+        Set<Bean<?>> beans = resolver.implResolveByType(injectionClazz, injectionPointClass, anns);
         return beans;
     }
     
@@ -176,7 +192,7 @@ class InstanceImpl<T> implements Instanc
     public Instance<T> select(Annotation... qualifiers)
     {
         Annotation[] newQualifiersArray = getAdditionalQualifiers(qualifiers);
-        InstanceImpl<T> newInstance = new InstanceImpl<T>(injectionClazz, injectionPointClazz,
+        InstanceImpl<T> newInstance = new InstanceImpl<T>(injectionClazz, injectionPoint,
                                                           webBeansContext, parentCreationalContext,
                                                           ownerInstance, newQualifiersArray);
 
@@ -229,7 +245,7 @@ class InstanceImpl<T> implements Instanc
         
         Annotation[] newQualifiers = getAdditionalQualifiers(qualifiers);
         
-        InstanceImpl<U> newInstance = new InstanceImpl(sub, injectionPointClazz, webBeansContext,
+        InstanceImpl<U> newInstance = new InstanceImpl(sub, injectionPoint, webBeansContext,
                                                        parentCreationalContext, ownerInstance,
                                                        newQualifiers);
                     
@@ -252,10 +268,18 @@ class InstanceImpl<T> implements Instanc
     {
         Set<Bean<?>> beans = resolveBeans();
         Set<T> instances = new HashSet<T>();
-        for(Bean<?> bean : beans)
+        InjectionPointBean.setThreadLocal(injectionPoint);
+        try
+        {
+            for(Bean<?> bean : beans)
+            {
+                T instance = (T) webBeansContext.getBeanManagerImpl().getReference(bean,null, parentCreationalContext);
+                instances.add(instance);
+            }
+        }
+        finally
         {
-            T instance = (T) webBeansContext.getBeanManagerImpl().getReference(bean,null, parentCreationalContext);
-            instances.add(instance);
+            InjectionPointBean.removeThreadLocal();
         }
         
         return instances.iterator();
@@ -266,7 +290,7 @@ class InstanceImpl<T> implements Instanc
         ObjectOutputStream oos = new ObjectOutputStream(op);
         oos.writeObject(injectionClazz);
         oos.writeObject(qualifierAnnotations);
-        oos.writeObject(injectionPointClazz);
+        oos.writeObject(injectionPoint);
         
         oos.flush();
     }
@@ -277,7 +301,7 @@ class InstanceImpl<T> implements Instanc
         final ObjectInputStream inputStream = new OwbCustomObjectInputStream(in, WebBeansUtil.getCurrentClassLoader());
         injectionClazz = (Type)inputStream.readObject();
         qualifierAnnotations = (Set<Annotation>)inputStream.readObject();
-        injectionPointClazz = (Class<?>) inputStream.readObject();
+        injectionPoint = (InjectionPoint) inputStream.readObject();
     }
     
 
@@ -286,7 +310,7 @@ class InstanceImpl<T> implements Instanc
         StringBuilder builder = new StringBuilder();
         builder.append("Instance<");
         builder.append(ClassUtil.getClazz(injectionClazz).getName());
-        builder.append("> injectionPointClazz=").append(injectionPointClazz);
+        builder.append("> injectionPointClazz=").append(injectionPoint);
         
         builder.append(",with qualifier annotations {");
         int i = 0;

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/InjectedInstanceComponentTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/InjectedInstanceComponentTest.java?rev=1398045&r1=1398044&r2=1398045&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/InjectedInstanceComponentTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/InjectedInstanceComponentTest.java Sun Oct 14 09:54:52 2012
@@ -19,9 +19,20 @@
 
 package org.apache.webbeans.newtests.managed.instance;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.util.TypeLiteral;
+
 import junit.framework.Assert;
+
 import org.apache.webbeans.newtests.AbstractUnitTest;
 import org.apache.webbeans.newtests.managed.instance.beans.DependentBean;
+import org.apache.webbeans.newtests.managed.instance.beans.DependentBeanProducer;
 import org.apache.webbeans.newtests.managed.instance.beans.InstanceForDependentBean;
 import org.apache.webbeans.newtests.managed.instance.beans.InstanceInjectedComponent;
 import org.apache.webbeans.test.component.CheckWithCheckPayment;
@@ -30,14 +41,6 @@ import org.apache.webbeans.test.componen
 import org.apache.webbeans.test.component.PaymentProcessorComponent;
 import org.junit.Test;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.Instance;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.util.TypeLiteral;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Set;
-
 
 public class InjectedInstanceComponentTest extends AbstractUnitTest
 {
@@ -74,6 +77,25 @@ public class InjectedInstanceComponentTe
     }
 
     @Test
+    public void testInstanceProducedWithInjectionPoint()
+    {
+        Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
+
+        beanClasses.add(InstanceForDependentBean.class);
+        beanClasses.add(DependentBean.class);
+        beanClasses.add(DependentBeanProducer.class);
+        startContainer(beanClasses, null);
+
+        InstanceForDependentBean holder = getInstance(InstanceForDependentBean.class);
+        Assert.assertNotNull(holder);
+
+        Assert.assertEquals(42, holder.getMeaningOfLife());
+        Assert.assertEquals(0, holder.getSecondaryMeaning());
+
+        shutDownContainer();
+    }
+
+    @Test
     public void testInstanceDestroyal()
     {
         Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBean.java?rev=1398045&r1=1398044&r2=1398045&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBean.java Sun Oct 14 09:54:52 2012
@@ -30,9 +30,11 @@ public class DependentBean
 
     public static boolean properlyDestroyed = false;
 
+    int meaningOfLife = 42;
+    
     public int getMeaningOfLife()
     {
-        return 42;
+        return meaningOfLife;
     }
 
     @PreDestroy

Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBeanProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBeanProducer.java?rev=1398045&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBeanProducer.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/DependentBeanProducer.java Sun Oct 14 09:54:52 2012
@@ -0,0 +1,34 @@
+/*
+ * 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.webbeans.newtests.managed.instance.beans;
+
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import javax.enterprise.inject.spi.InjectionPoint;
+
+public class DependentBeanProducer {
+
+    @Produces
+    @Dependent
+    @MeaningOfLife
+    public DependentBean produce(InjectionPoint ip, DependentBean bean) {
+        bean.meaningOfLife = ip.getAnnotated().getAnnotation(MeaningOfLife.class).value();
+        return bean;
+    }
+}

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/InstanceForDependentBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/InstanceForDependentBean.java?rev=1398045&r1=1398044&r2=1398045&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/InstanceForDependentBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/InstanceForDependentBean.java Sun Oct 14 09:54:52 2012
@@ -32,9 +32,17 @@ public class InstanceForDependentBean
     @Inject
     private Instance<DependentBean> instance;
 
-
+    @Inject
+    @MeaningOfLife(0)
+    private Instance<DependentBean> secondaryInstance; 
+    
     public int getMeaningOfLife()
     {
         return instance.get().getMeaningOfLife();
     }
+
+    public int getSecondaryMeaning()
+    {
+        return secondaryInstance.get().getMeaningOfLife();
+    }
 }

Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/MeaningOfLife.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/MeaningOfLife.java?rev=1398045&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/MeaningOfLife.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/MeaningOfLife.java Sun Oct 14 09:54:52 2012
@@ -0,0 +1,41 @@
+/*
+ * 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.webbeans.newtests.managed.instance.beans;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+
+@Target( { TYPE, METHOD, PARAMETER, FIELD })
+@Retention(RUNTIME)
+@Documented
+@Qualifier
+public @interface MeaningOfLife
+{
+    @Nonbinding int value() default 42;
+}

Propchange: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/managed/instance/beans/MeaningOfLife.java
------------------------------------------------------------------------------
    svn:executable = *