This is an automated email from the ASF dual-hosted git repository. arnold pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/fineract.git
commit 9fee79ecde9aaaff690e5f1913ef5fc75682d935 Author: Arnold Galovics <[email protected]> AuthorDate: Tue May 16 17:19:10 2023 +0200 FINERACT-1926: Minor fixes with module static weaving --- fineract-investor/build.gradle | 19 +++++++++++ .../api/ExternalAssetOwnersApiResource.java | 2 +- .../investor}/domain/AbstractAuditableCustom.java | 14 ++------ .../domain/AbstractPersistableCustom.java | 12 ++----- .../investor/domain/ExternalAssetOwner.java | 1 - .../domain/ExternalAssetOwnerTransfer.java | 1 - .../ExternalAssetOwnerTransferLoanMapping.java | 1 - .../main/resources/jpa/investor/persistence.xml | 37 ++++++++++++++++++++++ .../core/domain/AbstractAuditableCustom.java | 2 ++ .../core/domain/AbstractPersistableCustom.java | 2 ++ 10 files changed, 67 insertions(+), 24 deletions(-) diff --git a/fineract-investor/build.gradle b/fineract-investor/build.gradle index 3d5d695d5..d6e05c3fd 100644 --- a/fineract-investor/build.gradle +++ b/fineract-investor/build.gradle @@ -23,6 +23,25 @@ apply plugin: 'eclipse' check.dependsOn('cucumber') +compileJava.doLast { + def mainSS = sourceSets.main + def source = mainSS.java.classesDirectory.get() + copy { + from file("src/main/resources/jpa/investor/persistence.xml") + into "${source}/META-INF/" + } + javaexec { + description = 'Performs EclipseLink static weaving of entity classes' + def target = source + main 'org.eclipse.persistence.tools.weaving.jpa.StaticWeave' + args '-persistenceinfo', source, '-classpath', sourceSets.main.runtimeClasspath, source, target + classpath sourceSets.main.runtimeClasspath + } + delete { + delete "${source}/META-INF/persistence.xml" + } +} + // Configuration for Swagger documentation generation task // https://github.com/swagger-api/swagger-core/tree/master/modules/swagger-gradle-plugin import org.apache.tools.ant.filters.ReplaceTokens diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java b/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java index 0213e26af..09744ce19 100644 --- a/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java @@ -33,7 +33,7 @@ import org.apache.commons.lang3.NotImplementedException; import org.apache.fineract.infrastructure.security.service.PlatformUserRightsContext; import org.springframework.stereotype.Component; -@Path("/external-asset-owners") +@Path("/v1/external-asset-owners") @Component @Tag(name = "External Asset Owners", description = "External Asset Owners") @RequiredArgsConstructor diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableCustom.java similarity index 83% copy from fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java copy to fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableCustom.java index 01a229849..a7b782623 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractAuditableCustom.java @@ -16,25 +16,17 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.fineract.infrastructure.core.domain; +package org.apache.fineract.investor.domain; import java.time.LocalDateTime; import java.util.Optional; import javax.persistence.Column; import javax.persistence.MappedSuperclass; import org.springframework.data.domain.Auditable; -import org.springframework.data.jpa.domain.AbstractAuditable; /** - * A custom copy of {@link AbstractAuditable} to override the column names used on database. It also uses Instant - * instead of LocalDateTime for created and modified. - * - * Abstract base class for auditable entities. Stores the audit values in persistent fields. - * - * @param <U> - * the auditing type. Typically some kind of user. - * @param <PK> - * the type of the auditing type's identifier + * This class is a copy paste from the fineract-provider module since EclipseLink not weaves the class properly if it's + * placed in the fineract-core module. */ @MappedSuperclass public abstract class AbstractAuditableCustom extends AbstractPersistableCustom implements Auditable<Long, Long, LocalDateTime> { diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractPersistableCustom.java similarity index 75% copy from fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java copy to fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractPersistableCustom.java index 824374341..d9dfae037 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/AbstractPersistableCustom.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.fineract.infrastructure.core.domain; +package org.apache.fineract.investor.domain; import java.io.Serializable; import javax.persistence.GeneratedValue; @@ -33,14 +33,8 @@ import lombok.Setter; import org.springframework.data.domain.Persistable; /** - * Abstract base class for entities. - * - * Inspired by {@link org.springframework.data.jpa.domain.AbstractPersistable}, but Id is always Long (and this class - * thus does not require generic parameterization), and auto-generation is of strategy - * {@link javax.persistence.GenerationType#IDENTITY}. - * - * The {@link #equals(Object)} and {@link #hashCode()} methods are NOT implemented here, which is untypical for JPA - * (it's usually implemented based on the Id), because "we end up with issues on OpenJPA" (TODO clarify this). + * This class is a copy paste from the fineract-provider module since EclipseLink not weaves the class properly if it's + * placed in the fineract-core module. */ @MappedSuperclass @Getter diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java index ba186a81b..9214e61a2 100644 --- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java @@ -25,7 +25,6 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; @Getter @Setter diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java index a638ec802..1cc9ca1cb 100644 --- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java @@ -27,7 +27,6 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; @Getter @Setter diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java index 37a9d4ac3..129e7a089 100644 --- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java +++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java @@ -25,7 +25,6 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; @Getter @Setter diff --git a/fineract-investor/src/main/resources/jpa/investor/persistence.xml b/fineract-investor/src/main/resources/jpa/investor/persistence.xml new file mode 100644 index 000000000..105688157 --- /dev/null +++ b/fineract-investor/src/main/resources/jpa/investor/persistence.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> + + +<persistence version="2.0" + xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> + + <!-- This file is only used for static weaving, nothing more. --> + <!-- You can find the runtime configuration in the JPAConfig class --> + <persistence-unit name="jpa-pu" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + <exclude-unlisted-classes>false</exclude-unlisted-classes> + <properties> + <property name="eclipselink.weaving" value="static" /> + </properties> + </persistence-unit> +</persistence> diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java similarity index 97% rename from fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java rename to fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java index 01a229849..dcb4708d4 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java @@ -26,6 +26,8 @@ import org.springframework.data.domain.Auditable; import org.springframework.data.jpa.domain.AbstractAuditable; /** + * Make sure to modify the same class in the modules (fineract-investor, etc) + * * A custom copy of {@link AbstractAuditable} to override the column names used on database. It also uses Instant * instead of LocalDateTime for created and modified. * diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java similarity index 96% rename from fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java rename to fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java index 824374341..f313893ca 100644 --- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java @@ -33,6 +33,8 @@ import lombok.Setter; import org.springframework.data.domain.Persistable; /** + * Make sure to modify the same class in the modules (fineract-investor, etc) + * * Abstract base class for entities. * * Inspired by {@link org.springframework.data.jpa.domain.AbstractPersistable}, but Id is always Long (and this class
