Modified: aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java (original) +++ aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/GeneratorTest.java Wed Apr 13 18:41:23 2016 @@ -36,15 +36,21 @@ import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.apache.aries.blueprint.plugin.model.Context; +import org.apache.aries.blueprint.plugin.model.TransactionalDef; import org.apache.aries.blueprint.plugin.test.MyBean1; +import org.apache.aries.blueprint.plugin.test.ServiceA; +import org.apache.aries.blueprint.plugin.test.ServiceB; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.xbean.finder.ClassFinder; import org.junit.Assert; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import com.google.common.collect.Sets; + public class GeneratorTest { private XPath xpath; @@ -72,22 +78,60 @@ public class GeneratorTest { Assert.assertEquals("init", xpath.evaluate("@init-method", bean1)); Assert.assertEquals("destroy", xpath.evaluate("@destroy-method", bean1)); Assert.assertEquals("true", xpath.evaluate("@field-injection", bean1)); - + Assert.assertEquals("", xpath.evaluate("@scope", bean1)); + // @Transactional - Assert.assertEquals("*", xpath.evaluate("transaction/@method", bean1)); - Assert.assertEquals("Required", xpath.evaluate("transaction/@value", bean1)); + NodeList txs = (NodeList) xpath.evaluate("transaction", bean1, XPathConstants.NODESET); + Set<TransactionalDef> defs = new HashSet<TransactionalDef>(); + for (int i = 0; i < txs.getLength(); ++i) { + Node tx = txs.item(i); + defs.add(new TransactionalDef(xpath.evaluate("@method", tx), xpath.evaluate("@value", tx))); + } + Set<TransactionalDef> expectedDefs = Sets.newHashSet(new TransactionalDef("*", "RequiresNew"), + new TransactionalDef("txNotSupported", "NotSupported"), + new TransactionalDef("txMandatory", "Mandatory"), + new TransactionalDef("txNever", "Never"), + new TransactionalDef("txRequired", "Required"), + new TransactionalDef("txOverridenWithRequiresNew", "RequiresNew"), + new TransactionalDef("txSupports", "Supports")); + Assert.assertEquals(expectedDefs, defs); // @PersistenceContext Assert.assertEquals("person", xpath.evaluate("context/@unitname", bean1)); Assert.assertEquals("em", xpath.evaluate("context/@property", bean1)); - + // @PersistenceUnit Assert.assertEquals("person", xpath.evaluate("unit/@unitname", bean1)); Assert.assertEquals("emf", xpath.evaluate("unit/@property", bean1)); - + // @Autowired Assert.assertEquals("my1", xpath.evaluate("property[@name='bean2']/@ref", bean1)); + // Service with 1 interface + Node serviceAImpl2 = (Node) xpath.evaluate("/blueprint/service[@ref='my2']", document, XPathConstants.NODE); + Assert.assertEquals(ServiceA.class.getName(), xpath.evaluate("@interface", serviceAImpl2)); + Assert.assertEquals("", xpath.evaluate("@auto-export", serviceAImpl2)); + Assert.assertEquals("", xpath.evaluate("interfaces", serviceAImpl2)); + + // Service with 0 interfaces (using auto-export=interfaces instead) + Node serviceAImpl3 = (Node) xpath.evaluate("/blueprint/service[@ref='serviceAImpl3']", document, XPathConstants.NODE); + Assert.assertEquals("", xpath.evaluate("@interface", serviceAImpl3)); + Assert.assertEquals("interfaces", xpath.evaluate("@auto-export", serviceAImpl3)); + Assert.assertEquals("", xpath.evaluate("interfaces", serviceAImpl3)); + + // Service with 2 interfaces (using <interfaces><value>ServiceA</value><value>ServiceB</value></interfaces> + Node serviceABImpl = (Node) xpath.evaluate("/blueprint/service[@ref='serviceABImpl']", document, XPathConstants.NODE); + Assert.assertEquals("", xpath.evaluate("@interface", serviceABImpl)); + Assert.assertEquals("", xpath.evaluate("@auto-export", serviceABImpl)); + + NodeList interfaceValues = (NodeList) xpath.evaluate("interfaces/value", serviceABImpl, XPathConstants.NODESET); + Set<String> interfaceNames = new HashSet<String>(); + for (int i = 0; i < interfaceValues.getLength(); ++i) { + Node interfaceValue = interfaceValues.item(i); + interfaceNames.add(interfaceValue.getTextContent()); + } + Assert.assertEquals(Sets.newHashSet(ServiceA.class.getName(), ServiceB.class.getName()), + interfaceNames); } private Document readToDocument(ByteArrayOutputStream os) throws ParserConfigurationException,
Modified: aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java (original) +++ aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/BeanTest.java Wed Apr 13 18:41:23 2016 @@ -19,10 +19,21 @@ package org.apache.aries.blueprint.plugin.model; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.Set; import javax.inject.Named; +import org.apache.aries.blueprint.plugin.bad.BadBean1; +import org.apache.aries.blueprint.plugin.bad.BadBean2; +import org.apache.aries.blueprint.plugin.bad.BadBean3; +import org.apache.aries.blueprint.plugin.bad.BadFieldBean1; +import org.apache.aries.blueprint.plugin.bad.BadFieldBean2; +import org.apache.aries.blueprint.plugin.bad.BadFieldBean3; +import org.apache.aries.blueprint.plugin.bad.FieldBean4; import org.apache.aries.blueprint.plugin.test.MyBean1; import org.apache.aries.blueprint.plugin.test.MyBean3; import org.apache.aries.blueprint.plugin.test.MyBean4; @@ -30,9 +41,10 @@ import org.apache.aries.blueprint.plugin import org.junit.Assert; import org.junit.Test; +import com.google.common.collect.Sets; public class BeanTest { - + @Test public void testParseMyBean1() { Bean bean = new Bean(MyBean1.class); @@ -41,17 +53,25 @@ public class BeanTest { assertEquals("myBean1", bean.id); // Name derived from class name assertEquals("init", bean.initMethod); assertEquals("destroy", bean.destroyMethod); - Assert.assertEquals(2, bean.persistenceFields.length); - assertEquals("em", bean.persistenceFields[0].getName()); - assertEquals("emf", bean.persistenceFields[1].getName()); - assertEquals("*", bean.transactionDef.getMethod()); - assertEquals("Required", bean.transactionDef.getType()); + Assert.assertEquals(2, bean.persistenceFields.size()); + assertEquals("em", bean.persistenceFields.get(0).getName()); + assertEquals("emf", bean.persistenceFields.get(1).getName()); assertEquals(1, bean.properties.size()); + assertFalse(bean.isPrototype); Property prop = bean.properties.iterator().next(); assertEquals("bean2", prop.name); assertEquals("serviceA", prop.ref); + + Set<TransactionalDef> expectedTxs = Sets.newHashSet(new TransactionalDef("*", "RequiresNew"), + new TransactionalDef("txNotSupported", "NotSupported"), + new TransactionalDef("txMandatory", "Mandatory"), + new TransactionalDef("txNever", "Never"), + new TransactionalDef("txRequired", "Required"), + new TransactionalDef("txOverridenWithRequiresNew", "RequiresNew"), + new TransactionalDef("txSupports", "Supports")); + assertEquals(expectedTxs, bean.transactionDefs); } - + @Test public void testParseMyBean3() { Bean bean = new Bean(MyBean3.class); @@ -60,12 +80,20 @@ public class BeanTest { assertEquals("myBean3", bean.id); // Name derived from class name assertNull("There should be no initMethod", bean.initMethod); assertNull("There should be no destroyMethod", bean.destroyMethod); - assertEquals("There should be no persistence fields", 0, bean.persistenceFields.length); - assertEquals("*", bean.transactionDef.getMethod()); - assertEquals("RequiresNew", bean.transactionDef.getType()); + assertEquals("There should be no persistence fields", 0, bean.persistenceFields.size()); assertEquals(5, bean.properties.size()); + assertTrue(bean.isPrototype); + + Set<TransactionalDef> expectedTxs = Sets.newHashSet(new TransactionalDef("*", "RequiresNew"), + new TransactionalDef("txNotSupported", "NotSupported"), + new TransactionalDef("txMandatory", "Mandatory"), + new TransactionalDef("txNever", "Never"), + new TransactionalDef("txRequired", "Required"), + new TransactionalDef("txRequiresNew", "RequiresNew"), + new TransactionalDef("txSupports", "Supports")); + assertEquals(expectedTxs, bean.transactionDefs); } - + @Test public void testParseNamedBean() { Bean bean = new Bean(ServiceAImpl1.class); @@ -75,11 +103,12 @@ public class BeanTest { assertEquals("Name should be defined using @Named", definedName, bean.id); assertNull("There should be no initMethod", bean.initMethod); assertNull("There should be no destroyMethod", bean.destroyMethod); - assertEquals("There should be no persistence fields", 0, bean.persistenceFields.length); - assertNull("There should be no transaction definition", bean.transactionDef); + assertEquals("There should be no persistence fields", 0, bean.persistenceFields.size()); + assertTrue("There should be no transaction definition", bean.transactionDefs.isEmpty()); assertEquals("There should be no properties", 0, bean.properties.size()); + assertTrue(bean.isPrototype); } - + @Test public void testBlueprintBundleContext() { Bean bean = new Bean(MyBean4.class); @@ -87,6 +116,44 @@ public class BeanTest { Property bcProp = bean.properties.iterator().next(); assertEquals("bundleContext", bcProp.name); assertEquals("blueprintBundleContext", bcProp.ref); + assertFalse(bean.isPrototype); + + Set<TransactionalDef> expectedTxs = Sets.newHashSet(new TransactionalDef("txWithoutClassAnnotation", "Supports")); + assertEquals(expectedTxs, bean.transactionDefs); + } + + @Test(expected = IllegalArgumentException.class) + public void testMultipleInitMethods() { + new Bean(BadBean1.class); + } + + @Test(expected = IllegalArgumentException.class) + public void testMultipleDestroyMethods() { + new Bean(BadBean2.class); + } + + @Test(expected = UnsupportedOperationException.class) + public void testSpringNestedTransactionNotSupported() { + new Bean(BadBean3.class); } + @Test(expected = UnsupportedOperationException.class) + public void testBadFieldBean1() { + new Context(BadFieldBean1.class).resolve(); + } + + @Test(expected = UnsupportedOperationException.class) + public void testBadFieldBean2() { + new Context(BadFieldBean2.class).resolve(); + } + + @Test(expected = UnsupportedOperationException.class) + public void testBadFieldBean3() { + new Context(BadFieldBean3.class).resolve(); + } + + @Test + public void testFieldBean4() { + new Context(FieldBean4.class).resolve(); + } } Modified: aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java (original) +++ aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/model/ContextTest.java Wed Apr 13 18:41:23 2016 @@ -25,6 +25,7 @@ import org.apache.aries.blueprint.plugin import org.apache.aries.blueprint.plugin.test.MyProduced; import org.apache.aries.blueprint.plugin.test.ServiceB; import org.apache.aries.blueprint.plugin.test.ServiceReferences; +import org.apache.aries.blueprint.plugin.test.ServiceReferencesParent; import org.junit.Assert; import org.junit.Test; import org.osgi.framework.Bundle; @@ -40,29 +41,29 @@ public class ContextTest { Assert.assertEquals(1, context.getBeans().size()); Assert.assertEquals(0, context.getServiceRefs().size()); } - + @Test public void testLists2() { Context context = new Context(ServiceReferences.class); Assert.assertEquals(1, context.getBeans().size()); Assert.assertEquals(3, context.getServiceRefs().size()); } - + @Test public void testMatching() throws NoSuchFieldException, SecurityException { Context context = new Context(ServiceReferences.class); - BeanRef matching = context.getMatching(new BeanRef(ServiceReferences.class.getDeclaredField("serviceB"))); + BeanRef matching = context.getMatching(new BeanRef(ServiceReferencesParent.class.getDeclaredField("serviceB"))); Assert.assertEquals(OsgiServiceRef.class, matching.getClass()); Assert.assertEquals(ServiceB.class, matching.clazz); Assert.assertEquals("serviceB-typeB1", matching.id); } - + private void assertSpecialRef(String expectedId, Class<?> clazz) { Context context = new Context(); BeanRef ref = context.getMatching(new BeanRef(clazz)); assertEquals(expectedId, ref.id); } - + @Test public void testSpecialRefs() { assertSpecialRef("blueprintBundleContext", BundleContext.class); @@ -70,7 +71,7 @@ public class ContextTest { assertSpecialRef("blueprintContainer", BlueprintContainer.class); assertSpecialRef("blueprintConverter", Converter.class); } - + @Test public void testProduced() throws NoSuchFieldException, SecurityException { Context context = new Context(MyFactoryBean.class); @@ -80,5 +81,5 @@ public class ContextTest { Assert.assertEquals("myFactoryBean", matching.factoryBean.id); Assert.assertEquals("create", matching.factoryMethod); } - + } Modified: aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java (original) +++ aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean1.java Wed Apr 13 18:41:23 2016 @@ -18,35 +18,46 @@ */ package org.apache.aries.blueprint.plugin.test; +import javax.annotation.PostConstruct; import javax.inject.Singleton; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.PersistenceUnit; import javax.transaction.Transactional; import javax.transaction.Transactional.TxType; -import org.springframework.beans.factory.annotation.Autowired; - @Singleton -@Transactional(value=TxType.REQUIRED) +@Transactional(value=TxType.REQUIRES_NEW) public class MyBean1 extends ParentBean { - @Autowired - ServiceA bean2; - - @PersistenceContext(unitName="person") - EntityManager em; - - @PersistenceUnit(unitName="person") - EntityManager emf; - + public void overridenInit() { + // By overriding the method and removing the annotation, this method has lost its + // @PostConstruct method because it isn't @Inherited + } + + @PostConstruct public void init() { + } - - public void destroy() { + + @Transactional(TxType.NOT_SUPPORTED) + public void txNotSupported() { + } + + @Transactional(TxType.MANDATORY) + public void txMandatory() { + } + + @Transactional(TxType.NEVER) + public void txNever() { + } + + @Transactional(TxType.REQUIRED) + public void txRequired() { + } + + @Override + public void txOverridenWithoutTransactional() { } - public void saveData() { - + @Transactional(TxType.REQUIRES_NEW) + public void txOverridenWithRequiresNew() { } } Modified: aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java (original) +++ aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean3.java Wed Apr 13 18:41:23 2016 @@ -20,13 +20,12 @@ package org.apache.aries.blueprint.plugi import javax.inject.Inject; import javax.inject.Named; -import javax.inject.Singleton; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -@Singleton +@Named @Transactional(propagation=Propagation.REQUIRES_NEW) public class MyBean3 { @@ -40,11 +39,35 @@ public class MyBean3 { @Inject ServiceB serviceB; - + @Inject @Named("serviceB2Id") ServiceB serviceB2; - + @Inject MyProduced myProduced; + + @Transactional(propagation = Propagation.NOT_SUPPORTED) + public void txNotSupported() { + } + + @Transactional(propagation = Propagation.MANDATORY) + public void txMandatory() { + } + + @Transactional(propagation = Propagation.NEVER) + public void txNever() { + } + + @Transactional(propagation = Propagation.REQUIRED) + public void txRequired() { + } + + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void txRequiresNew() { + } + + @Transactional(propagation = Propagation.SUPPORTS) + public void txSupports() { + } } Modified: aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java (original) +++ aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/MyBean4.java Wed Apr 13 18:41:23 2016 @@ -1,13 +1,20 @@ package org.apache.aries.blueprint.plugin.test; import javax.inject.Inject; -import javax.inject.Singleton; import org.osgi.framework.BundleContext; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; -@Singleton +@Component public class MyBean4 { @Inject BundleContext bundleContext; + + @Transactional(propagation = Propagation.SUPPORTS) + public void txWithoutClassAnnotation() { + + } } Modified: aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ParentBean.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ParentBean.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ParentBean.java (original) +++ aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ParentBean.java Wed Apr 13 18:41:23 2016 @@ -20,14 +20,41 @@ package org.apache.aries.blueprint.plugi import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceUnit; +import javax.transaction.Transactional; + +import org.springframework.beans.factory.annotation.Autowired; public class ParentBean { + @Autowired + ServiceA bean2; + + @PersistenceContext(unitName="person") + EntityManager em; + + @PersistenceUnit(unitName="person") + EntityManager emf; + @PostConstruct - public void init() { + public void overridenInit() { } - + @PreDestroy public void destroy() { } + + @Transactional(Transactional.TxType.REQUIRES_NEW) + public void txOverridenWithoutTransactional() { + } + + @Transactional(Transactional.TxType.SUPPORTS) + public void txSupports() { + } + + @Transactional(Transactional.TxType.NEVER) + public void txOverridenWithRequiresNew() { + } } Modified: aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceAImpl1.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceAImpl1.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceAImpl1.java (original) +++ aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceAImpl1.java Wed Apr 13 18:41:23 2016 @@ -19,9 +19,7 @@ package org.apache.aries.blueprint.plugin.test; import javax.inject.Named; -import javax.inject.Singleton; -@Singleton @Named("my1") public class ServiceAImpl1 implements ServiceA { Modified: aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceReferences.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceReferences.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceReferences.java (original) +++ aries/branches/java6support/blueprint/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/test/ServiceReferences.java Wed Apr 13 18:41:23 2016 @@ -19,17 +19,9 @@ */ package org.apache.aries.blueprint.plugin.test; -import javax.inject.Inject; -import javax.inject.Named; - -import org.ops4j.pax.cdi.api.OsgiService; import org.springframework.stereotype.Component; @Component -public class ServiceReferences { - @Inject @OsgiService(filter="(type=B1)") ServiceB serviceB; - - @Named("serviceB2Id") @Inject @OsgiService(filter="(type=B2)") ServiceB serviceB2; - - @Inject @OsgiService(filter="(type=B3)") ServiceB serviceB3; +public class ServiceReferences extends ServiceReferencesParent { + } Modified: aries/branches/java6support/blueprint/blueprint-parser/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-parser/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-parser/pom.xml (original) +++ aries/branches/java6support/blueprint/blueprint-parser/pom.xml Wed Apr 13 18:41:23 2016 @@ -32,7 +32,7 @@ <artifactId>blueprint-parser</artifactId> <packaging>jar</packaging> <name>Apache Aries Blueprint Parser</name> - <version>1.4.0-SNAPSHOT</version> + <version>1.5.0-SNAPSHOT</version> <description> This bundle contains the blueprint parser in a plain jar. </description> Modified: aries/branches/java6support/blueprint/blueprint-spring-extender/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-spring-extender/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-spring-extender/pom.xml (original) +++ aries/branches/java6support/blueprint/blueprint-spring-extender/pom.xml Wed Apr 13 18:41:23 2016 @@ -59,8 +59,8 @@ org.apache.aries.blueprint.spring.extender.Activator </aries.osgi.activator> <blueprint.api.version>1.0.0</blueprint.api.version> - <blueprint.core.version>1.5.0-SNAPSHOT</blueprint.core.version> - <blueprint.parser.version>1.4.0-SNAPSHOT</blueprint.parser.version> + <blueprint.core.version>1.6.0-SNAPSHOT</blueprint.core.version> + <blueprint.parser.version>1.5.0-SNAPSHOT</blueprint.parser.version> <!-- <lastReleaseVersion>1.0.4</lastReleaseVersion> --> @@ -71,8 +71,8 @@ <id>dev</id> <properties> <blueprint.api.version>1.0.1</blueprint.api.version> - <blueprint.core.version>1.5.0-SNAPSHOT</blueprint.core.version> - <blueprint.parser.version>1.4.0-SNAPSHOT</blueprint.parser.version> + <blueprint.core.version>1.6.0-SNAPSHOT</blueprint.core.version> + <blueprint.parser.version>1.5.0-SNAPSHOT</blueprint.parser.version> </properties> </profile> </profiles> @@ -182,12 +182,6 @@ <version>4.2.2.RELEASE</version> <scope>test</scope> </dependency> - <dependency> - <groupId>org.apache.aries.blueprint</groupId> - <artifactId>org.apache.aries.blueprint.testbundles</artifactId> - <version>1.0.0-SNAPSHOT</version> - <scope>test</scope> - </dependency> </dependencies> <build> Modified: aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiCompendiumNamespaceHandler.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiCompendiumNamespaceHandler.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiCompendiumNamespaceHandler.java (original) +++ aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiCompendiumNamespaceHandler.java Wed Apr 13 18:41:23 2016 @@ -16,6 +16,7 @@ */ package org.apache.aries.blueprint.spring.extender; +import java.net.URI; import java.net.URL; import java.util.Set; @@ -23,13 +24,14 @@ import org.apache.aries.blueprint.Namesp import org.apache.aries.blueprint.ParserContext; import org.osgi.service.blueprint.reflect.ComponentMetadata; import org.osgi.service.blueprint.reflect.Metadata; -import org.osgi.service.blueprint.reflect.ReferenceMetadata; -import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; +import org.w3c.dom.NodeList; public class SpringOsgiCompendiumNamespaceHandler implements NamespaceHandler { + public static final String CM_NAMESPACE = "http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0"; + @Override public URL getSchemaLocation(String namespace) { if (namespace.startsWith("http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium")) { @@ -49,20 +51,26 @@ public class SpringOsgiCompendiumNamespa @Override public Metadata parse(Element element, ParserContext context) { - if ("managed-properties".equals(element.getLocalName())) { - - } - else if ("managed-service-factory".equals(element.getLocalName())) { - - } - else if ("cm-properties".equals(element.getLocalName())) { - - } - throw new UnsupportedOperationException(); + fixDom(element, CM_NAMESPACE); + NamespaceHandler handler = context.getNamespaceHandler(URI.create(CM_NAMESPACE)); + return handler.parse(element, context); } @Override public ComponentMetadata decorate(Node node, ComponentMetadata component, ParserContext context) { return component; } + + private static void fixDom(Node node, String namespace) { + if (node.getNodeType() == Node.ELEMENT_NODE) { + if (!namespace.equals(node.getNamespaceURI())) { + node.getOwnerDocument().renameNode(node, namespace, node.getLocalName()); + } + NodeList children = node.getChildNodes(); + for (int i = 0; i < children.getLength(); i++) { + fixDom(children.item(i), namespace); + } + } + } + } Modified: aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiExtender.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiExtender.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiExtender.java (original) +++ aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiExtender.java Wed Apr 13 18:41:23 2016 @@ -107,6 +107,7 @@ public class SpringOsgiExtender extends } private boolean isCompatible(Bundle bundle) { + // TODO return true; } Modified: aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiExtension.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiExtension.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiExtension.java (original) +++ aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiExtension.java Wed Apr 13 18:41:23 2016 @@ -23,6 +23,7 @@ import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; +import java.net.URI; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -65,7 +66,7 @@ public class SpringOsgiExtension impleme public void start() throws Exception { List<Object> bpPaths = new ArrayList<Object>(); - Set<String> namespaces = new LinkedHashSet<String>(); + Set<URI> namespaces = new LinkedHashSet<URI>(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); for (URL url : paths) { @@ -79,7 +80,11 @@ public class SpringOsgiExtension impleme List<String> locs = new ArrayList<String>(Arrays.asList(schemaLoc.getValue().split("\\s+"))); locs.remove(""); for (int i = 0; i < locs.size() / 2; i++) { - namespaces.add(locs.get(i * 2)); + String ns = locs.get(i * 2); + namespaces.add(URI.create(ns)); + if (ns.startsWith("http://www.springframework.org/schema/osgi-compendium")) { + namespaces.add(URI.create(SpringOsgiCompendiumNamespaceHandler.CM_NAMESPACE)); + } } } } finally { @@ -95,10 +100,6 @@ public class SpringOsgiExtension impleme writer.write("\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"); writer.write("\txmlns:bean=\"http://www.springframework.org/schema/beans\"\n"); writer.write("\txsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd\">\n"); - // TODO: improve that, this is a big hack to force the reference to namespace handlers - for (String namespace : namespaces) { - writer.write("\t<bean class=\"java.lang.String\" scope=\"ns1:dummy\" xmlns:ns1=\"" + namespace + "\"/>\n"); - } for (URL url : paths) { writer.write("\t<bean:import resource=\"" + url.toString() + "\"/>\n"); } @@ -108,7 +109,7 @@ public class SpringOsgiExtension impleme } LOGGER.info("Generated blueprint for bundle {}/{} at {}", bundle.getSymbolicName(), bundle.getVersion(), file); bpPaths.add(file.toURI().toURL()); - container = blueprintExtenderService.createContainer(bundle, bpPaths); + container = blueprintExtenderService.createContainer(bundle, bpPaths, namespaces); } @Override Modified: aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiNamespaceHandler.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiNamespaceHandler.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiNamespaceHandler.java (original) +++ aries/branches/java6support/blueprint/blueprint-spring-extender/src/main/java/org/apache/aries/blueprint/spring/extender/SpringOsgiNamespaceHandler.java Wed Apr 13 18:41:23 2016 @@ -16,6 +16,7 @@ */ package org.apache.aries.blueprint.spring.extender; +import java.net.URI; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -28,17 +29,65 @@ import org.apache.aries.blueprint.mutabl import org.apache.aries.blueprint.mutable.MutableReferenceMetadata; import org.apache.aries.blueprint.mutable.MutableServiceMetadata; import org.apache.aries.blueprint.mutable.MutableValueMetadata; +import org.osgi.service.blueprint.reflect.BeanMetadata; import org.osgi.service.blueprint.reflect.ComponentMetadata; import org.osgi.service.blueprint.reflect.Metadata; import org.osgi.service.blueprint.reflect.NonNullMetadata; import org.osgi.service.blueprint.reflect.ReferenceMetadata; import org.osgi.service.blueprint.reflect.ServiceMetadata; +import org.osgi.service.blueprint.reflect.Target; import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import org.w3c.dom.*; +import org.w3c.dom.CharacterData; +import org.w3c.dom.Comment; +import org.w3c.dom.Element; +import org.w3c.dom.EntityReference; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; public class SpringOsgiNamespaceHandler implements NamespaceHandler { + public static final String BLUEPRINT_NAMESPACE = "http://www.osgi.org/xmlns/blueprint/v1.0.0"; + public static final String SPRING_NAMESPACE = "http://www.springframework.org/schema/beans"; + + public static final String BEAN_ELEMENT = "bean"; + public static final String BEAN_NAME_ELEMENT = "bean-name"; + public static final String FILTER_ATTRIBUTE = "filter"; + public static final String INTERFACE_ATTRIBUTE = "interface"; + public static final String TIMEOUT_ATTRIBUTE = "timeout"; + public static final String DEPENDS_ON_ATTRIBUTE = "depends-on"; + public static final String CARDINALITY_ATTRIBUTE = "cardinality"; + public static final String LISTENER_ELEMENT = "listener"; + public static final String REF_ATTRIBUTE = "ref"; + public static final String BIND_METHOD_ATTRIBUTE = "bind-method"; + public static final String UNBIND_METHOD_ATTRIBUTE = "unbind-method"; + public static final String ID_ATTRIBUTE = "id"; + public static final String CARDINALITY_0_1 = "0..1"; + public static final String VALUE_ATTRIBUTE = "value"; + public static final String VALUE_REF_ATTRIBUTE = "value-ref"; + public static final String KEY_ATTRIBUTE = "key"; + public static final String KEY_REF_ATTRIBUTE = "key-ref"; + public static final String ENTRY_ELEMENT = "entry"; + public static final String SERVICE_PROPERTIES_ELEMENT = "service-properties"; + public static final String REGISTRATION_LISTENER_ELEMENT = "registration-listener"; + public static final String INTERFACES_ELEMENT = "interfaces"; + public static final String VALUE_ELEMENT = "value"; + public static final String AUTO_EXPORT_ATTRIBUTE = "auto-export"; + public static final String AUTO_EXPORT_INTERFACES = "interfaces"; + public static final String AUTO_EXPORT_CLASS_HIERARCHY = "class-hierarchy"; + public static final String AUTO_EXPORT_ALL_CLASSES = "all-classes"; + public static final String RANKING_ATTRIBUTE = "ranking"; + public static final String REFERENCE_ELEMENT = "reference"; + public static final String SERVICE_ELEMENT = "service"; + public static final String BUNDLE_ELEMENT = "bundle"; + public static final String SET_ELEMENT = "set"; + public static final String LIST_ELEMENT = "list"; + public static final int DEFAULT_TIMEOUT = 300000; + public static final String REGISTRATION_METHOD_ATTRIBUTE = "registration-method"; + public static final String UNREGISTRATION_METHOD_ATTRIBUTE = "unregistration-method"; + + private int idCounter; + @Override public URL getSchemaLocation(String namespace) { if (namespace.startsWith("http://www.springframework.org/schema/osgi/spring-osgi")) { @@ -58,149 +107,267 @@ public class SpringOsgiNamespaceHandler @Override public Metadata parse(Element element, ParserContext context) { - if ("reference".equals(element.getLocalName())) { - MutableReferenceMetadata metadata = context.createMetadata(MutableReferenceMetadata.class); - // Parse attributes - // TODO: auto generate id ? - metadata.setId(element.getAttribute("id")); - metadata.setAvailability("0..1".equals(element.getAttribute("cardinality")) - ? ReferenceMetadata.AVAILABILITY_OPTIONAL - : ReferenceMetadata.AVAILABILITY_MANDATORY); - metadata.setTimeout(getLong(element.getAttribute("timeout"), 300000)); - metadata.setInterface(element.getAttribute("interface")); - metadata.setFilter(element.getAttribute("filter")); - String[] dependsOn = StringUtils.tokenizeToStringArray(element.getAttribute("depends-on"), ",; "); - metadata.setDependsOn(dependsOn != null ? Arrays.asList(dependsOn) : null); - metadata.setComponentName(element.getAttribute("bean-name")); - // TODO: @context-class-loader - // Parse child elements - for (Element child : getChildren(element)) { - if (element.getNamespaceURI().equals(child.getNamespaceURI())) { - if ("interfaces".equals(child.getLocalName())) { - List<String> extra = new ArrayList<String>(); - for (Element e : getChildren(child)) { - if ("value".equals(e.getLocalName())) { - extra.add(getTextValue(e)); - } else { - // TODO: support other elements ? - throw new UnsupportedOperationException("Unsupported child: " + element.getLocalName()); - } + if (REFERENCE_ELEMENT.equals(element.getLocalName())) { + return parseReference(element, context); + } + else if (SERVICE_ELEMENT.equals(element.getLocalName())) { + return parseService(element, context); + } + else if (BUNDLE_ELEMENT.equals(element.getLocalName())) { + return parseBundle(element, context); + } + else if (SET_ELEMENT.equals(element.getLocalName())) { + return parseSet(element, context); + } + else if (LIST_ELEMENT.equals(element.getLocalName())) { + return parseList(element, context); + } + else { + throw new UnsupportedOperationException(); + } + } + + private Metadata parseBundle(Element element, ParserContext context) { + throw new UnsupportedOperationException(); + } + + private Metadata parseList(Element element, ParserContext context) { + // TODO: support list + throw new UnsupportedOperationException(); + } + + private Metadata parseSet(Element element, ParserContext context) { + // TODO: support set + throw new UnsupportedOperationException(); + } + + private Metadata parseService(Element element, ParserContext context) { + MutableServiceMetadata metadata = context.createMetadata(MutableServiceMetadata.class); + // Parse attributes + if (element.hasAttribute(ID_ATTRIBUTE)) { + metadata.setId(element.getAttribute(ID_ATTRIBUTE)); + } else { + metadata.setId(generateId(context)); + } + if (nonEmpty(element.getAttribute(REF_ATTRIBUTE)) != null) { + MutableRefMetadata ref = context.createMetadata(MutableRefMetadata.class); + ref.setComponentId(element.getAttribute(REF_ATTRIBUTE)); + metadata.setServiceComponent(ref); + } + metadata.setRanking(nonEmpty(element.getAttribute(RANKING_ATTRIBUTE)) != null + ? Integer.parseInt(element.getAttribute(RANKING_ATTRIBUTE)) + : 0); + String itf = nonEmpty(element.getAttribute(INTERFACE_ATTRIBUTE)); + if (itf != null) { + metadata.addInterface(itf); + } + String[] dependsOn = StringUtils.tokenizeToStringArray(nonEmpty(element.getAttribute(DEPENDS_ON_ATTRIBUTE)), ",; "); + metadata.setDependsOn(dependsOn != null ? Arrays.asList(dependsOn) : null); + String autoExp = nonEmpty(element.getAttribute(AUTO_EXPORT_ATTRIBUTE)); + if (AUTO_EXPORT_INTERFACES.equals(autoExp)) { + metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_INTERFACES); + } else if (AUTO_EXPORT_CLASS_HIERARCHY.equals(autoExp)) { + metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_CLASS_HIERARCHY); + } else if (AUTO_EXPORT_ALL_CLASSES.equals(autoExp)) { + metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_ALL_CLASSES); + } else { + metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_DISABLED); + } + // TODO: @context-class-loader + // Parse child elements + for (Element child : getChildren(element)) { + if (element.getNamespaceURI().equals(child.getNamespaceURI())) { + if (INTERFACES_ELEMENT.equals(child.getLocalName())) { + List<String> itfs = parseInterfaces(child); + for (String intf : itfs) { + metadata.addInterface(intf); + } + } + else if (REGISTRATION_LISTENER_ELEMENT.equals(child.getLocalName())) { + String regMethod = nonEmpty(child.getAttribute(REGISTRATION_METHOD_ATTRIBUTE)); + String unregMethod = nonEmpty(child.getAttribute(UNREGISTRATION_METHOD_ATTRIBUTE)); + String refStr = nonEmpty(child.getAttribute(REF_ATTRIBUTE)); + Target listenerComponent = null; + if (refStr != null) { + MutableRefMetadata ref = context.createMetadata(MutableRefMetadata.class); + ref.setComponentId(refStr); + listenerComponent = ref; + } + for (Element cchild : getChildren(child)) { + if (listenerComponent != null) { + throw new IllegalArgumentException("Only one of @ref attribute or inlined bean definition element is allowed"); } - metadata.setExtraInterfaces(extra); + listenerComponent = parseInlinedTarget(context, metadata, cchild); } - else if ("listener".equals(child.getLocalName())) { - // TODO: listener - + if (listenerComponent == null) { + throw new IllegalArgumentException("Missing @ref attribute or inlined bean definition element"); } + metadata.addRegistrationListener(listenerComponent, regMethod, unregMethod); } - else { - throw new UnsupportedOperationException("Custom namespaces not supported"); - } - } - return metadata; - } - else if ("service".equals(element.getLocalName())) { - MutableServiceMetadata metadata = context.createMetadata(MutableServiceMetadata.class); - // Parse attributes - // TODO: auto generate id ? - metadata.setId(element.getAttribute("id")); - if (element.getAttribute("ref") != null) { - MutableRefMetadata ref = context.createMetadata(MutableRefMetadata.class); - ref.setComponentId(element.getAttribute("ref")); - metadata.setServiceComponent(ref); - } - metadata.setRanking(element.getAttribute("ranking") != null - ? Integer.parseInt(element.getAttribute("ranking")) - : 0); - String itf = element.getAttribute("interface"); - if (itf != null) { - metadata.addInterface(itf); - } - String[] dependsOn = StringUtils.tokenizeToStringArray(element.getAttribute("depends-on"), ",; "); - metadata.setDependsOn(dependsOn != null ? Arrays.asList(dependsOn) : null); - String autoExp = element.getAttribute("auto-export"); - if ("interfaces".equals(autoExp)) { - metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_INTERFACES); - } else if ("class-hierarchy".equals(autoExp)) { - metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_CLASS_HIERARCHY); - } else if ("all-classes".equals(autoExp)) { - metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_ALL_CLASSES); - } else { - metadata.setAutoExport(ServiceMetadata.AUTO_EXPORT_DISABLED); - } - // TODO: @context-class-loader - // Parse child elements - for (Element child : getChildren(element)) { - if (element.getNamespaceURI().equals(child.getNamespaceURI())) { - if ("interfaces".equals(child.getLocalName())) { - for (Element e : getChildren(child)) { - if ("value".equals(e.getLocalName())) { - metadata.addInterface(getTextValue(e)); + else if (SERVICE_PROPERTIES_ELEMENT.equals(child.getLocalName())) { + // TODO: @key-type + for (Element e : getChildren(child)) { + if (ENTRY_ELEMENT.equals(e.getLocalName())) { + NonNullMetadata key; + Metadata val; + boolean hasKeyAttribute = e.hasAttribute(KEY_ATTRIBUTE); + boolean hasKeyRefAttribute = e.hasAttribute(KEY_REF_ATTRIBUTE); + if (hasKeyRefAttribute && !hasKeyAttribute) { + MutableRefMetadata r = context.createMetadata(MutableRefMetadata.class); + r.setComponentId(e.getAttribute(KEY_REF_ATTRIBUTE)); + key = r; + } else if (hasKeyAttribute && !hasKeyRefAttribute) { + MutableValueMetadata v = context.createMetadata(MutableValueMetadata.class); + v.setStringValue(e.getAttribute(KEY_ATTRIBUTE)); + key = v; + } else { + throw new IllegalStateException("Either key or key-ref must be specified"); + } + // TODO: support key + boolean hasValAttribute = e.hasAttribute(VALUE_ATTRIBUTE); + boolean hasValRefAttribute = e.hasAttribute(VALUE_REF_ATTRIBUTE); + if (hasValRefAttribute && !hasValAttribute) { + MutableRefMetadata r = context.createMetadata(MutableRefMetadata.class); + r.setComponentId(e.getAttribute(VALUE_REF_ATTRIBUTE)); + val = r; + } else if (hasValAttribute && !hasValRefAttribute) { + MutableValueMetadata v = context.createMetadata(MutableValueMetadata.class); + v.setStringValue(e.getAttribute(VALUE_ATTRIBUTE)); + val = v; } else { - // TODO: support other elements ? - throw new UnsupportedOperationException("Unsupported child: " + element.getLocalName()); + throw new IllegalStateException("Either val or val-ref must be specified"); } + // TODO: support children elements ? + metadata.addServiceProperty(key, val); } } - else if ("registration-listener".equals(child.getLocalName())) { - // TODO: registration-listener + } + } + else if (BLUEPRINT_NAMESPACE.equals(child.getNamespaceURI()) + && BEAN_ELEMENT.equals(child.getLocalName())) { + if (metadata.getServiceComponent() != null) { + throw new IllegalArgumentException("Only one of @ref attribute and bean element is allowed"); + } + Target bean = context.parseElement(BeanMetadata.class, metadata, child); + metadata.setServiceComponent(bean); + } + else { + if (metadata.getServiceComponent() != null) { + throw new IllegalArgumentException("Only one of @ref attribute or inlined bean definition element is allowed"); + } + NamespaceHandler handler = context.getNamespaceHandler(URI.create(child.getNamespaceURI())); + if (handler == null) { + throw new IllegalStateException("No NamespaceHandler found for " + child.getNamespaceURI()); + } + Metadata md = handler.parse(child, context); + if (!(md instanceof Target)) { + throw new IllegalStateException("NamespaceHandler did not return a Target instance but " + md); + } + metadata.setServiceComponent((Target) md); + } + } + return metadata; + } + private Metadata parseReference(Element element, ParserContext context) { + MutableReferenceMetadata metadata = context.createMetadata(MutableReferenceMetadata.class); + // Parse attributes + if (element.hasAttribute(ID_ATTRIBUTE)) { + metadata.setId(element.getAttribute(ID_ATTRIBUTE)); + } else { + metadata.setId(generateId(context)); + } + metadata.setAvailability(CARDINALITY_0_1.equals(element.getAttribute(CARDINALITY_ATTRIBUTE)) + ? ReferenceMetadata.AVAILABILITY_OPTIONAL + : ReferenceMetadata.AVAILABILITY_MANDATORY); + metadata.setTimeout(getLong(element.getAttribute(TIMEOUT_ATTRIBUTE), DEFAULT_TIMEOUT)); + metadata.setInterface(element.getAttribute(INTERFACE_ATTRIBUTE)); + metadata.setFilter(element.getAttribute(FILTER_ATTRIBUTE)); + String[] dependsOn = StringUtils.tokenizeToStringArray(element.getAttribute(DEPENDS_ON_ATTRIBUTE), ",; "); + metadata.setDependsOn(dependsOn != null ? Arrays.asList(dependsOn) : null); + metadata.setComponentName(element.getAttribute(BEAN_NAME_ELEMENT)); + // TODO: @context-class-loader + // Parse child elements + for (Element child : getChildren(element)) { + if (element.getNamespaceURI().equals(child.getNamespaceURI())) { + if (INTERFACES_ELEMENT.equals(child.getLocalName())) { + List<String> itfs = parseInterfaces(child); + metadata.setExtraInterfaces(itfs); + } + else if (LISTENER_ELEMENT.equals(child.getLocalName())) { + String bindMethod = nonEmpty(child.getAttribute(BIND_METHOD_ATTRIBUTE)); + String unbindMethod = nonEmpty(child.getAttribute(UNBIND_METHOD_ATTRIBUTE)); + String refStr = nonEmpty(child.getAttribute(REF_ATTRIBUTE)); + Target listenerComponent = null; + if (refStr != null) { + MutableRefMetadata ref = context.createMetadata(MutableRefMetadata.class); + ref.setComponentId(refStr); + listenerComponent = ref; } - else if ("service-properties".equals(child.getLocalName())) { - // TODO: @key-type - for (Element e : getChildren(child)) { - if ("entry".equals(e.getLocalName())) { - NonNullMetadata key; - Metadata val; - boolean hasKeyAttribute = e.hasAttribute("key"); - boolean hasKeyRefAttribute = e.hasAttribute("key-ref"); - if (hasKeyRefAttribute && !hasKeyAttribute) { - MutableRefMetadata r = context.createMetadata(MutableRefMetadata.class); - r.setComponentId(e.getAttribute("key-ref")); - key = r; - } else if (hasKeyAttribute && !hasKeyRefAttribute) { - MutableValueMetadata v = context.createMetadata(MutableValueMetadata.class); - v.setStringValue(e.getAttribute("key")); - key = v; - } else { - throw new IllegalStateException("Either key or key-ref must be specified"); - } - // TODO: support children elements ? - boolean hasValAttribute = e.hasAttribute("value"); - boolean hasValRefAttribute = e.hasAttribute("value-ref"); - if (hasValRefAttribute && !hasValAttribute) { - MutableRefMetadata r = context.createMetadata(MutableRefMetadata.class); - r.setComponentId(e.getAttribute("value-ref")); - val = r; - } else if (hasValAttribute && !hasValRefAttribute) { - MutableValueMetadata v = context.createMetadata(MutableValueMetadata.class); - v.setStringValue(e.getAttribute("value")); - val = v; - } else { - throw new IllegalStateException("Either val or val-ref must be specified"); - } - // TODO: support children elements ? - metadata.addServiceProperty(key, val); - } + for (Element cchild : getChildren(child)) { + if (listenerComponent != null) { + throw new IllegalArgumentException("Only one of @ref attribute or inlined bean definition element is allowed"); } + listenerComponent = parseInlinedTarget(context, metadata, cchild); } + if (listenerComponent == null) { + throw new IllegalArgumentException("Missing @ref attribute or inlined bean definition element"); + } + metadata.addServiceListener(listenerComponent, bindMethod, unbindMethod); } - else { - throw new UnsupportedOperationException("Custom namespaces not supported"); - } } - return metadata; + else { + throw new UnsupportedOperationException("Custom namespaces not supported"); + } } - else if ("bundle".equals(element.getLocalName())) { + return metadata; + } + private Target parseInlinedTarget(ParserContext context, ComponentMetadata metadata, Element element) { + Target listenerComponent; + if (BLUEPRINT_NAMESPACE.equals(element.getNamespaceURI()) + && BEAN_ELEMENT.equals(element.getLocalName())) { + listenerComponent = context.parseElement(BeanMetadata.class, metadata, element); } - else if ("set".equals(element.getLocalName())) { - + else { + NamespaceHandler handler = context.getNamespaceHandler(URI.create(element.getNamespaceURI())); + if (handler == null) { + throw new IllegalStateException("No NamespaceHandler found for " + element.getNamespaceURI()); + } + Metadata md = handler.parse(element, context); + if (!(md instanceof Target)) { + throw new IllegalStateException("NamespaceHandler did not return a Target instance but " + md); + } + listenerComponent = (Target) md; } - else if ("list".equals(element.getLocalName())) { + return listenerComponent; + } + private List<String> parseInterfaces(Element element) { + List<String> extra = new ArrayList<String>(); + for (Element e : getChildren(element)) { + if (VALUE_ELEMENT.equals(e.getLocalName())) { + extra.add(getTextValue(e)); + } else { + // The schema support all kind of children for a list type + // The type for the spring property is converted to a Class[] array + // TODO: support other elements ? + throw new UnsupportedOperationException("Unsupported child: " + element.getLocalName()); + } } - throw new UnsupportedOperationException(); + return extra; + } + + private String nonEmpty(String ref) { + return ref != null && ref.isEmpty() ? null : ref; + } + + private String generateId(ParserContext context) { + String id; + do { + id = ".spring-osgi-" + ++idCounter; + } while (context.getComponentDefinitionRegistry().containsComponentDefinition(id)); + return id; } @Override @@ -230,7 +397,7 @@ public class SpringOsgiNamespaceHandler Assert.notNull(valueEle, "Element must not be null"); StringBuilder sb = new StringBuilder(); NodeList nl = valueEle.getChildNodes(); - for(int i = 0; i < nl.getLength(); ++i) { + for(int i = 0, l = nl.getLength(); i < l; ++i) { Node item = nl.item(i); if(item instanceof CharacterData && !(item instanceof Comment) || item instanceof EntityReference) { sb.append(item.getNodeValue()); Modified: aries/branches/java6support/blueprint/blueprint-spring/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-spring/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-spring/pom.xml (original) +++ aries/branches/java6support/blueprint/blueprint-spring/pom.xml Wed Apr 13 18:41:23 2016 @@ -59,8 +59,8 @@ org.apache.aries.blueprint.spring.Activator </aries.osgi.activator> <blueprint.api.version>1.0.0</blueprint.api.version> - <blueprint.core.version>1.5.0-SNAPSHOT</blueprint.core.version> - <blueprint.parser.version>1.4.0-SNAPSHOT</blueprint.parser.version> + <blueprint.core.version>1.6.0-SNAPSHOT</blueprint.core.version> + <blueprint.parser.version>1.5.0-SNAPSHOT</blueprint.parser.version> <!-- <lastReleaseVersion>1.0.4</lastReleaseVersion> --> @@ -71,8 +71,8 @@ <id>dev</id> <properties> <blueprint.api.version>1.0.1</blueprint.api.version> - <blueprint.core.version>1.5.0-SNAPSHOT</blueprint.core.version> - <blueprint.parser.version>1.4.0-SNAPSHOT</blueprint.parser.version> + <blueprint.core.version>1.6.0-SNAPSHOT</blueprint.core.version> + <blueprint.parser.version>1.5.0-SNAPSHOT</blueprint.parser.version> </properties> </profile> </profiles> @@ -103,7 +103,6 @@ <groupId>org.osgi</groupId> <artifactId>org.osgi.compendium</artifactId> <scope>provided</scope> - <version>4.3.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> @@ -143,7 +142,6 @@ <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> - <version>4.7</version> <scope>test</scope> </dependency> <dependency> @@ -182,12 +180,6 @@ <version>4.2.2.RELEASE</version> <scope>test</scope> </dependency> - <dependency> - <groupId>org.apache.aries.blueprint</groupId> - <artifactId>org.apache.aries.blueprint.testbundles</artifactId> - <version>1.0.0-SNAPSHOT</version> - <scope>test</scope> - </dependency> </dependencies> <build> Modified: aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BeansNamespaceHandler.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BeansNamespaceHandler.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BeansNamespaceHandler.java (original) +++ aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BeansNamespaceHandler.java Wed Apr 13 18:41:23 2016 @@ -52,8 +52,8 @@ public class BeansNamespaceHandler imple @Override public BeanDefinition parse(Element ele, ParserContext parserContext) { - getReader(parserContext).parseElement(ele); - return null; + BeanDefinitionHolder bdh = getReader(parserContext).parseElement(ele); + return bdh != null ? bdh.getBeanDefinition() : null; } @Override @@ -129,11 +129,12 @@ public class BeansNamespaceHandler imple } - public void parseElement(Element ele) { + public BeanDefinitionHolder parseElement(Element ele) { BeanDefinitionParserDelegate parent = this.delegate; this.delegate = createDelegate(getReaderContext(), ele.getOwnerDocument().getDocumentElement(), parent); - parseDefaultElement(ele, this.delegate); + BeanDefinitionHolder bdh = parseDefaultElement(ele, this.delegate); this.delegate = parent; + return bdh; } /** @@ -199,7 +200,8 @@ public class BeansNamespaceHandler imple } } - private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { + private BeanDefinitionHolder parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { + BeanDefinitionHolder bdh = null; if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) { importBeanDefinitionResource(ele); } @@ -207,12 +209,13 @@ public class BeansNamespaceHandler imple processAliasRegistration(ele); } else if (delegate.nodeNameEquals(ele, BEAN_ELEMENT)) { - processBeanDefinition(ele, delegate); + bdh = processBeanDefinition(ele, delegate); } else if (delegate.nodeNameEquals(ele, NESTED_BEANS_ELEMENT)) { // recurse doRegisterBeanDefinitions(ele); } + return bdh; } /** @@ -315,7 +318,7 @@ public class BeansNamespaceHandler imple * Process the given bean element, parsing the bean definition * and registering it with the registry. */ - protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) { + protected BeanDefinitionHolder processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate) { BeanDefinitionHolder bdHolder = delegate.parseBeanDefinitionElement(ele); if (bdHolder != null) { bdHolder = delegate.decorateBeanDefinitionIfRequired(ele, bdHolder); @@ -330,6 +333,7 @@ public class BeansNamespaceHandler imple // Send registration event. getReaderContext().fireComponentRegistered(new BeanComponentDefinition(bdHolder)); } + return bdHolder; } } Modified: aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java (original) +++ aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java Wed Apr 13 18:41:23 2016 @@ -102,7 +102,22 @@ public class BlueprintNamespaceHandler i org.springframework.beans.factory.xml.ParserContext springContext = getOrCreateParserContext(parserContext); // Parse spring bean - springHandler.parse(element, springContext); + BeanDefinition bd = springHandler.parse(element, springContext); + for (String name : springContext.getRegistry().getBeanDefinitionNames()) { + if (springContext.getRegistry().getBeanDefinition(name) == bd) { + ComponentDefinitionRegistry registry = parserContext.getComponentDefinitionRegistry(); + if (registry.containsComponentDefinition(name)) { + // Hack: we can't really make the difference between a top level bean + // and an inlined bean when using custom (eventually nested) namespaces. + // To work around the problem, the BlueprintBeanFactory will always register + // a BeanMetadata for each bean, but here, we unregister it and return it instead + // so that the caller is responsible for registering the metadata. + ComponentMetadata metadata = registry.getComponentDefinition(name); + registry.removeComponentDefinition(name); + return metadata; + } + } + } return null; } catch (Exception e) { throw new RuntimeException(e); Modified: aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/SpringBeanProcessor.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/SpringBeanProcessor.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/SpringBeanProcessor.java (original) +++ aries/branches/java6support/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/SpringBeanProcessor.java Wed Apr 13 18:41:23 2016 @@ -58,7 +58,7 @@ public class SpringBeanProcessor impleme @Override public Object beforeInit(Object o, String s, BeanCreator beanCreator, BeanMetadata beanMetadata) { - if (beanMetadata instanceof SpringMetadata) { + if (beanMetadata instanceof SpringMetadata || beanMetadata == null) { return o; } if (o instanceof Aware) { Modified: aries/branches/java6support/blueprint/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/blueprint/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/blueprint/pom.xml (original) +++ aries/branches/java6support/blueprint/pom.xml Wed Apr 13 18:41:23 2016 @@ -50,11 +50,11 @@ <module>blueprint-web</module> <module>blueprint-web-osgi</module> <module>blueprint-jexl-evaluator</module> + <module>blueprint-repository</module> <module>blueprint-sample</module> <module>blueprint-annotation-api</module> <module>blueprint-annotation-impl</module> <module>blueprint-authz</module> - <module>blueprint-testbundles</module> <module>blueprint-spring</module> <module>blueprint-spring-extender</module> <module>blueprint-sample-annotation</module> @@ -62,6 +62,8 @@ <module>blueprint-sample-war</module> <module>blueprint-testbundlea</module> <module>blueprint-testbundleb</module> + <module>blueprint-testbundlee</module> + <module>blueprint-testbundles</module> <module>blueprint-testquiescebundle</module> <module>blueprint-itests</module> </modules> Modified: aries/branches/java6support/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/ServiceEventData.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/ServiceEventData.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/ServiceEventData.java (original) +++ aries/branches/java6support/jmx/jmx-core/src/main/java/org/apache/aries/jmx/codec/ServiceEventData.java Wed Apr 13 18:41:23 2016 @@ -83,14 +83,17 @@ public class ServiceEventData { } public ServiceEventData(ServiceEvent serviceEvent) { + @SuppressWarnings("rawtypes") ServiceReference serviceReference = serviceEvent.getServiceReference(); this.serviceId = (Long) serviceReference.getProperty(Constants.SERVICE_ID); this.serviceInterfaces = (String[]) serviceReference.getProperty(Constants.OBJECTCLASS); - Bundle bundle = serviceReference.getBundle(); - this.bundleId = bundle.getBundleId(); - this.bundleLocation = bundle.getLocation(); - this.bundleSymbolicName = bundle.getSymbolicName(); this.eventType = serviceEvent.getType(); + Bundle bundle = serviceReference.getBundle(); + if (bundle != null) { + this.bundleId = bundle.getBundleId(); + this.bundleLocation = bundle.getLocation(); + this.bundleSymbolicName = bundle.getSymbolicName(); + } } /** Modified: aries/branches/java6support/jpa/examples/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/examples/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/examples/pom.xml (original) +++ aries/branches/java6support/jpa/examples/pom.xml Wed Apr 13 18:41:23 2016 @@ -5,8 +5,7 @@ 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. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> @@ -18,7 +17,7 @@ <parent> <groupId>org.apache.aries.jpa</groupId> <artifactId>org.apache.aries.jpa.parent</artifactId> - <version>2.3.0-SNAPSHOT</version> + <version>2.4.0-SNAPSHOT</version> <relativePath>../jpa-parent</relativePath> </parent> @@ -76,14 +75,14 @@ <dependency> <groupId>org.apache.aries.jpa</groupId> <artifactId>org.apache.aries.jpa.api</artifactId> - <version>${aries.jpa.version}</version> + <version>${project.version}</version> </dependency> <!-- Test dependencies --> <dependency> <groupId>org.apache.aries.jpa</groupId> <artifactId>org.apache.aries.jpa.support</artifactId> - <version>${aries.jpa.version}</version> + <version>${project.version}</version> <scope>test</scope> </dependency> <dependency> Modified: aries/branches/java6support/jpa/examples/tasklist-blueprint/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/examples/tasklist-blueprint/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/examples/tasklist-blueprint/pom.xml (original) +++ aries/branches/java6support/jpa/examples/tasklist-blueprint/pom.xml Wed Apr 13 18:41:23 2016 @@ -22,7 +22,7 @@ <parent> <groupId>org.apache.aries.jpa.example</groupId> <artifactId>org.apache.aries.jpa.example.parent</artifactId> - <version>2.3.0-SNAPSHOT</version> + <version>2.4.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>org.apache.aries.jpa.example.tasklist.blueprint</artifactId> Modified: aries/branches/java6support/jpa/examples/tasklist-blueprint/src/test/java/org/apache/aries/jpa/example/tasklist/blueprint/impl/TaskServiceImplTest.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/examples/tasklist-blueprint/src/test/java/org/apache/aries/jpa/example/tasklist/blueprint/impl/TaskServiceImplTest.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/examples/tasklist-blueprint/src/test/java/org/apache/aries/jpa/example/tasklist/blueprint/impl/TaskServiceImplTest.java (original) +++ aries/branches/java6support/jpa/examples/tasklist-blueprint/src/test/java/org/apache/aries/jpa/example/tasklist/blueprint/impl/TaskServiceImplTest.java Wed Apr 13 18:41:23 2016 @@ -34,6 +34,8 @@ import org.junit.Test; public class TaskServiceImplTest { @Test public void testPersistence() { + // Make sure derby.log is in target + System.setProperty("derby.stream.error.file", "target/derby.log"); TaskServiceImpl taskServiceImpl = new TaskServiceImpl(); EntityManagerFactory emf = createTestEMF(); final EntityManager em = emf.createEntityManager(); Modified: aries/branches/java6support/jpa/examples/tasklist-ds/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/examples/tasklist-ds/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/examples/tasklist-ds/pom.xml (original) +++ aries/branches/java6support/jpa/examples/tasklist-ds/pom.xml Wed Apr 13 18:41:23 2016 @@ -5,14 +5,13 @@ 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. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.aries.jpa.example</groupId> <artifactId>org.apache.aries.jpa.example.parent</artifactId> - <version>2.3.0-SNAPSHOT</version> + <version>2.4.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> <artifactId>org.apache.aries.jpa.example.tasklist.ds</artifactId> Modified: aries/branches/java6support/jpa/examples/tasklist-model/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/examples/tasklist-model/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/examples/tasklist-model/pom.xml (original) +++ aries/branches/java6support/jpa/examples/tasklist-model/pom.xml Wed Apr 13 18:41:23 2016 @@ -5,15 +5,14 @@ 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. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.aries.jpa.example</groupId> <artifactId>org.apache.aries.jpa.example.parent</artifactId> - <version>2.3.0-SNAPSHOT</version> + <version>2.4.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> Modified: aries/branches/java6support/jpa/itests/jpa-container-blueprint-testbundle/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/itests/jpa-container-blueprint-testbundle/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/itests/jpa-container-blueprint-testbundle/pom.xml (original) +++ aries/branches/java6support/jpa/itests/jpa-container-blueprint-testbundle/pom.xml Wed Apr 13 18:41:23 2016 @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.aries.jpa.itest</groupId> <artifactId>org.apache.aries.jpa.itest.parent</artifactId> - <version>2.3.0-SNAPSHOT</version> + <version>2.4.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> Modified: aries/branches/java6support/jpa/itests/jpa-container-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/itests/jpa-container-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/itests/jpa-container-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml (original) +++ aries/branches/java6support/jpa/itests/jpa-container-blueprint-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml Wed Apr 13 18:41:23 2016 @@ -64,6 +64,13 @@ <bean id="carServiceEmJtaAnn" class="org.apache.aries.jpa.container.itest.bundle.blueprint.impl.CarServiceEmJtaAnn"> </bean> + + <service interface="org.apache.aries.jpa.container.itest.entities.CarService"> + <service-properties> + <entry key="type" value="emJtaAnnInlined" /> + </service-properties> + <bean class="org.apache.aries.jpa.container.itest.bundle.blueprint.impl.CarServiceEmJtaAnn"/> + </service> <service ref="carServiceEmSupplier" interface="org.apache.aries.jpa.container.itest.entities.CarService"> Modified: aries/branches/java6support/jpa/itests/jpa-container-itest-karaf/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/itests/jpa-container-itest-karaf/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/itests/jpa-container-itest-karaf/pom.xml (original) +++ aries/branches/java6support/jpa/itests/jpa-container-itest-karaf/pom.xml Wed Apr 13 18:41:23 2016 @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.aries.jpa.itest</groupId> <artifactId>org.apache.aries.jpa.itest.parent</artifactId> - <version>2.3.0-SNAPSHOT</version> + <version>2.4.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> Modified: aries/branches/java6support/jpa/itests/jpa-container-itest/pom.xml URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/itests/jpa-container-itest/pom.xml?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/itests/jpa-container-itest/pom.xml (original) +++ aries/branches/java6support/jpa/itests/jpa-container-itest/pom.xml Wed Apr 13 18:41:23 2016 @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.aries.jpa.itest</groupId> <artifactId>org.apache.aries.jpa.itest.parent</artifactId> - <version>2.3.0-SNAPSHOT</version> + <version>2.4.0-SNAPSHOT</version> <relativePath>..</relativePath> </parent> Modified: aries/branches/java6support/jpa/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java URL: http://svn.apache.org/viewvc/aries/branches/java6support/jpa/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java?rev=1738981&r1=1738980&r2=1738981&view=diff ============================================================================== --- aries/branches/java6support/jpa/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java (original) +++ aries/branches/java6support/jpa/itests/jpa-container-itest/src/test/java/org/apache/aries/jpa/blueprint/aries/itest/BlueprintTest.java Wed Apr 13 18:41:23 2016 @@ -102,6 +102,11 @@ public class BlueprintTest extends Abstr } @Test + public void testInlined() throws Exception { + carRealTransactionalLifecycle(getCarService("emJtaAnnInlined")); + } + + @Test public void testCoordinationLifecycle() throws InterruptedException, ExecutionException { CarService carService = getCarService("em"); assertNoCars(carService);
