You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2010/02/14 03:06:15 UTC

svn commit: r909953 - in /openwebbeans/trunk/webbeans-resource: ./ src/main/java/org/apache/webbeans/resource/ src/main/java/org/apache/webbeans/resource/spi/se/ src/main/resources/META-INF/services/

Author: gerdogdu
Date: Sun Feb 14 02:06:15 2010
New Revision: 909953

URL: http://svn.apache.org/viewvc?rev=909953&view=rev
Log:
[OWB-281] update resource plugin handling

Added:
    openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/StandaloneResourcePlugin.java
      - copied, changed from r908638, openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/OpenWebBeansResourcePlugin.java
    openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java
      - copied, changed from r908638, openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/ResourceServiceImpl.java
Removed:
    openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/OpenWebBeansResourcePlugin.java
    openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/ResourceServiceImpl.java
Modified:
    openwebbeans/trunk/webbeans-resource/pom.xml
    openwebbeans/trunk/webbeans-resource/src/main/resources/META-INF/services/org.apache.webbeans.plugins.OpenWebBeansPlugin

Modified: openwebbeans/trunk/webbeans-resource/pom.xml
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-resource/pom.xml?rev=909953&r1=909952&r2=909953&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-resource/pom.xml (original)
+++ openwebbeans/trunk/webbeans-resource/pom.xml Sun Feb 14 02:06:15 2010
@@ -30,12 +30,6 @@
     <packaging>jar</packaging>
     <description>OpenWebBeans Resource Integration</description>
     <dependencies>
-        <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-jcdi_1.0_spec</artifactId>
-            <scope>provided</scope>
-        </dependency>
-
 
         <dependency>
             <groupId>org.apache.openwebbeans</groupId>
@@ -44,7 +38,7 @@
 
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-el_1.0_spec</artifactId>
+            <artifactId>geronimo-el_2.2_spec</artifactId>
             <scope>test</scope>
         </dependency>
 
@@ -57,8 +51,6 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>4.5</version>
-            <scope>test</scope>
         </dependency>
     </dependencies>
 </project>

Copied: openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/StandaloneResourcePlugin.java (from r908638, openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/OpenWebBeansResourcePlugin.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/StandaloneResourcePlugin.java?p2=openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/StandaloneResourcePlugin.java&p1=openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/OpenWebBeansResourcePlugin.java&r1=908638&r2=909953&rev=909953&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/OpenWebBeansResourcePlugin.java (original)
+++ openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/StandaloneResourcePlugin.java Sun Feb 14 02:06:15 2010
@@ -14,25 +14,22 @@
 package org.apache.webbeans.resource;
 
 import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.Type;
 
 import javax.annotation.Resource;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
 import javax.persistence.PersistenceContext;
-import javax.persistence.PersistenceContextType;
 import javax.persistence.PersistenceUnit;
 import javax.xml.ws.WebServiceRef;
 
 import org.apache.webbeans.exception.WebBeansConfigurationException;
-import org.apache.webbeans.plugins.AbstractOpenWebBeansPlugin;
-import org.apache.webbeans.spi.ResourceService;
-import org.apache.webbeans.spi.ServiceLoader;
+import org.apache.webbeans.logger.WebBeansLogger;
+import org.apache.webbeans.plugins.AbstractOwbPlugin;
+import org.apache.webbeans.resource.spi.se.StandaloneResourceProcessor;
 
-public class OpenWebBeansResourcePlugin extends AbstractOpenWebBeansPlugin implements org.apache.webbeans.plugins.OpenWebBeansResourcePlugin
+public class StandaloneResourcePlugin extends AbstractOwbPlugin implements org.apache.webbeans.plugins.OpenWebBeansResourcePlugin
 {
 
+    private static final WebBeansLogger logger = WebBeansLogger.getLogger(StandaloneResourcePlugin.class);
+    
     @Override
     public boolean isResourceAnnotation(Class<? extends Annotation> annotationClass)
     {
@@ -48,62 +45,30 @@
     }
 
     @Override
-    public void injectResources(Object instance) throws RuntimeException
+    public void clear()
     {
-        Field[] fields = instance.getClass().getDeclaredFields();
-        ResourceService service = ServiceLoader.getService(ResourceService.class);
-        for(Field field : fields)
-        {
-            boolean access = field.isAccessible();
-            try
-            {                
-                field.setAccessible(true);
-                Object resource = service.getResource(field);
-                
-                if(resource != null)
-                {
-                    field.set(instance, resource);   
-                }                
-            }
-            catch (IllegalAccessException e)
-            {
-                throw new RuntimeException(e);
-            }finally
-            {
-                field.setAccessible(access);
-            }
-        }
+        StandaloneResourceProcessor.getProcessor().clear();
     }
 
-    /** {@inheritDoc} */
-    public void checkForValidResources(Type type, Class<?> clazz, String name, Annotation[] annotations)
+    @Override
+    public <T> T getResource(Class<?> owner, String name, Class<T> resourceType, Annotation[] resourceAnns)
     {
-        for (Annotation a : annotations)
+        try
         {
-            if (a.annotationType().equals(PersistenceUnit.class))
-            {
-                if (!type.equals(EntityManagerFactory.class))
-                {
-                    throw new WebBeansConfigurationException("@PersistenceUnit must only be injected into field/method with type EntityManagerFactory! class : " + clazz.getName() + " in field/method : " + name);
-                }
-            }
-
-            if (a.annotationType().equals(PersistenceContext.class))
-            {
-                PersistenceContext pc = (PersistenceContext) a;
-
-                if (!type.equals(EntityManager.class))
-                {
-                    throw new WebBeansConfigurationException("@PersistenceContext must only be injected into field/method with type EntityManager! class : " + clazz.getName() + " in field/method : " + name);
-                }
-
-                if (pc.type().equals(PersistenceContextType.EXTENDED))
-                {
-                    throw new WebBeansConfigurationException("type of @PersistenceContext must not be 'EXTENDED'! class : " + clazz.getName() + " in field/method : " + name);
-
-                }
-            }
+            return StandaloneResourceProcessor.getProcessor().getResource(owner, resourceType, resourceAnns);
+            
+        }catch(Exception e)
+        {
+            logger.error("Unable to get resource with class " + resourceType + " in " + owner + " with name " + name,e);
+            throw new WebBeansConfigurationException("Unable to get resource with class " + resourceType + " in " + owner + " with name " + name,e);
         }
+        
+    }
+
+    @Override
+    public <T> void validateResource(Class<?> owner, String name, Class<T> resourceType, Annotation[] resourceAnns)
+    {
+        getResource(owner, name, resourceType, resourceAnns);
     }
 
 }

Copied: openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java (from r908638, openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/ResourceServiceImpl.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java?p2=openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java&p1=openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/ResourceServiceImpl.java&r1=908638&r2=909953&rev=909953&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/ResourceServiceImpl.java (original)
+++ openwebbeans/trunk/webbeans-resource/src/main/java/org/apache/webbeans/resource/spi/se/StandaloneResourceProcessor.java Sun Feb 14 02:06:15 2010
@@ -13,8 +13,9 @@
  */
 package org.apache.webbeans.resource.spi.se;
 
-import java.lang.reflect.Field;
+import java.lang.annotation.Annotation;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.annotation.Resource;
@@ -26,15 +27,22 @@
 import javax.persistence.PersistenceUnit;
 
 import org.apache.webbeans.config.OWBLogConst;
-import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.logger.WebBeansLogger;
-import org.apache.webbeans.spi.ResourceService;
+import org.apache.webbeans.util.AnnotationUtil;
 
-public class ResourceServiceImpl implements ResourceService
+public class StandaloneResourceProcessor
 { 
     private static InitialContext context = null;
     
-    private static WebBeansLogger logger = WebBeansLogger.getLogger(ResourceServiceImpl.class);
+    private static WebBeansLogger logger = WebBeansLogger.getLogger(StandaloneResourceProcessor.class);
+    
+    private static final StandaloneResourceProcessor processor = new StandaloneResourceProcessor();
+    
+    /**
+     *  A cache for EntityManagerFactories.
+     */
+    private Map<String, EntityManagerFactory> factoryCache = new ConcurrentHashMap<String, EntityManagerFactory>();    
     
     static
     {
@@ -48,36 +56,43 @@
         }
     }
 
-    @Override
-    public Object getResource(Field field) throws WebBeansException
+    public static StandaloneResourceProcessor getProcessor()
+    {
+        return processor;
+    }
+    
+    public <T> T getResource(Class<?> owner, Class<T> resourceClass, Annotation[] resourceAnnotations)
     {
         Object obj = null;
         
-        if (field.isAnnotationPresent(PersistenceContext.class))
+        if (AnnotationUtil.hasAnnotation(resourceAnnotations, PersistenceContext.class))
         {
-            PersistenceContext context = field.getAnnotation(PersistenceContext.class);            
+            PersistenceContext context = AnnotationUtil.getAnnotation(resourceAnnotations, PersistenceContext.class);            
             obj = getPersistenceContext(context.unitName());
-            if (obj == null) {
+            if (obj == null) 
+            {
             	logger.info("Could not find @PersistenceContext with unit name " + context.unitName());
             }
         }
         
-        else if (field.isAnnotationPresent(PersistenceUnit.class))
+        else if (AnnotationUtil.hasAnnotation(resourceAnnotations, PersistenceUnit.class))
         {
-            PersistenceUnit annotation = field.getAnnotation(PersistenceUnit.class);
+            PersistenceUnit annotation = AnnotationUtil.getAnnotation(resourceAnnotations, PersistenceUnit.class);
             
             obj = getPersistenceUnit(annotation.unitName());
-            if (obj == null) {
+            if (obj == null) 
+            {
             	logger.info("Could not find @PersistenceUnit with unit name " + annotation.unitName());
             }
         }
-        else if(field.isAnnotationPresent(Resource.class))
+        else if (AnnotationUtil.hasAnnotation(resourceAnnotations, Resource.class))
         {
-            Resource resource = field.getAnnotation(Resource.class);            
+            Resource resource = AnnotationUtil.getAnnotation(resourceAnnotations, Resource.class);     
             try
             {
                 obj = context.lookup("java:/comp/env/"+ resource.name()); 
-                if (obj == null) {
+                if (obj == null) 
+                {
                 	logger.info("Could not find @Resource with name " + resource.name());
                 }
 
@@ -88,13 +103,21 @@
             }             
         }        
         
-        return obj;
+        return resourceClass.cast(obj);
+    }
+    
+    public <T> void validateResource(Class<?> owner, Class<T> resourceClass, Annotation[] resourceAnnotations)
+    {
+        try
+        {
+            getResource(owner, resourceClass, resourceAnnotations);
+            
+        }catch(Exception e)
+        {
+            logger.error("Unable to get resource with class " + resourceClass + " in " + owner,e);
+            throw new WebBeansConfigurationException("Unable to get resource with class " + resourceClass + " in " + owner,e);
+        }    
     }
-
-    /**
-     *  A cache for EntityManagerFactories.
-     */
-    private Map<String, EntityManagerFactory> factoryCache = new ConcurrentHashMap<String, EntityManagerFactory>();
 
     /**
      * {@inheritDoc}
@@ -107,9 +130,7 @@
             return factoryCache.get(unitName);
         }
         
-        //X TODO this currently ignores JNDI
-        EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitName);
-        
+        EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitName);        
         factoryCache.put(unitName, emf);
             
         return emf;
@@ -127,5 +148,22 @@
         
         return em;
     }
+    
+    public void clear()
+    {
+        Set<String> keys = this.factoryCache.keySet();
+        for(String key : keys)
+        {
+            EntityManagerFactory factory = this.factoryCache.get(key);
+            try
+            {
+                factory.close();
+                
+            }catch(Exception e)
+            {
+                logger.warn("Unable to close entity manager factory with name : " + key,e);
+            }
+        }
+    }
 
 }

Modified: openwebbeans/trunk/webbeans-resource/src/main/resources/META-INF/services/org.apache.webbeans.plugins.OpenWebBeansPlugin
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-resource/src/main/resources/META-INF/services/org.apache.webbeans.plugins.OpenWebBeansPlugin?rev=909953&r1=909952&r2=909953&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-resource/src/main/resources/META-INF/services/org.apache.webbeans.plugins.OpenWebBeansPlugin (original)
+++ openwebbeans/trunk/webbeans-resource/src/main/resources/META-INF/services/org.apache.webbeans.plugins.OpenWebBeansPlugin Sun Feb 14 02:06:15 2010
@@ -18,4 +18,4 @@
 # this file contains the service implementation for the 
 # resource integration into OpenWebBeans
 # this file contains information for java.util.ServiceLoader
-org.apache.webbeans.resource.OpenWebBeansResourcePlugin
\ No newline at end of file
+org.apache.webbeans.resource.StandaloneResourcePlugin
\ No newline at end of file