You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ti...@apache.org on 2011/12/08 10:51:19 UTC
svn commit: r1211794 - in /aries/trunk/jpa/jpa-blueprint-aries/src:
main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java
test/java/org/apache/aries/jpa/blueprint/aries/test/NSHandlerTest.java
Author: timothyjward
Date: Thu Dec 8 09:51:18 2011
New Revision: 1211794
URL: http://svn.apache.org/viewvc?rev=1211794&view=rev
Log:
ARIES-796: Avoid creating immutable blueprint metadata in the JPA namespace handler
Modified:
aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java
aries/trunk/jpa/jpa-blueprint-aries/src/test/java/org/apache/aries/jpa/blueprint/aries/test/NSHandlerTest.java
Modified: aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java?rev=1211794&r1=1211793&r2=1211794&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java (original)
+++ aries/trunk/jpa/jpa-blueprint-aries/src/main/java/org/apache/aries/jpa/blueprint/aries/impl/NSHandler.java Thu Dec 8 09:51:18 2011
@@ -43,14 +43,11 @@ import org.apache.aries.jpa.container.co
import org.apache.aries.util.nls.MessageUtil;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
-import org.osgi.service.blueprint.reflect.BeanArgument;
import org.osgi.service.blueprint.reflect.BeanMetadata;
-import org.osgi.service.blueprint.reflect.BeanProperty;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.osgi.service.blueprint.reflect.MapEntry;
import org.osgi.service.blueprint.reflect.MapMetadata;
import org.osgi.service.blueprint.reflect.Metadata;
-import org.osgi.service.blueprint.reflect.RefMetadata;
import org.osgi.service.blueprint.reflect.ReferenceMetadata;
import org.osgi.service.blueprint.reflect.ValueMetadata;
import org.slf4j.Logger;
@@ -161,29 +158,64 @@ public class NSHandler implements Namesp
property = property.isEmpty() ? null : property;
String index = element.getAttribute(ATTR_INDEX);
index = index.isEmpty() ? null : index;
+ String unitName = parseUnitName(element);
+ boolean isPersistenceUnit = TAG_UNIT.equals(element.getLocalName());
+
if(property != null && index != null) {
_logger.error(MESSAGES.getMessage("invalid.property.and.index"));
} else if (property != null) {
-
- // Create an injection point for the JPA resource (a blueprint property)
- BeanProperty beanProperty = createBeanProperty(element, property,
- TAG_UNIT.equals(element.getLocalName()), context);
+ if (_logger.isDebugEnabled()) {
+ if (isPersistenceUnit)
+ _logger.debug("Creating blueprint injection metadata to inject the unit {} into bean property {}",
+ new Object[] { unitName, property });
+ else
+ _logger.debug("Creating blueprint injection metadata to inject the context {} into bean property {}",
+ new Object[] { unitName, property });
+ }
- bean.addProperty(beanProperty);
+ bean.addProperty(property, createTargetMetadata(isPersistenceUnit, context, unitName));
+
} else {
- //Create a constructor argument for the JPA resource
- BeanArgument argument = createArgument(element, index,
- TAG_UNIT.equals(element.getLocalName()), context);
+ if (_logger.isDebugEnabled()) {
+ if (isPersistenceUnit) {
+ if (index == null)
+ _logger.debug("Creating blueprint injection metadata to inject the unit {} as a constructor argument",
+ new Object[] { unitName });
+ else
+ _logger.debug("Creating blueprint injection metadata to inject the unit {} as a constructor argument" +
+ " with index {}", new Object[] { unitName, index });
+ } else {
+ if (index == null)
+ _logger.debug("Creating blueprint injection metadata to inject the context {} as a constructor argument",
+ new Object[] { unitName });
+ else
+ _logger.debug("Creating blueprint injection metadata to inject the context {} as a constructor argument" +
+ " with index {}", new Object[] { unitName, index });
+ }
+ }
+
+ int i;
- bean.addArgument(argument);
+ if(index == null) {
+ i = -1;
+ } else {
+ try {
+ i = Integer.parseInt(index);
+ } catch (NumberFormatException nfe) {
+ throw new IllegalArgumentException(MESSAGES.getMessage("index.not.a.number", index), nfe);
+ }
+ }
+
+ bean.addArgument(createTargetMetadata(isPersistenceUnit, context, unitName),
+ isPersistenceUnit ? EntityManagerFactory.class.getName() : EntityManager.class.getName(),
+ i);
}
// If this is a persistence context then register it with the manager
if (TAG_CONTEXT.equals(element.getLocalName())) {
Bundle client = getBlueprintBundle(context);
- String unitName = parseUnitName(element);
if (client != null) {
HashMap<String, Object> properties = new HashMap<String, Object>();
@@ -250,116 +282,11 @@ public class NSHandler implements Namesp
_logger.warn(MESSAGES.getMessage("jpa.support.gone"));
}
- /**
- * Create a BeanProperty that will inject a JPA resource into a bean
- *
- * @param element
- * The element being parsed
- * @param isPersistenceUnit
- * true if this is a persistence unit
- * @param ctx
- * The current parser context
- * @return
- */
- private BeanProperty createBeanProperty(Element element, final String property,
- boolean isPersistenceUnit, ParserContext ctx) {
- String unitName = parseUnitName(element);
-
- if (_logger.isDebugEnabled()) {
- if (isPersistenceUnit)
- _logger.debug("Creating blueprint injection metadata to inject the unit {} into bean property {}",
- new Object[] { unitName, property });
- else
- _logger.debug("Creating blueprint injection metadata to inject the context {} into bean property {}",
- new Object[] { unitName, property });
- }
-
- final Metadata target = createTargetMetadata(isPersistenceUnit, ctx,
- unitName);
-
- return new BeanProperty() {
- public Metadata getValue() {
- return target;
- }
-
- public String getName() {
- return property;
- }
- };
- }
-
- /**
- * Create a BeanProperty that will inject a JPA resource into a bean
- *
- * @param element
- * The element being parsed
- * @param isPersistenceUnit
- * true if this is a persistence unit
- * @param ctx
- * The current parser context
- * @return
- */
- private BeanArgument createArgument(Element element, final String index,
- final boolean isPersistenceUnit, ParserContext ctx) {
-
- String unitName = parseUnitName(element);
- if (_logger.isDebugEnabled()) {
- if (isPersistenceUnit) {
- if (index == null)
- _logger.debug("Creating blueprint injection metadata to inject the unit {} as a constructor argument",
- new Object[] { unitName });
- else
- _logger.debug("Creating blueprint injection metadata to inject the unit {} as a constructor argument" +
- " with index {}", new Object[] { unitName, index });
- } else {
- if (index == null)
- _logger.debug("Creating blueprint injection metadata to inject the context {} as a constructor argument",
- new Object[] { unitName });
- else
- _logger.debug("Creating blueprint injection metadata to inject the context {} as a constructor argument" +
- " with index {}", new Object[] { unitName, index });
- }
- }
-
- final int i;
-
- if(index == null) {
- i = -1;
- } else {
- try {
- i = Integer.parseInt(index);
- } catch (NumberFormatException nfe) {
- throw new IllegalArgumentException(MESSAGES.getMessage("index.not.a.number", index), nfe);
- }
- }
-
- final Metadata target = createTargetMetadata(isPersistenceUnit, ctx,
- unitName);
-
- return new BeanArgument() {
- public Metadata getValue() {
- return target;
- }
-
- @Override
- public String getValueType() {
- return isPersistenceUnit ? "javax.persistence.EntityManagerFactory"
- : "javax.persistence.EntityManager";
- }
-
- @Override
- public int getIndex() {
- return i;
- }
- };
- }
-
- private Metadata createTargetMetadata(boolean isPersistenceUnit,
+ private ComponentMetadata createTargetMetadata(boolean isPersistenceUnit,
ParserContext ctx, String unitName) {
// Create a service reference for the EMF (it is an EMF for persistence
// contexts and units)
- final MutableReferenceMetadata refMetadata = (MutableReferenceMetadata) ctx
- .createMetadata(ReferenceMetadata.class);
+ final MutableReferenceMetadata refMetadata = ctx.createMetadata(MutableReferenceMetadata.class);
refMetadata.setActivation(ACTIVATION_EAGER.equalsIgnoreCase(ctx
.getDefaultActivation()) ? ReferenceMetadata.ACTIVATION_EAGER
: ReferenceMetadata.ACTIVATION_LAZY);
@@ -393,7 +320,7 @@ public class NSHandler implements Namesp
// Finally, if this is a persistence context we need to create the
// entity manager as the Target
- final Metadata target = isPersistenceUnit ? refMetadata
+ ComponentMetadata target = isPersistenceUnit ? refMetadata
: createInjectionBeanMetedata(ctx, refMetadata);
return target;
}
@@ -408,8 +335,8 @@ public class NSHandler implements Namesp
* the reference bean for the persistence context factory
* @return
*/
- private Metadata createInjectionBeanMetedata(ParserContext ctx,
- ReferenceMetadata factory) {
+ private ComponentMetadata createInjectionBeanMetedata(ParserContext ctx,
+ ComponentMetadata factory) {
if (_logger.isDebugEnabled())
_logger.debug("Creating a managed persistence context definition for injection");
@@ -418,10 +345,8 @@ public class NSHandler implements Namesp
ctx.getComponentDefinitionRegistry().registerComponentDefinition(
factory);
- MutableBeanMetadata meta = (MutableBeanMetadata) ctx
- .createMetadata(BeanMetadata.class);
- MutableRefMetadata ref = (MutableRefMetadata) ctx
- .createMetadata(RefMetadata.class);
+ MutableBeanMetadata meta = ctx.createMetadata(MutableBeanMetadata.class);
+ MutableRefMetadata ref = ctx.createMetadata(MutableRefMetadata.class);
ref.setComponentId(factory.getId());
meta.setFactoryComponent(ref);
meta.setActivation(factory.getActivation());
Modified: aries/trunk/jpa/jpa-blueprint-aries/src/test/java/org/apache/aries/jpa/blueprint/aries/test/NSHandlerTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-blueprint-aries/src/test/java/org/apache/aries/jpa/blueprint/aries/test/NSHandlerTest.java?rev=1211794&r1=1211793&r2=1211794&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-blueprint-aries/src/test/java/org/apache/aries/jpa/blueprint/aries/test/NSHandlerTest.java (original)
+++ aries/trunk/jpa/jpa-blueprint-aries/src/test/java/org/apache/aries/jpa/blueprint/aries/test/NSHandlerTest.java Thu Dec 8 09:51:18 2011
@@ -110,9 +110,9 @@ public class NSHandlerTest {
}
public<T extends Metadata> T createMetadata(Class<T> clazz) {
- if (clazz.isAssignableFrom(ReferenceMetadata.class))
+ if (ReferenceMetadata.class.isAssignableFrom(clazz))
return clazz.cast(new ReferenceMetadataImpl());
- else if (clazz.isAssignableFrom(RefMetadata.class))
+ else if (RefMetadata.class.isAssignableFrom(clazz))
return clazz.cast(new RefMetadataImpl());
else
return clazz.cast(new BeanMetadataImpl());