This is an automated email from the ASF dual-hosted git repository. alien11689 pushed a commit to branch ARIES-2172-support-jakarta-transactional-and-persistence-in-blueprint-maven-plugin in repository https://gitbox.apache.org/repos/asf/aries.git
commit 2baba6c5db997d8729e4a5ea86d9695b0e76616d Author: Dominik Przybysz <[email protected]> AuthorDate: Wed Mar 12 22:31:52 2025 +0100 ARIES-2172: Support jakarta transactional and persistence in blueprint-maven-plugin --- .github/dependabot.yaml | 3 + .../blueprint-maven-plugin/pom.xml | 13 ++++ .../AbstractPersistenceContextHandler.java} | 14 ++-- .../AbstractPersistenceUnitHandler.java} | 20 ++--- .../AbstractTransactionFactory.java | 15 ++-- .../handlers/{javax => common}/Namespaces.java | 18 ++--- .../JakartaTransactionFactory.java} | 21 ++--- .../jakarta/PersistenceContextHandler.java | 37 +++++++++ .../handlers/jakarta/PersistenceUnitHandler.java | 37 +++++++++ .../handlers/javax/CdiTransactionFactory.java | 17 +--- .../handlers/javax/JavaxTransactionFactory.java | 15 +--- .../handlers/javax/PersistenceContextHandler.java | 39 +--------- .../handlers/javax/PersistenceUnitHandler.java | 43 +---------- .../aries/blueprint/plugin/model/Argument.java | 4 - .../aries/blueprint/plugin/model/BeanRefStore.java | 1 - .../aries/blueprint/plugin/model/Introspector.java | 2 - .../aries/blueprint/plugin/model/Property.java | 4 - ...ries.blueprint.plugin.spi.BeanAnnotationHandler | 1 + ...ies.blueprint.plugin.spi.FieldAnnotationHandler | 2 + ...es.blueprint.plugin.spi.MethodAnnotationHandler | 1 + .../blueprint/plugin/BlueprintFileWriterTest.java | 90 +++++++++++++++------- .../plugin/jakarta/JakartaParentBean.java | 55 +++++++++++++ .../plugin/jakarta/JakartaTransactionalBean.java | 63 +++++++++++++++ 23 files changed, 322 insertions(+), 193 deletions(-) diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml index 96cc1c328..4dc64073f 100644 --- a/.github/dependabot.yaml +++ b/.github/dependabot.yaml @@ -37,6 +37,9 @@ updates: - dependency-name: "jakarta.enterprise:jakarta.enterprise.cdi-api" versions: - ">=4.0.0" # does not support java 8 + - dependency-name: "jakarta.persistence:jakarta.persistence-api" + versions: + - ">3.0.0" # does not support java 8 - dependency-name: "javax.enterprise:cdi-api" versions: - ">2.0.SP1" # 2.0-PFD2 is considered as newer, but is older diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/pom.xml b/blueprint-maven-plugin/blueprint-maven-plugin/pom.xml index b379d498e..6a28a328f 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/pom.xml +++ b/blueprint-maven-plugin/blueprint-maven-plugin/pom.xml @@ -45,6 +45,8 @@ <jakarta.annotation-api.version>2.1.1</jakarta.annotation-api.version> <jakarta.enterprise.cdi-api.version>3.0.1</jakarta.enterprise.cdi-api.version> <jakarta.inject.version>2.0.1.MR</jakarta.inject.version> + <jakarta.persistence-api.version>3.0.0</jakarta.persistence-api.version> + <jakarta.transaction-api.version>2.0.1</jakarta.transaction-api.version> <javax.annotation-api.version>1.3.2</javax.annotation-api.version> <javax.enterprise.cdi-api.version>2.0.SP1</javax.enterprise.cdi-api.version> <javax.inject.version>1</javax.inject.version> @@ -152,6 +154,11 @@ <artifactId>javax.transaction-api</artifactId> <version>${javax.transaction-api.version}</version> </dependency> + <dependency> + <groupId>jakarta.transaction</groupId> + <artifactId>jakarta.transaction-api</artifactId> + <version>${jakarta.transaction-api.version}</version> + </dependency> <dependency> <groupId>javax.enterprise</groupId> <artifactId>cdi-api</artifactId> @@ -167,6 +174,12 @@ <artifactId>persistence-api</artifactId> <version>${persistence-api.version}</version> </dependency> + <dependency> + <groupId>jakarta.persistence</groupId> + <artifactId>jakarta.persistence-api</artifactId> + <version>${jakarta.persistence-api.version}</version> + </dependency> + <dependency> <groupId>org.osgi</groupId> <artifactId>osgi.cmpn</artifactId> diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceContextHandler.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/AbstractPersistenceContextHandler.java similarity index 83% copy from blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceContextHandler.java copy to blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/AbstractPersistenceContextHandler.java index 76f5ad731..e169b40cb 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceContextHandler.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/AbstractPersistenceContextHandler.java @@ -16,25 +16,22 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.javax; +package org.apache.aries.blueprint.plugin.handlers.common; import org.apache.aries.blueprint.plugin.spi.BeanEnricher; import org.apache.aries.blueprint.plugin.spi.ContextEnricher; import org.apache.aries.blueprint.plugin.spi.FieldAnnotationHandler; import org.apache.aries.blueprint.plugin.spi.XmlWriter; -import javax.persistence.PersistenceContext; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; +import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.List; -public class PersistenceContextHandler implements FieldAnnotationHandler<PersistenceContext> { +public abstract class AbstractPersistenceContextHandler<T extends Annotation> implements FieldAnnotationHandler<T> { - @Override - public Class<PersistenceContext> getAnnotation() { - return PersistenceContext.class; - } + protected abstract String getUnitName(Field field); @Override public void handleFieldAnnotation(Class<?> clazz, List<Field> fields, ContextEnricher contextEnricher, BeanEnricher beanEnricher) { @@ -42,13 +39,12 @@ public class PersistenceContextHandler implements FieldAnnotationHandler<Persist if (nsJpa1 != null) { for (final Field field : fields) { final String name = field.getName(); - final PersistenceContext persistenceContext = field.getAnnotation(PersistenceContext.class); beanEnricher.addBeanContentWriter("javax.persistence.field.context/" + name, new XmlWriter() { @Override public void write(XMLStreamWriter writer) throws XMLStreamException { writer.writeEmptyElement("context"); writer.writeDefaultNamespace(nsJpa1); - writer.writeAttribute("unitname", persistenceContext.unitName()); + writer.writeAttribute("unitname", getUnitName(field)); writer.writeAttribute("property", name); } }); diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceUnitHandler.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/AbstractPersistenceUnitHandler.java similarity index 77% copy from blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceUnitHandler.java copy to blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/AbstractPersistenceUnitHandler.java index d6907aea2..2b25c5a9b 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceUnitHandler.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/AbstractPersistenceUnitHandler.java @@ -16,29 +16,26 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.javax; +package org.apache.aries.blueprint.plugin.handlers.common; import org.apache.aries.blueprint.plugin.spi.BeanEnricher; import org.apache.aries.blueprint.plugin.spi.ContextEnricher; import org.apache.aries.blueprint.plugin.spi.FieldAnnotationHandler; import org.apache.aries.blueprint.plugin.spi.XmlWriter; -import javax.persistence.PersistenceUnit; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; +import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.List; -import static org.apache.aries.blueprint.plugin.handlers.javax.Namespaces.PATTERN_NS_JPA1; -import static org.apache.aries.blueprint.plugin.handlers.javax.Namespaces.PATTERN_NS_JPA2; -import static org.apache.aries.blueprint.plugin.handlers.javax.Namespaces.getNamespaceByPattern; +import static org.apache.aries.blueprint.plugin.handlers.common.Namespaces.PATTERN_NS_JPA1; +import static org.apache.aries.blueprint.plugin.handlers.common.Namespaces.PATTERN_NS_JPA2; +import static org.apache.aries.blueprint.plugin.handlers.common.Namespaces.getNamespaceByPattern; -public class PersistenceUnitHandler implements FieldAnnotationHandler<PersistenceUnit> { +public abstract class AbstractPersistenceUnitHandler<T extends Annotation> implements FieldAnnotationHandler<T> { - @Override - public Class<PersistenceUnit> getAnnotation() { - return PersistenceUnit.class; - } + protected abstract String getUnitName(Field field); @Override public void handleFieldAnnotation(Class<?> clazz, List<Field> fields, ContextEnricher contextEnricher, BeanEnricher beanEnricher) { @@ -46,13 +43,12 @@ public class PersistenceUnitHandler implements FieldAnnotationHandler<Persistenc if (nsJpa1 != null) { for (final Field field : fields) { final String name = field.getName(); - final PersistenceUnit persistenceUnit = field.getAnnotation(PersistenceUnit.class); beanEnricher.addBeanContentWriter("javax.persistence.field.unit/" + name, new XmlWriter() { @Override public void write(XMLStreamWriter writer) throws XMLStreamException { writer.writeEmptyElement("unit"); writer.writeDefaultNamespace(nsJpa1); - writer.writeAttribute("unitname", persistenceUnit.unitName()); + writer.writeAttribute("unitname", getUnitName(field)); writer.writeAttribute("property", name); } }); diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/AbstractTransactionFactory.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/AbstractTransactionFactory.java similarity index 88% rename from blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/AbstractTransactionFactory.java rename to blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/AbstractTransactionFactory.java index 009120a09..bbe2c705a 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/AbstractTransactionFactory.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/AbstractTransactionFactory.java @@ -16,11 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.javax; +package org.apache.aries.blueprint.plugin.handlers.common; -import org.apache.aries.blueprint.plugin.spi.*; +import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler; +import org.apache.aries.blueprint.plugin.spi.BeanEnricher; +import org.apache.aries.blueprint.plugin.spi.BlueprintConfiguration; +import org.apache.aries.blueprint.plugin.spi.ContextEnricher; +import org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler; +import org.apache.aries.blueprint.plugin.spi.XmlWriter; -import javax.transaction.Transactional; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import java.lang.annotation.Annotation; @@ -28,10 +32,11 @@ import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; import java.util.List; -abstract class AbstractTransactionFactory<T extends Annotation> implements BeanAnnotationHandler<T>, MethodAnnotationHandler<T> { - abstract String getTransactionTypeName(AnnotatedElement annotatedElement); +public abstract class AbstractTransactionFactory<T extends Annotation> implements BeanAnnotationHandler<T>, MethodAnnotationHandler<T> { + protected abstract String getTransactionTypeName(AnnotatedElement annotatedElement); private static final String ENABLE_ANNOTATION = "transaction.enableAnnotation"; + @Override public void handleMethodAnnotation(Class<?> clazz, List<Method> methods, ContextEnricher contextEnricher, BeanEnricher beanEnricher) { final String nsTx1 = Namespaces.getNamespaceByPattern(contextEnricher.getBlueprintConfiguration().getNamespaces(), Namespaces.PATTERN_NS_TX1); diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/Namespaces.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/Namespaces.java similarity index 62% rename from blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/Namespaces.java rename to blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/Namespaces.java index 7dafb70c3..4dd5d75d2 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/Namespaces.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/common/Namespaces.java @@ -16,18 +16,18 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.javax; +package org.apache.aries.blueprint.plugin.handlers.common; import java.util.Set; -class Namespaces { - static final String PATTERN_NS_JPA1 = "http\\:\\/\\/aries\\.apache\\.org\\/xmlns\\/jpa\\/v1\\.(.)\\.(.)"; - static final String PATTERN_NS_JPA2 = "http\\:\\/\\/aries\\.apache\\.org\\/xmlns\\/jpa\\/v2\\.(.)\\.(.)"; - static final String PATTERN_NS_TX1 = "http\\:\\/\\/aries\\.apache\\.org\\/xmlns\\/transactions\\/v1\\.(.)\\.(.)"; - static final String PATTERN_NS_TX2 = "http\\:\\/\\/aries\\.apache\\.org\\/xmlns\\/transactions\\/v2\\.(.)\\.(.)"; +public class Namespaces { + public static final String PATTERN_NS_JPA1 = "http\\:\\/\\/aries\\.apache\\.org\\/xmlns\\/jpa\\/v1\\.(.)\\.(.)"; + public static final String PATTERN_NS_JPA2 = "http\\:\\/\\/aries\\.apache\\.org\\/xmlns\\/jpa\\/v2\\.(.)\\.(.)"; + public static final String PATTERN_NS_TX1 = "http\\:\\/\\/aries\\.apache\\.org\\/xmlns\\/transactions\\/v1\\.(.)\\.(.)"; + public static final String PATTERN_NS_TX2 = "http\\:\\/\\/aries\\.apache\\.org\\/xmlns\\/transactions\\/v2\\.(.)\\.(.)"; private static final String NS_TX_1_2_0 = "http://aries.apache.org/xmlns/transactions/v1.2.0"; - static String getNamespaceByPattern(Set<String> namespaces, String pattern) { + public static String getNamespaceByPattern(Set<String> namespaces, String pattern) { for (String namespace : namespaces) { if (namespace.matches(pattern)) { return namespace; @@ -35,8 +35,8 @@ class Namespaces { } return null; } - - static boolean isTX12(String namespace) { + + public static boolean isTX12(String namespace) { return NS_TX_1_2_0.equals(namespace); } } diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/JavaxTransactionFactory.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/jakarta/JakartaTransactionFactory.java similarity index 60% copy from blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/JavaxTransactionFactory.java copy to blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/jakarta/JakartaTransactionFactory.java index c338ec2e3..afb75cce4 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/JavaxTransactionFactory.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/jakarta/JakartaTransactionFactory.java @@ -16,28 +16,17 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.aries.blueprint.plugin.handlers.javax; +package org.apache.aries.blueprint.plugin.handlers.jakarta; import com.google.common.base.CaseFormat; - -import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler; -import org.apache.aries.blueprint.plugin.spi.BeanEnricher; -import org.apache.aries.blueprint.plugin.spi.BlueprintConfiguration; -import org.apache.aries.blueprint.plugin.spi.ContextEnricher; -import org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler; -import org.apache.aries.blueprint.plugin.spi.XmlWriter; - -import javax.transaction.Transactional; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; +import jakarta.transaction.Transactional; +import org.apache.aries.blueprint.plugin.handlers.common.AbstractTransactionFactory; import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Method; -import java.util.List; -public class JavaxTransactionFactory extends AbstractTransactionFactory<Transactional> { +public class JakartaTransactionFactory extends AbstractTransactionFactory<Transactional> { - String getTransactionTypeName(AnnotatedElement annotatedElement) { + protected String getTransactionTypeName(AnnotatedElement annotatedElement) { Transactional transactional = annotatedElement.getAnnotation(Transactional.class); return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, transactional.value().name()); } diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/jakarta/PersistenceContextHandler.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/jakarta/PersistenceContextHandler.java new file mode 100644 index 000000000..6a09ca4e3 --- /dev/null +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/jakarta/PersistenceContextHandler.java @@ -0,0 +1,37 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.blueprint.plugin.handlers.jakarta; + +import jakarta.persistence.PersistenceContext; +import org.apache.aries.blueprint.plugin.handlers.common.AbstractPersistenceContextHandler; + +import java.lang.reflect.Field; + +public class PersistenceContextHandler extends AbstractPersistenceContextHandler<PersistenceContext> { + + @Override + public Class<PersistenceContext> getAnnotation() { + return PersistenceContext.class; + } + + @Override + protected String getUnitName(Field field) { + return field.getAnnotation(PersistenceContext.class).unitName(); + } +} diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/jakarta/PersistenceUnitHandler.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/jakarta/PersistenceUnitHandler.java new file mode 100644 index 000000000..15e92c34c --- /dev/null +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/jakarta/PersistenceUnitHandler.java @@ -0,0 +1,37 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.blueprint.plugin.handlers.jakarta; + +import jakarta.persistence.PersistenceUnit; +import org.apache.aries.blueprint.plugin.handlers.common.AbstractPersistenceUnitHandler; + +import java.lang.reflect.Field; + +public class PersistenceUnitHandler extends AbstractPersistenceUnitHandler<PersistenceUnit> { + + @Override + public Class<PersistenceUnit> getAnnotation() { + return PersistenceUnit.class; + } + + @Override + protected String getUnitName(Field field) { + return field.getAnnotation(PersistenceUnit.class).unitName(); + } +} diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/CdiTransactionFactory.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/CdiTransactionFactory.java index 8dcfe804b..b5bb1a435 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/CdiTransactionFactory.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/CdiTransactionFactory.java @@ -19,27 +19,14 @@ package org.apache.aries.blueprint.plugin.handlers.javax; import com.google.common.base.CaseFormat; - -import org.apache.aries.blueprint.plugin.handlers.javax.AbstractTransactionFactory; -import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler; -import org.apache.aries.blueprint.plugin.spi.BeanEnricher; -import org.apache.aries.blueprint.plugin.spi.BlueprintConfiguration; -import org.apache.aries.blueprint.plugin.spi.ContextEnricher; -import org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler; -import org.apache.aries.blueprint.plugin.spi.XmlWriter; +import org.apache.aries.blueprint.plugin.handlers.common.AbstractTransactionFactory; import javax.transaction.cdi.Transactional; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; - import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Method; -import java.util.List; -import java.util.Set; public class CdiTransactionFactory extends AbstractTransactionFactory<Transactional> { - String getTransactionTypeName(AnnotatedElement annotatedElement) { + protected String getTransactionTypeName(AnnotatedElement annotatedElement) { final Transactional transactional = annotatedElement.getAnnotation(Transactional.class); return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, transactional.value().name()); } diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/JavaxTransactionFactory.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/JavaxTransactionFactory.java index c338ec2e3..7839f4cb1 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/JavaxTransactionFactory.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/JavaxTransactionFactory.java @@ -19,25 +19,14 @@ package org.apache.aries.blueprint.plugin.handlers.javax; import com.google.common.base.CaseFormat; - -import org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler; -import org.apache.aries.blueprint.plugin.spi.BeanEnricher; -import org.apache.aries.blueprint.plugin.spi.BlueprintConfiguration; -import org.apache.aries.blueprint.plugin.spi.ContextEnricher; -import org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler; -import org.apache.aries.blueprint.plugin.spi.XmlWriter; +import org.apache.aries.blueprint.plugin.handlers.common.AbstractTransactionFactory; import javax.transaction.Transactional; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; - import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Method; -import java.util.List; public class JavaxTransactionFactory extends AbstractTransactionFactory<Transactional> { - String getTransactionTypeName(AnnotatedElement annotatedElement) { + protected String getTransactionTypeName(AnnotatedElement annotatedElement) { Transactional transactional = annotatedElement.getAnnotation(Transactional.class); return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, transactional.value().name()); } diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceContextHandler.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceContextHandler.java index 76f5ad731..531b5f217 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceContextHandler.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceContextHandler.java @@ -18,18 +18,12 @@ */ package org.apache.aries.blueprint.plugin.handlers.javax; -import org.apache.aries.blueprint.plugin.spi.BeanEnricher; -import org.apache.aries.blueprint.plugin.spi.ContextEnricher; -import org.apache.aries.blueprint.plugin.spi.FieldAnnotationHandler; -import org.apache.aries.blueprint.plugin.spi.XmlWriter; +import org.apache.aries.blueprint.plugin.handlers.common.AbstractPersistenceContextHandler; import javax.persistence.PersistenceContext; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; import java.lang.reflect.Field; -import java.util.List; -public class PersistenceContextHandler implements FieldAnnotationHandler<PersistenceContext> { +public class PersistenceContextHandler extends AbstractPersistenceContextHandler<PersistenceContext> { @Override public Class<PersistenceContext> getAnnotation() { @@ -37,32 +31,7 @@ public class PersistenceContextHandler implements FieldAnnotationHandler<Persist } @Override - public void handleFieldAnnotation(Class<?> clazz, List<Field> fields, ContextEnricher contextEnricher, BeanEnricher beanEnricher) { - final String nsJpa1 = Namespaces.getNamespaceByPattern(contextEnricher.getBlueprintConfiguration().getNamespaces(), Namespaces.PATTERN_NS_JPA1); - if (nsJpa1 != null) { - for (final Field field : fields) { - final String name = field.getName(); - final PersistenceContext persistenceContext = field.getAnnotation(PersistenceContext.class); - beanEnricher.addBeanContentWriter("javax.persistence.field.context/" + name, new XmlWriter() { - @Override - public void write(XMLStreamWriter writer) throws XMLStreamException { - writer.writeEmptyElement("context"); - writer.writeDefaultNamespace(nsJpa1); - writer.writeAttribute("unitname", persistenceContext.unitName()); - writer.writeAttribute("property", name); - } - }); - } - } - final String nsJpa2 = Namespaces.getNamespaceByPattern(contextEnricher.getBlueprintConfiguration().getNamespaces(), Namespaces.PATTERN_NS_JPA2); - if (nsJpa2 != null) { - contextEnricher.addBlueprintContentWriter("javax.persistence.enableJpa2", new XmlWriter() { - @Override - public void write(XMLStreamWriter writer) throws XMLStreamException { - writer.writeEmptyElement("enable"); - writer.writeDefaultNamespace(nsJpa2); - } - }); - } + protected String getUnitName(Field field) { + return field.getAnnotation(PersistenceContext.class).unitName(); } } diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceUnitHandler.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceUnitHandler.java index d6907aea2..bb89137c9 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceUnitHandler.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/handlers/javax/PersistenceUnitHandler.java @@ -18,22 +18,12 @@ */ package org.apache.aries.blueprint.plugin.handlers.javax; -import org.apache.aries.blueprint.plugin.spi.BeanEnricher; -import org.apache.aries.blueprint.plugin.spi.ContextEnricher; -import org.apache.aries.blueprint.plugin.spi.FieldAnnotationHandler; -import org.apache.aries.blueprint.plugin.spi.XmlWriter; +import org.apache.aries.blueprint.plugin.handlers.common.AbstractPersistenceUnitHandler; import javax.persistence.PersistenceUnit; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; import java.lang.reflect.Field; -import java.util.List; -import static org.apache.aries.blueprint.plugin.handlers.javax.Namespaces.PATTERN_NS_JPA1; -import static org.apache.aries.blueprint.plugin.handlers.javax.Namespaces.PATTERN_NS_JPA2; -import static org.apache.aries.blueprint.plugin.handlers.javax.Namespaces.getNamespaceByPattern; - -public class PersistenceUnitHandler implements FieldAnnotationHandler<PersistenceUnit> { +public class PersistenceUnitHandler extends AbstractPersistenceUnitHandler<PersistenceUnit> { @Override public Class<PersistenceUnit> getAnnotation() { @@ -41,32 +31,7 @@ public class PersistenceUnitHandler implements FieldAnnotationHandler<Persistenc } @Override - public void handleFieldAnnotation(Class<?> clazz, List<Field> fields, ContextEnricher contextEnricher, BeanEnricher beanEnricher) { - final String nsJpa1 = getNamespaceByPattern(contextEnricher.getBlueprintConfiguration().getNamespaces(), PATTERN_NS_JPA1); - if (nsJpa1 != null) { - for (final Field field : fields) { - final String name = field.getName(); - final PersistenceUnit persistenceUnit = field.getAnnotation(PersistenceUnit.class); - beanEnricher.addBeanContentWriter("javax.persistence.field.unit/" + name, new XmlWriter() { - @Override - public void write(XMLStreamWriter writer) throws XMLStreamException { - writer.writeEmptyElement("unit"); - writer.writeDefaultNamespace(nsJpa1); - writer.writeAttribute("unitname", persistenceUnit.unitName()); - writer.writeAttribute("property", name); - } - }); - } - } - final String nsJpa2 = getNamespaceByPattern(contextEnricher.getBlueprintConfiguration().getNamespaces(), PATTERN_NS_JPA2); - if (nsJpa2 != null) { - contextEnricher.addBlueprintContentWriter("javax.persistence.enableJpa2", new XmlWriter() { - @Override - public void write(XMLStreamWriter writer) throws XMLStreamException { - writer.writeEmptyElement("enable"); - writer.writeDefaultNamespace(nsJpa2); - } - }); - } + protected String getUnitName(Field field) { + return field.getAnnotation(PersistenceUnit.class).unitName(); } } diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Argument.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Argument.java index 1d8438cc2..a7af80c0d 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Argument.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Argument.java @@ -19,16 +19,12 @@ package org.apache.aries.blueprint.plugin.model; import org.apache.aries.blueprint.plugin.handlers.Handlers; -import org.apache.aries.blueprint.plugin.spi.CollectionDependencyAnnotationHandler; import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler; import org.apache.aries.blueprint.plugin.spi.XmlWriter; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import java.lang.annotation.Annotation; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; import static org.apache.aries.blueprint.plugin.model.AnnotationHelper.findName; import static org.apache.aries.blueprint.plugin.model.AnnotationHelper.findValue; diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRefStore.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRefStore.java index 514be8eb5..d40e8a859 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRefStore.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/BeanRefStore.java @@ -19,7 +19,6 @@ package org.apache.aries.blueprint.plugin.model; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Introspector.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Introspector.java index 359559c99..9cbf1fe13 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Introspector.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Introspector.java @@ -18,9 +18,7 @@ */ package org.apache.aries.blueprint.plugin.model; -import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java index bf993981c..907e472c7 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/model/Property.java @@ -19,7 +19,6 @@ package org.apache.aries.blueprint.plugin.model; import org.apache.aries.blueprint.plugin.handlers.Handlers; -import org.apache.aries.blueprint.plugin.spi.CollectionDependencyAnnotationHandler; import org.apache.aries.blueprint.plugin.spi.CustomDependencyAnnotationHandler; import org.apache.aries.blueprint.plugin.spi.NamedLikeHandler; import org.apache.aries.blueprint.plugin.spi.XmlWriter; @@ -30,9 +29,6 @@ import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; import static org.apache.aries.blueprint.plugin.model.AnnotationHelper.findName; import static org.apache.aries.blueprint.plugin.model.NamingHelper.getBeanName; diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler index 03e72caf8..cf6b93b0d 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.BeanAnnotationHandler @@ -15,6 +15,7 @@ # limitations under the License. # +org.apache.aries.blueprint.plugin.handlers.jakarta.JakartaTransactionFactory org.apache.aries.blueprint.plugin.handlers.javax.JavaxTransactionFactory org.apache.aries.blueprint.plugin.handlers.javax.CdiTransactionFactory org.apache.aries.blueprint.plugin.handlers.blueprint.config.ConfigAnnotationHandler diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.FieldAnnotationHandler b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.FieldAnnotationHandler index 53d4b55fe..94a2afd2b 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.FieldAnnotationHandler +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.FieldAnnotationHandler @@ -15,5 +15,7 @@ # limitations under the License. # +org.apache.aries.blueprint.plugin.handlers.jakarta.PersistenceContextHandler +org.apache.aries.blueprint.plugin.handlers.jakarta.PersistenceUnitHandler org.apache.aries.blueprint.plugin.handlers.javax.PersistenceContextHandler org.apache.aries.blueprint.plugin.handlers.javax.PersistenceUnitHandler \ No newline at end of file diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler index 3f1677c4f..734f539a0 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/main/resources/META-INF/services/org.apache.aries.blueprint.plugin.spi.MethodAnnotationHandler @@ -15,6 +15,7 @@ # limitations under the License. # +org.apache.aries.blueprint.plugin.handlers.jakarta.JakartaTransactionFactory org.apache.aries.blueprint.plugin.handlers.jakarta.PostConstructHandler org.apache.aries.blueprint.plugin.handlers.jakarta.PreDestroyHandler org.apache.aries.blueprint.plugin.handlers.javax.PostConstructHandler diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java index 6ab1fb4bd..8a5b88b04 100644 --- a/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/BlueprintFileWriterTest.java @@ -18,37 +18,9 @@ */ package org.apache.aries.blueprint.plugin; -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Source; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathExpressionException; -import javax.xml.xpath.XPathFactory; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.apache.aries.blueprint.plugin.FilteredClassFinder.findClasses; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - import com.google.common.collect.Sets; import org.apache.aries.blueprint.plugin.jakarta.JakartaFactoryBean; +import org.apache.aries.blueprint.plugin.jakarta.JakartaTransactionalBean; import org.apache.aries.blueprint.plugin.jakarta.NamedJakartaBean; import org.apache.aries.blueprint.plugin.jakarta.ProducedBean; import org.apache.aries.blueprint.plugin.jakarta.SimpleJakartaBean; @@ -84,6 +56,35 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Source; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Validator; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.apache.aries.blueprint.plugin.FilteredClassFinder.findClasses; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + public class BlueprintFileWriterTest { private static final String NS_JPA = "http://aries.apache.org/xmlns/jpa/v1.1.0"; @@ -152,6 +153,37 @@ public class BlueprintFileWriterTest { assertEquals(expectedDefs, defs); } + @Test + public void testGenerateJakartaTransactionalAndPersistence() throws Exception { + Node bean = getBeanById("jakartaTransactionalBean"); + + assertXpathEquals(bean, "@class", JakartaTransactionalBean.class.getName()); + assertXpathEquals(bean, "@init-method", "init"); + assertXpathEquals(bean, "@destroy-method", "destroy"); + assertXpathDoesNotExist(bean, "@scope"); + + NodeList txs = (NodeList) xpath.evaluate("transaction", bean, 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")); + assertEquals(expectedDefs, defs); + + assertXpathEquals(bean, "context/@unitname", "person"); + assertXpathEquals(bean, "context/@property", "em"); + + assertXpathEquals(bean, "unit/@unitname", "person"); + assertXpathEquals(bean, "unit/@property", "emf"); + } + @Test public void testGenerateCDITransactional() throws Exception { Node bean1 = getBeanById("cdiTransactionalAnnotatedBean"); diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/jakarta/JakartaParentBean.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/jakarta/JakartaParentBean.java new file mode 100644 index 000000000..24dbfcec6 --- /dev/null +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/jakarta/JakartaParentBean.java @@ -0,0 +1,55 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.blueprint.plugin.jakarta; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.PersistenceUnit; +import jakarta.transaction.Transactional; + +public class JakartaParentBean { + + @PersistenceContext(unitName="person") + EntityManager em; + + @PersistenceUnit(unitName="person") + EntityManager emf; + + @PostConstruct + 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() { + } +} diff --git a/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/jakarta/JakartaTransactionalBean.java b/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/jakarta/JakartaTransactionalBean.java new file mode 100644 index 000000000..c87176bef --- /dev/null +++ b/blueprint-maven-plugin/blueprint-maven-plugin/src/test/java/org/apache/aries/blueprint/plugin/jakarta/JakartaTransactionalBean.java @@ -0,0 +1,63 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.aries.blueprint.plugin.jakarta; + +import jakarta.annotation.PostConstruct; +import jakarta.inject.Singleton; +import jakarta.transaction.Transactional; +import jakarta.transaction.Transactional.TxType; + +@Singleton +@Transactional(value = TxType.REQUIRES_NEW) +public class JakartaTransactionalBean extends JakartaParentBean { + + 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() { + + } + + @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() { + } + + @Transactional(TxType.REQUIRES_NEW) + public void txOverridenWithRequiresNew() { + } +}
