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