This is an automated email from the ASF dual-hosted git repository. vlamp pushed a commit to branch jpa-core-TAP5-2824 in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
commit 428a60141547e066dbeaa544e5b26d8adc89946d Author: Volker Lamp <[email protected]> AuthorDate: Sun Apr 5 20:43:45 2026 +0200 Separate tapestry-jpa-core from tapestry-jpa --- settings.gradle | 1 + .../apache/tapestry5/modules/TapestryModule.java | 2 +- .../src/main/typescript/package-lock.json | 1 - .../tapestry5/ioc/modules/TapestryIOCModule.java | 18 ++ tapestry-jpa-core/LICENSE.txt | 202 +++++++++++++++++++++ tapestry-jpa-core/NOTICE.txt | 12 ++ tapestry-jpa-core/build.gradle | 28 +++ .../jpa/core}/CommitAfterMethodAdvice.java | 6 +- .../jpa/core}/EntityManagerManagerImpl.java | 8 +- .../jpa/core}/EntityManagerObjectProvider.java | 8 +- .../jpa/core}/EntityManagerSourceImpl.java | 29 +-- .../jpa/core}/EntityTransactionManagerImpl.java | 6 +- .../internal/jpa/core/JpaCoreInternalUtils.java | 27 +-- .../jpa/core}/JpaTransactionAdvisorImpl.java | 12 +- .../internal/jpa/core}/NoopAnnotatedType.java | 2 +- .../internal/jpa/core}/NoopBeanManager.java | 2 +- .../internal/jpa/core}/NoopCreationalContext.java | 2 +- .../internal/jpa/core}/NoopInjectionTarget.java | 2 +- .../PackageNamePersistenceUnitConfigurer.java | 10 +- .../jpa/core}/PersistenceContentHandler.java | 6 +- ...nceContextSpecificEntityTransactionManager.java | 4 +- .../internal/jpa/core}/PersistenceParser.java | 6 +- .../jpa/core}/PersistenceUnitInfoImpl.java | 6 +- ...apestryCDIBeanManagerForJPAEntityListeners.java | 2 +- .../tapestry5/jpa/core}/EntityManagerManager.java | 2 +- .../tapestry5/jpa/core}/EntityManagerSource.java | 2 +- .../jpa/core}/EntityTransactionManager.java | 2 +- .../tapestry5/jpa/core/JpaCoreConstants.java | 18 +- .../apache/tapestry5/jpa/core/JpaCoreSymbols.java | 38 ++++ .../jpa/core}/JpaEntityPackageManager.java | 2 +- .../tapestry5/jpa/core}/JpaTransactionAdvisor.java | 4 +- .../jpa/core}/PersistenceUnitConfigurer.java | 4 +- .../jpa/core}/TapestryPersistenceUnitInfo.java | 4 +- .../jpa/core}/annotations/CommitAfter.java | 4 +- .../jpa/core}/annotations/package-info.java | 6 +- .../tapestry5/jpa/core/modules/JpaCoreModule.java | 119 ++++++++++++ .../jpa/core}/EntityManagerSourceImplTest.java | 14 +- .../jpa/core}/JpaTransactionAdvisorImplTest.java | 13 +- ...-persistence-units-include-unlisted-classes.xml | 0 tapestry-jpa/build.gradle | 1 + .../tapestry5/internal/jpa/CommitAfterWorker.java | 9 +- .../EntityApplicationStatePersistenceStrategy.java | 4 +- .../jpa/EntityPersistentFieldStrategy.java | 4 +- .../tapestry5/internal/jpa/JpaInternalUtils.java | 24 +-- .../tapestry5/internal/jpa/JpaValueEncoder.java | 4 +- .../tapestry5/internal/jpa/PersistedEntity.java | 4 +- .../internal/jpa/PersistenceContextWorker.java | 4 +- .../apache/tapestry5/jpa/modules/JpaModule.java | 68 ++----- .../apache/tapestry5/jpa/test/CommitCounter.java | 2 +- .../org/apache/tapestry5/jpa/test/JpaTest.java | 2 +- .../apache/tapestry5/jpa/test/JpaTestModule.java | 12 +- .../apache/tapestry5/jpa/test/NestedService.java | 2 +- .../apache/tapestry5/jpa/test/TopLevelService.java | 2 +- .../tapestry5/jpa/test/TopLevelServiceImpl.java | 4 +- .../org/example/app1/pages/CommitAfterDemo.java | 2 +- .../org/example/app1/pages/EncodeEntities.java | 4 +- .../test/java/org/example/app1/pages/GridDemo.java | 2 +- .../java/org/example/app1/pages/PersistEntity.java | 2 +- .../java/org/example/app1/pages/PersistThang.java | 2 +- .../java/org/example/app1/services/AppModule.java | 8 +- .../java/org/example/app1/services/UserDAO.java | 2 +- .../java/org/example/app2/pages/PersistItem.java | 4 +- .../java/org/example/app2/pages/PersistItem2.java | 4 +- .../java/org/example/app2/pages/PersistItem3.java | 2 +- .../java/org/example/app3/pages/PersistThing.java | 4 +- .../java/org/example/app3/services/AppModule.java | 6 +- .../java/org/example/app4/pages/PersistAll.java | 4 +- .../org/example/app6/pages/CommitAfterDemo.java | 2 +- .../org/example/app6/pages/EncodeEntities.java | 2 +- .../test/java/org/example/app6/pages/GridDemo.java | 2 +- .../java/org/example/app6/pages/PersistEntity.java | 2 +- .../java/org/example/app6/pages/PersistThang.java | 2 +- .../java/org/example/app6/services/AppModule.java | 8 +- .../java/org/example/app6/services/UserDAO.java | 2 +- .../example/app6/services/impl/UserDAOImpl.java | 2 +- 75 files changed, 598 insertions(+), 250 deletions(-) diff --git a/settings.gradle b/settings.gradle index 5bbd41fc4..f44d5b8e1 100644 --- a/settings.gradle +++ b/settings.gradle @@ -36,6 +36,7 @@ include('plastic', 'tapestry-upload', 'tapestry-beanvalidator', 'tapestry-jpa', + 'tapestry-jpa-core', 'tapestry-kaptcha', //'quickstart', 'tapestry-clojure', diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java index 0709fd572..622df1774 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/modules/TapestryModule.java @@ -1213,7 +1213,7 @@ public final class TapestryModule return assetSource.resourceForPath(input); } }); - configuration.add(stringToResource.getKey(), stringToResource); + configuration.override(stringToResource.getKey(), stringToResource); CoercionTuple<Renderable, RenderCommand> renderableToRenderCommand = CoercionTuple.create(Renderable.class, RenderCommand.class, new Coercion<Renderable, RenderCommand>() diff --git a/tapestry-core/src/main/typescript/package-lock.json b/tapestry-core/src/main/typescript/package-lock.json index de9f7e7ca..336639a5d 100644 --- a/tapestry-core/src/main/typescript/package-lock.json +++ b/tapestry-core/src/main/typescript/package-lock.json @@ -369,7 +369,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "dev": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/modules/TapestryIOCModule.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/modules/TapestryIOCModule.java index 2aeed2235..4f739e94b 100644 --- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/modules/TapestryIOCModule.java +++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/modules/TapestryIOCModule.java @@ -60,6 +60,7 @@ import org.apache.tapestry5.ioc.internal.services.ThunkCreatorImpl; import org.apache.tapestry5.ioc.internal.services.UpdateListenerHubImpl; import org.apache.tapestry5.ioc.internal.services.ValueObjectProvider; import org.apache.tapestry5.ioc.internal.services.cron.PeriodicExecutorImpl; +import org.apache.tapestry5.ioc.internal.util.ClasspathResource; import org.apache.tapestry5.ioc.internal.util.InternalUtils; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.AspectDecorator; @@ -312,6 +313,23 @@ public final class TapestryIOCModule BasicTypeCoercions.provideJSR310TypeCoercions(configuration); } + @Contribute(TypeCoercer.class) + public static void provideAdditionalCoercions(MappedConfiguration<CoercionTuple.Key, CoercionTuple> configuration) + { + Coercion<String, Resource> stringToResource = new Coercion<String, Resource>() + { + @Override + public Resource coerce(String input) + { + return new ClasspathResource(input); + } + }; + + CoercionTuple<String, Resource> stringToResourceTuple = CoercionTuple.create(String.class, Resource.class, stringToResource); + + configuration.add(stringToResourceTuple.getKey(), stringToResourceTuple); + } + /** * <dl> * <dt>SystemProperties</dt> diff --git a/tapestry-jpa-core/LICENSE.txt b/tapestry-jpa-core/LICENSE.txt new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/tapestry-jpa-core/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. diff --git a/tapestry-jpa-core/NOTICE.txt b/tapestry-jpa-core/NOTICE.txt new file mode 100644 index 000000000..2ee18498c --- /dev/null +++ b/tapestry-jpa-core/NOTICE.txt @@ -0,0 +1,12 @@ +This product includes software developed by +The Apache Software Foundation (http://www.apache.org/). + +Please refer to the NOTICE.txt in each sub-module to +identify further dependencies. + +The Maven central repository is the prefered method to download Tapestry +and its dependencies. The binary archive includes just basic +dependencies for tapestry-core; using other modules (such as +tapestry-hibernate or any of the others) requires downloading +additional dependencies. Please refer to the Maven POM for each module +to identify its dependencies. diff --git a/tapestry-jpa-core/build.gradle b/tapestry-jpa-core/build.gradle new file mode 100644 index 000000000..9f71dc319 --- /dev/null +++ b/tapestry-jpa-core/build.gradle @@ -0,0 +1,28 @@ +plugins { + id 'tapestry.junit5-spock-convention' + id 'groovy' +} + +description = 'Provides support for JPA without a dependency on tapestry-core' + +dependencies { + api libs.jakarta.persistence.api + implementation libs.jakarta.cdi.api + + implementation project(':commons') + implementation project(':tapestry-ioc') + + testImplementation project(':tapestry-spock') + testImplementation project(':tapestry-test') + + testImplementation libs.eclipselink + + testRuntimeOnly libs.dbcp + testRuntimeOnly libs.h2 +} + +tasks.named('jar', Jar) { + manifest { + attributes 'Tapestry-Module-Classes': 'org.apache.tapestry5.jpa.core.modules.JpaCoreModule' + } +} diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterMethodAdvice.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/CommitAfterMethodAdvice.java similarity index 88% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterMethodAdvice.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/CommitAfterMethodAdvice.java index d73444467..ed50791d2 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterMethodAdvice.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/CommitAfterMethodAdvice.java @@ -1,4 +1,4 @@ -// Copyright 2011, 2012, 2014 The Apache Software Foundation +// Copyright 2011, 2012, 2014, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import org.apache.tapestry5.ioc.Invokable; -import org.apache.tapestry5.jpa.EntityTransactionManager; +import org.apache.tapestry5.jpa.core.EntityTransactionManager; import org.apache.tapestry5.plastic.MethodAdvice; import org.apache.tapestry5.plastic.MethodInvocation; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerManagerImpl.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityManagerManagerImpl.java similarity index 93% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerManagerImpl.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityManagerManagerImpl.java index 77a2ef5bb..2c4d5be41 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerManagerImpl.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityManagerManagerImpl.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.util.Collections; import java.util.Map; @@ -23,8 +23,8 @@ import jakarta.persistence.spi.PersistenceUnitInfo; import org.apache.tapestry5.commons.util.CollectionFactory; import org.apache.tapestry5.ioc.services.ThreadCleanupListener; -import org.apache.tapestry5.jpa.EntityManagerManager; -import org.apache.tapestry5.jpa.EntityManagerSource; +import org.apache.tapestry5.jpa.core.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerSource; import org.slf4j.Logger; public class EntityManagerManagerImpl implements EntityManagerManager, ThreadCleanupListener diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerObjectProvider.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityManagerObjectProvider.java similarity index 91% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerObjectProvider.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityManagerObjectProvider.java index 004e7bb94..692c0e978 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerObjectProvider.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityManagerObjectProvider.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.util.HashMap; import java.util.Map; @@ -25,7 +25,7 @@ import org.apache.tapestry5.commons.ObjectCreator; import org.apache.tapestry5.commons.ObjectLocator; import org.apache.tapestry5.commons.ObjectProvider; import org.apache.tapestry5.commons.services.PlasticProxyFactory; -import org.apache.tapestry5.jpa.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; public class EntityManagerObjectProvider implements ObjectProvider { @@ -64,7 +64,7 @@ public class EntityManagerObjectProvider implements ObjectProvider final EntityManagerManager entityManagerManager = objectLocator .getService(EntityManagerManager.class); - return JpaInternalUtils.getEntityManager(entityManagerManager, annotation); + return JpaCoreInternalUtils.getEntityManager(entityManagerManager, annotation); } }, "<EntityManagerProxy>"); emProxyByName.put(unitName, proxy); diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImpl.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityManagerSourceImpl.java similarity index 91% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImpl.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityManagerSourceImpl.java index b819d1a96..eb130b135 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImpl.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityManagerSourceImpl.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,8 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; import java.util.Collections; import java.util.List; @@ -29,6 +32,7 @@ import jakarta.persistence.spi.PersistenceProviderResolverHolder; import jakarta.persistence.spi.PersistenceUnitInfo; import org.apache.tapestry5.commons.Resource; +import org.apache.tapestry5.commons.services.TypeCoercer; import org.apache.tapestry5.commons.util.CollectionFactory; import org.apache.tapestry5.func.F; import org.apache.tapestry5.func.Mapper; @@ -37,12 +41,13 @@ import org.apache.tapestry5.ioc.annotations.Local; import org.apache.tapestry5.ioc.annotations.PostInjection; import org.apache.tapestry5.ioc.annotations.Symbol; import org.apache.tapestry5.ioc.internal.util.InternalUtils; +import org.apache.tapestry5.ioc.internal.util.ClasspathResource; import org.apache.tapestry5.ioc.services.RegistryShutdownHub; -import org.apache.tapestry5.jpa.EntityManagerSource; -import org.apache.tapestry5.jpa.JpaConstants; -import org.apache.tapestry5.jpa.JpaSymbols; -import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.core.EntityManagerSource; +import org.apache.tapestry5.jpa.core.JpaCoreConstants; +import org.apache.tapestry5.jpa.core.JpaCoreSymbols; +import org.apache.tapestry5.jpa.core.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; import org.slf4j.Logger; public class EntityManagerSourceImpl implements EntityManagerSource @@ -54,10 +59,10 @@ public class EntityManagerSourceImpl implements EntityManagerSource private final List<TapestryPersistenceUnitInfo> persistenceUnitInfos; - public EntityManagerSourceImpl(Logger logger, @Symbol(JpaSymbols.PERSISTENCE_DESCRIPTOR) - final Resource persistenceDescriptor, @Local - PersistenceUnitConfigurer packageNamePersistenceUnitConfigurer, - Map<String, PersistenceUnitConfigurer> configuration) + public EntityManagerSourceImpl(Logger logger, + @Symbol(JpaCoreSymbols.PERSISTENCE_DESCRIPTOR) Resource persistenceDescriptor, + @Local PersistenceUnitConfigurer packageNamePersistenceUnitConfigurer, + Map<String, PersistenceUnitConfigurer> configuration) { this.logger = logger; @@ -215,7 +220,7 @@ public class EntityManagerSourceImpl implements EntityManagerSource if (info.getPersistenceUnitName().equals(persistenceUnitName)) { final Map properties = info.getEntityManagerProperties() == null ? CollectionFactory.newCaseInsensitiveMap() : info.getEntityManagerProperties(); - properties.put(JpaConstants.PERSISTENCE_UNIT_NAME, persistenceUnitName); + properties.put(JpaCoreConstants.PERSISTENCE_UNIT_NAME, persistenceUnitName); String providerClassName = info.getPersistenceProviderClassName(); diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityTransactionManagerImpl.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityTransactionManagerImpl.java similarity index 96% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityTransactionManagerImpl.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityTransactionManagerImpl.java index 31b09b0e9..b1d8c8039 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityTransactionManagerImpl.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/EntityTransactionManagerImpl.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.util.HashMap; import java.util.Map; @@ -21,8 +21,8 @@ import jakarta.persistence.EntityManager; import org.apache.tapestry5.ioc.Invokable; import org.apache.tapestry5.ioc.ScopeConstants; import org.apache.tapestry5.ioc.annotations.Scope; -import org.apache.tapestry5.jpa.EntityManagerManager; -import org.apache.tapestry5.jpa.EntityTransactionManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityTransactionManager; import org.slf4j.Logger; @Scope(ScopeConstants.PERTHREAD) diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/JpaCoreInternalUtils.java similarity index 75% copy from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java copy to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/JpaCoreInternalUtils.java index 4b8b0ffe7..f054bd7d7 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/JpaCoreInternalUtils.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.util.Map; import java.util.Set; @@ -24,28 +24,11 @@ import jakarta.persistence.metamodel.EntityType; import jakarta.persistence.metamodel.Metamodel; import org.apache.tapestry5.ioc.internal.util.InternalUtils; -import org.apache.tapestry5.jpa.EntityManagerManager; -import org.apache.tapestry5.jpa.JpaConstants; +import org.apache.tapestry5.jpa.core.EntityManagerManager; +import org.apache.tapestry5.jpa.core.JpaCoreConstants; -public class JpaInternalUtils +public class JpaCoreInternalUtils { - public static PersistedEntity convertApplicationValueToPersisted( - final EntityManagerManager entityManagerManager, final Object newValue) - { - final EntityManager em = getEntityManagerFactory(entityManagerManager, newValue); - - final EntityManagerFactory emf = em.getEntityManagerFactory(); - - final Map<String, Object> properties = emf.getProperties(); - - final String persistenceUnitName = (String) properties - .get(JpaConstants.PERSISTENCE_UNIT_NAME); - - final Object id = emf.getPersistenceUnitUtil().getIdentifier(newValue); - - return new PersistedEntity(newValue.getClass(), id, persistenceUnitName); - } - private static EntityManager getEntityManagerFactory( final EntityManagerManager entityManagerManager, final Object entity) { diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImpl.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/JpaTransactionAdvisorImpl.java similarity index 85% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImpl.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/JpaTransactionAdvisorImpl.java index 4b29e849f..43ef62a47 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImpl.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/JpaTransactionAdvisorImpl.java @@ -1,4 +1,4 @@ -// Copyright 2015 The Apache Software Foundation +// Copyright 2015, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.lang.reflect.Method; import java.util.HashMap; @@ -22,10 +22,10 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.apache.tapestry5.ioc.MethodAdviceReceiver; -import org.apache.tapestry5.jpa.EntityManagerManager; -import org.apache.tapestry5.jpa.EntityTransactionManager; -import org.apache.tapestry5.jpa.JpaTransactionAdvisor; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityTransactionManager; +import org.apache.tapestry5.jpa.core.JpaTransactionAdvisor; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.apache.tapestry5.plastic.MethodAdvice; public class JpaTransactionAdvisorImpl implements JpaTransactionAdvisor diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopAnnotatedType.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopAnnotatedType.java similarity index 97% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopAnnotatedType.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopAnnotatedType.java index a0d675c89..46bad1f69 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopAnnotatedType.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopAnnotatedType.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.lang.annotation.Annotation; import java.lang.reflect.Type; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopBeanManager.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopBeanManager.java similarity index 99% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopBeanManager.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopBeanManager.java index 6b1e4833d..e4e95ad8b 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopBeanManager.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopBeanManager.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.lang.annotation.Annotation; import java.lang.reflect.Type; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopCreationalContext.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopCreationalContext.java similarity index 94% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopCreationalContext.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopCreationalContext.java index 1a1f57541..9d70ba299 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopCreationalContext.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopCreationalContext.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import jakarta.enterprise.context.spi.CreationalContext; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopInjectionTarget.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopInjectionTarget.java similarity index 97% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopInjectionTarget.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopInjectionTarget.java index 06e727b06..0109835f7 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/NoopInjectionTarget.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/NoopInjectionTarget.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.util.Set; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PackageNamePersistenceUnitConfigurer.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PackageNamePersistenceUnitConfigurer.java similarity index 83% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PackageNamePersistenceUnitConfigurer.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PackageNamePersistenceUnitConfigurer.java index f85d598c4..a2c71d506 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PackageNamePersistenceUnitConfigurer.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PackageNamePersistenceUnitConfigurer.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import org.apache.tapestry5.ioc.services.ClassNameLocator; -import org.apache.tapestry5.jpa.JpaEntityPackageManager; -import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.core.JpaEntityPackageManager; +import org.apache.tapestry5.jpa.core.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; public class PackageNamePersistenceUnitConfigurer implements PersistenceUnitConfigurer { diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContentHandler.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceContentHandler.java similarity index 94% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContentHandler.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceContentHandler.java index a27c67ab4..34d718029 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContentHandler.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceContentHandler.java @@ -1,4 +1,4 @@ -// Copyright 2011, 2014 The Apache Software Foundation +// Copyright 2011, 2014, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.util.Arrays; import java.util.List; import org.apache.tapestry5.commons.util.CollectionFactory; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextSpecificEntityTransactionManager.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceContextSpecificEntityTransactionManager.java similarity index 98% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextSpecificEntityTransactionManager.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceContextSpecificEntityTransactionManager.java index 096206269..401d0deac 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextSpecificEntityTransactionManager.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceContextSpecificEntityTransactionManager.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.util.ArrayDeque; import java.util.ArrayList; @@ -23,7 +23,7 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.EntityTransaction; import org.apache.tapestry5.ioc.Invokable; -import org.apache.tapestry5.jpa.EntityTransactionManager.VoidInvokable; +import org.apache.tapestry5.jpa.core.EntityTransactionManager.VoidInvokable; import org.slf4j.Logger; public class PersistenceContextSpecificEntityTransactionManager diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceParser.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceParser.java similarity index 89% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceParser.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceParser.java index cf2402fb0..1fa78a1d4 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceParser.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceParser.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import org.apache.tapestry5.ioc.internal.util.InternalUtils; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceUnitInfoImpl.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceUnitInfoImpl.java similarity index 98% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceUnitInfoImpl.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceUnitInfoImpl.java index c0235d850..ccc0c5e7b 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceUnitInfoImpl.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/PersistenceUnitInfoImpl.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import org.apache.tapestry5.commons.util.CollectionFactory; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; import javax.naming.Context; import javax.naming.InitialContext; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/TapestryCDIBeanManagerForJPAEntityListeners.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/TapestryCDIBeanManagerForJPAEntityListeners.java similarity index 98% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/TapestryCDIBeanManagerForJPAEntityListeners.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/TapestryCDIBeanManagerForJPAEntityListeners.java index c608abf43..ccc8970d4 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/TapestryCDIBeanManagerForJPAEntityListeners.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/internal/jpa/core/TapestryCDIBeanManagerForJPAEntityListeners.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.lang.reflect.Method; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/EntityManagerManager.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/EntityManagerManager.java similarity index 97% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/EntityManagerManager.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/EntityManagerManager.java index 699d22b9d..53a628f7b 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/EntityManagerManager.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/EntityManagerManager.java @@ -10,7 +10,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.jpa; +package org.apache.tapestry5.jpa.core; import jakarta.persistence.EntityManager; import java.util.Map; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/EntityManagerSource.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/EntityManagerSource.java similarity index 97% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/EntityManagerSource.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/EntityManagerSource.java index a52852c96..a2ba7e207 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/EntityManagerSource.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/EntityManagerSource.java @@ -10,7 +10,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.jpa; +package org.apache.tapestry5.jpa.core; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/EntityTransactionManager.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/EntityTransactionManager.java similarity index 97% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/EntityTransactionManager.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/EntityTransactionManager.java index e8b2ae1c4..13eef2ca5 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/EntityTransactionManager.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/EntityTransactionManager.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tapestry5.jpa; +package org.apache.tapestry5.jpa.core; import org.apache.tapestry5.ioc.Invokable; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/PersistenceUnitConfigurer.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaCoreConstants.java similarity index 55% copy from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/PersistenceUnitConfigurer.java copy to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaCoreConstants.java index d1acafe15..3d40c8e5e 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/PersistenceUnitConfigurer.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaCoreConstants.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,21 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.jpa; +package org.apache.tapestry5.jpa.core; /** - * Used to configure a {@linkplain jakarta.persistence.spi.PersistenceUnitInfo}, which is used to - * create an {@linkplain jakarta.persistence.EntityManagerFactory}. - * + * Defines constants used inside the Tapestry JPA integration. + * * @since 5.3 */ -public interface PersistenceUnitConfigurer +public class JpaCoreConstants { /** - * Configures a persistence unit. - * - * @param unitInfo - * represents a persistence unit to configure + * Name of the <code>EntityManager</code> property whose value is the name of a persistence unit. */ - void configure(TapestryPersistenceUnitInfo unitInfo); + public static final String PERSISTENCE_UNIT_NAME = "tapestry.persistence-unit-name"; } diff --git a/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaCoreSymbols.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaCoreSymbols.java new file mode 100644 index 000000000..ababe0442 --- /dev/null +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaCoreSymbols.java @@ -0,0 +1,38 @@ +// Copyright 2011, 2026 The Apache Software Foundation +// +// Licensed 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.tapestry5.jpa.core; + +/** + * Configuration symbols, for use with contributions to {@link org.apache.tapestry5.ioc.services.ApplicationDefaults}. + * + * @since 5.3 + */ +public class JpaCoreSymbols +{ + /** + * If "true", then JPA will be started up at application launch, rather than lazily. + * + * @since 5.3 + */ + public static final String EARLY_START_UP = "tapestry.jpa.early-startup"; + + /** + * The location of the persistence configuration file, located on the classpath. This + * will normally be <code>/META-INF/persistence.xml</code>. + * + * @since 5.3 + */ + public static final String PERSISTENCE_DESCRIPTOR = "tapestry.jpa.persistence-descriptor"; +} diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaEntityPackageManager.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaEntityPackageManager.java similarity index 96% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaEntityPackageManager.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaEntityPackageManager.java index a4d28dc55..47d032aa3 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaEntityPackageManager.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaEntityPackageManager.java @@ -10,7 +10,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.jpa; +package org.apache.tapestry5.jpa.core; import org.apache.tapestry5.ioc.annotations.UsesConfiguration; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaTransactionAdvisor.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaTransactionAdvisor.java similarity index 93% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaTransactionAdvisor.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaTransactionAdvisor.java index 10957b524..7c717304d 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/JpaTransactionAdvisor.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/JpaTransactionAdvisor.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.jpa; +package org.apache.tapestry5.jpa.core; import org.apache.tapestry5.ioc.MethodAdviceReceiver; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/PersistenceUnitConfigurer.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/PersistenceUnitConfigurer.java similarity index 91% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/PersistenceUnitConfigurer.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/PersistenceUnitConfigurer.java index d1acafe15..5c390ec67 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/PersistenceUnitConfigurer.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/PersistenceUnitConfigurer.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.jpa; +package org.apache.tapestry5.jpa.core; /** * Used to configure a {@linkplain jakarta.persistence.spi.PersistenceUnitInfo}, which is used to diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/TapestryPersistenceUnitInfo.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/TapestryPersistenceUnitInfo.java similarity index 98% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/TapestryPersistenceUnitInfo.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/TapestryPersistenceUnitInfo.java index b930ca9cb..b470100c9 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/TapestryPersistenceUnitInfo.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/TapestryPersistenceUnitInfo.java @@ -1,4 +1,4 @@ -// Copyright 2011, 2014 The Apache Software Foundation +// Copyright 2011, 2014, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.jpa; +package org.apache.tapestry5.jpa.core; import jakarta.persistence.SharedCacheMode; import jakarta.persistence.ValidationMode; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/annotations/CommitAfter.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/annotations/CommitAfter.java similarity index 91% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/annotations/CommitAfter.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/annotations/CommitAfter.java index e715b7cfe..e2c9d965e 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/annotations/CommitAfter.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/annotations/CommitAfter.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.jpa.annotations; +package org.apache.tapestry5.jpa.core.annotations; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/annotations/package-info.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/annotations/package-info.java similarity index 81% rename from tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/annotations/package-info.java rename to tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/annotations/package-info.java index 7f8523063..869eff0b1 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/annotations/package-info.java +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/annotations/package-info.java @@ -1,4 +1,4 @@ -// Copyright 2012 The Apache Software Foundation +// Copyright 2012, 2026The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -13,6 +13,6 @@ // limitations under the License. /** - * JPA annotations + * JPA Core annotations */ -package org.apache.tapestry5.jpa.annotations; +package org.apache.tapestry5.jpa.core.annotations; diff --git a/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/modules/JpaCoreModule.java b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/modules/JpaCoreModule.java new file mode 100644 index 000000000..be05207a1 --- /dev/null +++ b/tapestry-jpa-core/src/main/java/org/apache/tapestry5/jpa/core/modules/JpaCoreModule.java @@ -0,0 +1,119 @@ +// Copyright 2011-2014, 2026 The Apache Software Foundation +// +// Licensed 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.tapestry5.jpa.core.modules; + +import java.util.Collection; + +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.metamodel.EntityType; +import jakarta.persistence.metamodel.Metamodel; +import jakarta.persistence.spi.PersistenceUnitInfo; + +import org.apache.tapestry5.commons.Configuration; +import org.apache.tapestry5.commons.MappedConfiguration; +import org.apache.tapestry5.commons.ObjectProvider; +import org.apache.tapestry5.commons.OrderedConfiguration; +import org.apache.tapestry5.commons.services.PropertyAccess; +import org.apache.tapestry5.commons.services.TypeCoercer; +import org.apache.tapestry5.internal.jpa.core.EntityManagerManagerImpl; +import org.apache.tapestry5.internal.jpa.core.EntityManagerObjectProvider; +import org.apache.tapestry5.internal.jpa.core.EntityManagerSourceImpl; +import org.apache.tapestry5.internal.jpa.core.EntityTransactionManagerImpl; +import org.apache.tapestry5.internal.jpa.core.JpaTransactionAdvisorImpl; +import org.apache.tapestry5.internal.jpa.core.PackageNamePersistenceUnitConfigurer; +import org.apache.tapestry5.ioc.LoggerSource; +import org.apache.tapestry5.ioc.ScopeConstants; +import org.apache.tapestry5.ioc.ServiceBinder; +import org.apache.tapestry5.ioc.annotations.Contribute; +import org.apache.tapestry5.ioc.annotations.Primary; +import org.apache.tapestry5.ioc.annotations.Scope; +import org.apache.tapestry5.ioc.annotations.Startup; +import org.apache.tapestry5.ioc.annotations.Symbol; +import org.apache.tapestry5.ioc.services.FactoryDefaults; +import org.apache.tapestry5.ioc.services.MasterObjectProvider; +import org.apache.tapestry5.ioc.services.PerthreadManager; +import org.apache.tapestry5.ioc.services.SymbolProvider; +import org.apache.tapestry5.jpa.core.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerSource; +import org.apache.tapestry5.jpa.core.EntityTransactionManager; +import org.apache.tapestry5.jpa.core.JpaEntityPackageManager; +import org.apache.tapestry5.jpa.core.JpaCoreSymbols; +import org.apache.tapestry5.jpa.core.JpaTransactionAdvisor; +import org.apache.tapestry5.jpa.core.PersistenceUnitConfigurer; +import org.slf4j.Logger; + +/** + * Defines core services for JPA support. + * + * @since 5.3 + */ +public class JpaCoreModule +{ + public static void bind(final ServiceBinder binder) + { + binder.bind(JpaTransactionAdvisor.class, JpaTransactionAdvisorImpl.class); + binder.bind(PersistenceUnitConfigurer.class, PackageNamePersistenceUnitConfigurer.class).withSimpleId(); + binder.bind(EntityManagerSource.class, EntityManagerSourceImpl.class); + binder.bind(EntityTransactionManager.class, EntityTransactionManagerImpl.class); + } + + public static JpaEntityPackageManager buildJpaEntityPackageManager(final Collection<String> packageNames) + { + return new JpaEntityPackageManager() + { + @Override + public Collection<String> getPackageNames() + { + return packageNames; + } + }; + } + + @Scope(ScopeConstants.PERTHREAD) + public static EntityManagerManager buildEntityManagerManager(final EntityManagerSource entityManagerSource, + final PerthreadManager perthreadManager, final Logger logger) + { + final EntityManagerManagerImpl service = new EntityManagerManagerImpl(entityManagerSource, logger); + + perthreadManager.addThreadCleanupListener(service); + + return service; + } + + @Contribute(MasterObjectProvider.class) + public static void provideObjectProviders(final OrderedConfiguration<ObjectProvider> configuration) + { + configuration.addInstance("EntityManager", EntityManagerObjectProvider.class, + "before:AnnotationBasedContributions"); + } + + @Contribute(SymbolProvider.class) + @FactoryDefaults + public static void provideFactoryDefaults(final MappedConfiguration<String, String> configuration) + { + configuration.add(JpaCoreSymbols.EARLY_START_UP, "true"); + configuration.add(JpaCoreSymbols.PERSISTENCE_DESCRIPTOR, "/META-INF/persistence.xml"); + } + + @Startup + public static void startupEarly(final EntityManagerManager entityManagerManager, @Symbol(JpaCoreSymbols.EARLY_START_UP) + final boolean earlyStartup) + { + if (earlyStartup) + { + entityManagerManager.getEntityManagers(); + } + } +} diff --git a/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImplTest.java b/tapestry-jpa-core/src/test/java/org/apache/tapestry5/internal/jpa/core/EntityManagerSourceImplTest.java similarity index 90% rename from tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImplTest.java rename to tapestry-jpa-core/src/test/java/org/apache/tapestry5/internal/jpa/core/EntityManagerSourceImplTest.java index 61c0be72a..9af6c9f47 100644 --- a/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/EntityManagerSourceImplTest.java +++ b/tapestry-jpa-core/src/test/java/org/apache/tapestry5/internal/jpa/core/EntityManagerSourceImplTest.java @@ -1,4 +1,4 @@ -// Copyright 2011-2014 The Apache Software Foundation +// Copyright 2011-2014, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,13 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import org.apache.tapestry5.commons.util.CollectionFactory; import org.apache.tapestry5.ioc.internal.util.ClasspathResource; -import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; -import org.apache.tapestry5.test.TapestryTestCase; +import org.apache.tapestry5.jpa.core.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.internal.jpa.core.EntityManagerSourceImpl; +import org.apache.tapestry5.ioc.test.IOCTestCase; import org.slf4j.LoggerFactory; import org.testng.annotations.Test; @@ -28,7 +29,7 @@ import jakarta.persistence.spi.PersistenceUnitTransactionType; import java.util.HashMap; import java.util.Map; -public class EntityManagerSourceImplTest extends TapestryTestCase +public class EntityManagerSourceImplTest extends IOCTestCase { @Test public void multiple_persistence_units_include_unlisted_classes() @@ -95,5 +96,4 @@ public class EntityManagerSourceImplTest extends TapestryTestCase persistenceUnitFile), null, configurerMap); return emSource; } - } diff --git a/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImplTest.java b/tapestry-jpa-core/src/test/java/org/apache/tapestry5/internal/jpa/core/JpaTransactionAdvisorImplTest.java similarity index 97% rename from tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImplTest.java rename to tapestry-jpa-core/src/test/java/org/apache/tapestry5/internal/jpa/core/JpaTransactionAdvisorImplTest.java index 558ea8dbc..8de7f2205 100644 --- a/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImplTest.java +++ b/tapestry-jpa-core/src/test/java/org/apache/tapestry5/internal/jpa/core/JpaTransactionAdvisorImplTest.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package org.apache.tapestry5.internal.jpa; +package org.apache.tapestry5.internal.jpa.core; import java.sql.SQLException; import java.util.Map; @@ -27,10 +27,11 @@ import org.apache.tapestry5.ioc.Registry; import org.apache.tapestry5.ioc.services.AspectDecorator; import org.apache.tapestry5.ioc.services.AspectInterceptorBuilder; import org.apache.tapestry5.ioc.test.IOCTestCase; -import org.apache.tapestry5.jpa.EntityManagerManager; -import org.apache.tapestry5.jpa.EntityTransactionManager; -import org.apache.tapestry5.jpa.JpaTransactionAdvisor; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityTransactionManager; +import org.apache.tapestry5.jpa.core.JpaTransactionAdvisor; +import org.apache.tapestry5.internal.jpa.core.JpaTransactionAdvisorImpl; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.apache.tapestry5.test.ioc.TestBase; import org.testng.Assert; import org.testng.annotations.AfterClass; diff --git a/tapestry-jpa/src/test/resources/multiple-persistence-units-include-unlisted-classes.xml b/tapestry-jpa-core/src/test/resources/multiple-persistence-units-include-unlisted-classes.xml similarity index 100% rename from tapestry-jpa/src/test/resources/multiple-persistence-units-include-unlisted-classes.xml rename to tapestry-jpa-core/src/test/resources/multiple-persistence-units-include-unlisted-classes.xml diff --git a/tapestry-jpa/build.gradle b/tapestry-jpa/build.gradle index 0f7ff48e5..4e360f78f 100644 --- a/tapestry-jpa/build.gradle +++ b/tapestry-jpa/build.gradle @@ -6,6 +6,7 @@ description = 'Provides support for simple CRUD applications built on top of Tap dependencies { implementation project(':tapestry-core') + implementation project(':tapestry-jpa-core') api libs.jakarta.persistence.api implementation libs.jakarta.cdi.api diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java index 0df0b963a..85fd35eae 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java @@ -1,4 +1,4 @@ -// Copyright 2011, 2014 The Apache Software Foundation +// Copyright 2011, 2014, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,9 +20,10 @@ import java.util.Map; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; -import org.apache.tapestry5.jpa.EntityManagerManager; -import org.apache.tapestry5.jpa.EntityTransactionManager; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.internal.jpa.core.CommitAfterMethodAdvice; +import org.apache.tapestry5.jpa.core.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityTransactionManager; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.apache.tapestry5.model.MutableComponentModel; import org.apache.tapestry5.plastic.MethodAdvice; import org.apache.tapestry5.plastic.PlasticClass; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityApplicationStatePersistenceStrategy.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityApplicationStatePersistenceStrategy.java index 7566ea43d..f61dbcb56 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityApplicationStatePersistenceStrategy.java +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityApplicationStatePersistenceStrategy.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ package org.apache.tapestry5.internal.jpa; import org.apache.tapestry5.http.services.Request; import org.apache.tapestry5.internal.services.SessionApplicationStatePersistenceStrategy; -import org.apache.tapestry5.jpa.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; import org.apache.tapestry5.services.ApplicationStateCreator; public class EntityApplicationStatePersistenceStrategy extends diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityPersistentFieldStrategy.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityPersistentFieldStrategy.java index a49230f56..1f00078a2 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityPersistentFieldStrategy.java +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityPersistentFieldStrategy.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ package org.apache.tapestry5.internal.jpa; import org.apache.tapestry5.http.services.Request; import org.apache.tapestry5.internal.services.AbstractSessionPersistentFieldStrategy; -import org.apache.tapestry5.jpa.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; /** * Persists JPA entities by storing their id in the session. diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java index 4b8b0ffe7..2629ffa12 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,11 +23,12 @@ import jakarta.persistence.PersistenceContext; import jakarta.persistence.metamodel.EntityType; import jakarta.persistence.metamodel.Metamodel; +import org.apache.tapestry5.internal.jpa.core.JpaCoreInternalUtils; import org.apache.tapestry5.ioc.internal.util.InternalUtils; -import org.apache.tapestry5.jpa.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; import org.apache.tapestry5.jpa.JpaConstants; -public class JpaInternalUtils +public class JpaInternalUtils extends JpaCoreInternalUtils { public static PersistedEntity convertApplicationValueToPersisted( final EntityManagerManager entityManagerManager, final Object newValue) @@ -76,21 +77,4 @@ public class JpaInternalUtils "Failed persisting the entity. The entity '%s' does not belong to any of the existing persistence contexts.", entity)); } - - public static EntityManager getEntityManager(EntityManagerManager entityManagerManager, - PersistenceContext annotation) - { - String unitName = annotation == null ? null : annotation.unitName(); - - if (InternalUtils.isNonBlank(unitName)) - return entityManagerManager.getEntityManager(unitName); - - Map<String, EntityManager> entityManagers = entityManagerManager.getEntityManagers(); - - if (entityManagers.size() == 1) - return entityManagers.values().iterator().next(); - - throw new RuntimeException("Unable to locate a single EntityManager. " + - "You must provide the persistence unit name as defined in the persistence.xml using the @PersistenceContext annotation."); - } } diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaValueEncoder.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaValueEncoder.java index 7bf678aa0..357c45fec 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaValueEncoder.java +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaValueEncoder.java @@ -1,4 +1,4 @@ -// Copyright 2011-2013 The Apache Software Foundation +// Copyright 2011-2013, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import org.apache.tapestry5.commons.services.PropertyAdapter; import org.apache.tapestry5.commons.services.TypeCoercer; import org.apache.tapestry5.commons.util.ExceptionUtils; import org.apache.tapestry5.ioc.internal.util.InternalUtils; -import org.apache.tapestry5.jpa.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; import org.slf4j.Logger; import jakarta.persistence.EntityManager; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistedEntity.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistedEntity.java index 0e6817ab7..10deedc96 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistedEntity.java +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistedEntity.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ import java.io.Serializable; import jakarta.persistence.EntityManager; import org.apache.tapestry5.http.annotations.ImmutableSessionPersistedObject; -import org.apache.tapestry5.jpa.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; /** * Encapsulates a JPA entity name with an entity id. diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextWorker.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextWorker.java index fbb05bca2..3e111a25f 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextWorker.java +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextWorker.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ package org.apache.tapestry5.internal.jpa; import org.apache.tapestry5.internal.transform.ReadOnlyComponentFieldConduit; -import org.apache.tapestry5.jpa.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; import org.apache.tapestry5.model.MutableComponentModel; import org.apache.tapestry5.plastic.InstanceContext; import org.apache.tapestry5.plastic.PlasticClass; diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java index cdc0b225a..2e371ecc9 100644 --- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java +++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java @@ -1,4 +1,4 @@ -// Copyright 2011-2014 The Apache Software Foundation +// Copyright 2011-2014, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -31,20 +31,16 @@ import org.apache.tapestry5.commons.services.TypeCoercer; import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants; import org.apache.tapestry5.internal.jpa.CommitAfterWorker; import org.apache.tapestry5.internal.jpa.EntityApplicationStatePersistenceStrategy; -import org.apache.tapestry5.internal.jpa.EntityManagerManagerImpl; -import org.apache.tapestry5.internal.jpa.EntityManagerObjectProvider; -import org.apache.tapestry5.internal.jpa.EntityManagerSourceImpl; import org.apache.tapestry5.internal.jpa.EntityPersistentFieldStrategy; -import org.apache.tapestry5.internal.jpa.EntityTransactionManagerImpl; -import org.apache.tapestry5.internal.jpa.JpaTransactionAdvisorImpl; import org.apache.tapestry5.internal.jpa.JpaValueEncoder; -import org.apache.tapestry5.internal.jpa.PackageNamePersistenceUnitConfigurer; import org.apache.tapestry5.internal.jpa.PersistenceContextWorker; import org.apache.tapestry5.internal.services.PersistentFieldManager; import org.apache.tapestry5.ioc.LoggerSource; import org.apache.tapestry5.ioc.ScopeConstants; import org.apache.tapestry5.ioc.ServiceBinder; import org.apache.tapestry5.ioc.annotations.Contribute; +import org.apache.tapestry5.ioc.annotations.ImportModule; +import org.apache.tapestry5.ioc.annotations.Local; import org.apache.tapestry5.ioc.annotations.Primary; import org.apache.tapestry5.ioc.annotations.Scope; import org.apache.tapestry5.ioc.annotations.Startup; @@ -52,15 +48,17 @@ import org.apache.tapestry5.ioc.annotations.Symbol; import org.apache.tapestry5.ioc.services.FactoryDefaults; import org.apache.tapestry5.ioc.services.MasterObjectProvider; import org.apache.tapestry5.ioc.services.PerthreadManager; +import org.apache.tapestry5.ioc.services.ServiceOverride; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.EntityManagerManager; -import org.apache.tapestry5.jpa.EntityManagerSource; -import org.apache.tapestry5.jpa.EntityTransactionManager; -import org.apache.tapestry5.jpa.JpaEntityPackageManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerSource; +import org.apache.tapestry5.jpa.core.EntityTransactionManager; +import org.apache.tapestry5.jpa.core.JpaEntityPackageManager; import org.apache.tapestry5.jpa.JpaPersistenceConstants; import org.apache.tapestry5.jpa.JpaSymbols; -import org.apache.tapestry5.jpa.JpaTransactionAdvisor; -import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.core.JpaTransactionAdvisor; +import org.apache.tapestry5.jpa.core.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.core.modules.JpaCoreModule; import org.apache.tapestry5.services.ApplicationStateContribution; import org.apache.tapestry5.services.ApplicationStateManager; import org.apache.tapestry5.services.ApplicationStatePersistenceStrategy; @@ -76,40 +74,9 @@ import org.slf4j.Logger; * * @since 5.3 */ +@ImportModule(JpaCoreModule.class) public class JpaModule { - public static void bind(final ServiceBinder binder) - { - binder.bind(JpaTransactionAdvisor.class, JpaTransactionAdvisorImpl.class); - binder.bind(PersistenceUnitConfigurer.class, PackageNamePersistenceUnitConfigurer.class).withSimpleId(); - binder.bind(EntityManagerSource.class, EntityManagerSourceImpl.class); - binder.bind(EntityTransactionManager.class, EntityTransactionManagerImpl.class); - - } - - public static JpaEntityPackageManager buildJpaEntityPackageManager(final Collection<String> packageNames) - { - return new JpaEntityPackageManager() - { - @Override - public Collection<String> getPackageNames() - { - return packageNames; - } - }; - } - - @Scope(ScopeConstants.PERTHREAD) - public static EntityManagerManager buildEntityManagerManager(final EntityManagerSource entityManagerSource, - final PerthreadManager perthreadManager, final Logger logger) - { - final EntityManagerManagerImpl service = new EntityManagerManagerImpl(entityManagerSource, logger); - - perthreadManager.addThreadCleanupListener(service); - - return service; - } - @Contribute(JpaEntityPackageManager.class) public static void provideEntityPackages(Configuration<String> configuration, @@ -141,21 +108,14 @@ public class JpaModule configuration.addInstance("JPACommitAfter", CommitAfterWorker.class, "after:Log"); } - @Contribute(MasterObjectProvider.class) - public static void provideObjectProviders(final OrderedConfiguration<ObjectProvider> configuration) - { - configuration.addInstance("EntityManager", EntityManagerObjectProvider.class, - "before:AnnotationBasedContributions"); - } - @Contribute(SymbolProvider.class) @FactoryDefaults public static void provideFactoryDefaults(final MappedConfiguration<String, String> configuration) { configuration.add(JpaSymbols.PROVIDE_ENTITY_VALUE_ENCODERS, "true"); - configuration.add(JpaSymbols.EARLY_START_UP, "true"); + configuration.override(JpaSymbols.EARLY_START_UP, "true"); configuration.add(JpaSymbols.ENTITY_SESSION_STATE_PERSISTENCE_STRATEGY_ENABLED, "true"); - configuration.add(JpaSymbols.PERSISTENCE_DESCRIPTOR, "/META-INF/persistence.xml"); + configuration.override(JpaSymbols.PERSISTENCE_DESCRIPTOR, "/META-INF/persistence.xml"); } @Contribute(ValueEncoderSource.class) diff --git a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/CommitCounter.java b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/CommitCounter.java index 8d8de2848..cce16de92 100644 --- a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/CommitCounter.java +++ b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/CommitCounter.java @@ -21,7 +21,7 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.PostPersist; import jakarta.persistence.PostUpdate; -import org.apache.tapestry5.jpa.EntityTransactionManager; +import org.apache.tapestry5.jpa.core.EntityTransactionManager; import org.apache.tapestry5.jpa.test.entities.VersionedThing; public class CommitCounter diff --git a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/JpaTest.java b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/JpaTest.java index 6c7493f0d..b87a070ea 100644 --- a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/JpaTest.java +++ b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/JpaTest.java @@ -36,7 +36,7 @@ import org.apache.tapestry5.internal.jpa.PersistedEntity; import org.apache.tapestry5.internal.test.PageTesterContext; import org.apache.tapestry5.ioc.Registry; import org.apache.tapestry5.ioc.RegistryBuilder; -import org.apache.tapestry5.jpa.EntityManagerManager; +import org.apache.tapestry5.jpa.core.EntityManagerManager; import org.apache.tapestry5.jpa.modules.JpaModule; import org.apache.tapestry5.jpa.test.entities.ThingOne; import org.apache.tapestry5.jpa.test.entities.ThingTwo; diff --git a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/JpaTestModule.java b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/JpaTestModule.java index 4beca5f6c..8aa355acb 100644 --- a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/JpaTestModule.java +++ b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/JpaTestModule.java @@ -17,18 +17,18 @@ import org.apache.tapestry5.commons.Configuration; import org.apache.tapestry5.commons.MappedConfiguration; import org.apache.tapestry5.commons.ObjectLocator; import org.apache.tapestry5.http.internal.TapestryHttpInternalConstants; -import org.apache.tapestry5.internal.jpa.TapestryCDIBeanManagerForJPAEntityListeners; +import org.apache.tapestry5.internal.jpa.core.TapestryCDIBeanManagerForJPAEntityListeners; import org.apache.tapestry5.ioc.MethodAdviceReceiver; import org.apache.tapestry5.ioc.ServiceBinder; import org.apache.tapestry5.ioc.annotations.Contribute; import org.apache.tapestry5.ioc.annotations.Match; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.EntityManagerSource; -import org.apache.tapestry5.jpa.JpaEntityPackageManager; -import org.apache.tapestry5.jpa.JpaTransactionAdvisor; -import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.core.EntityManagerSource; +import org.apache.tapestry5.jpa.core.JpaEntityPackageManager; +import org.apache.tapestry5.jpa.core.JpaTransactionAdvisor; +import org.apache.tapestry5.jpa.core.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; import org.apache.tapestry5.jpa.test.entities.ThingOne; import org.apache.tapestry5.jpa.test.entities.ThingTwo; import org.apache.tapestry5.jpa.test.entities.VersionedThing; diff --git a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/NestedService.java b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/NestedService.java index d427a86eb..284b0bd86 100644 --- a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/NestedService.java +++ b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/NestedService.java @@ -13,7 +13,7 @@ */ package org.apache.tapestry5.jpa.test; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; public interface NestedService { diff --git a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/TopLevelService.java b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/TopLevelService.java index 849b84dae..1291ae7c3 100644 --- a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/TopLevelService.java +++ b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/TopLevelService.java @@ -13,7 +13,7 @@ */ package org.apache.tapestry5.jpa.test; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; public interface TopLevelService { diff --git a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/TopLevelServiceImpl.java b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/TopLevelServiceImpl.java index 04fa8d788..7d14d52e9 100644 --- a/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/TopLevelServiceImpl.java +++ b/tapestry-jpa/src/test/java/org/apache/tapestry5/jpa/test/TopLevelServiceImpl.java @@ -16,8 +16,8 @@ package org.apache.tapestry5.jpa.test; import jakarta.persistence.EntityManager; import org.apache.tapestry5.ioc.Invokable; -import org.apache.tapestry5.jpa.EntityTransactionManager; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.EntityTransactionManager; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.apache.tapestry5.jpa.test.entities.ThingOne; public class TopLevelServiceImpl implements TopLevelService diff --git a/tapestry-jpa/src/test/java/org/example/app1/pages/CommitAfterDemo.java b/tapestry-jpa/src/test/java/org/example/app1/pages/CommitAfterDemo.java index 9b333c564..3f08f82a3 100644 --- a/tapestry-jpa/src/test/java/org/example/app1/pages/CommitAfterDemo.java +++ b/tapestry-jpa/src/test/java/org/example/app1/pages/CommitAfterDemo.java @@ -18,7 +18,7 @@ import java.sql.SQLException; import jakarta.persistence.PersistenceContext; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app1.AppConstants; import org.example.app1.entities.User; diff --git a/tapestry-jpa/src/test/java/org/example/app1/pages/EncodeEntities.java b/tapestry-jpa/src/test/java/org/example/app1/pages/EncodeEntities.java index 49d190a6c..06c0d7f79 100644 --- a/tapestry-jpa/src/test/java/org/example/app1/pages/EncodeEntities.java +++ b/tapestry-jpa/src/test/java/org/example/app1/pages/EncodeEntities.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ import jakarta.persistence.PersistenceContext; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.ioc.annotations.Inject; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app1.AppConstants; import org.example.app1.entities.User; import org.example.app1.services.UserDAO; diff --git a/tapestry-jpa/src/test/java/org/example/app1/pages/GridDemo.java b/tapestry-jpa/src/test/java/org/example/app1/pages/GridDemo.java index d0746be24..1bf77ea96 100644 --- a/tapestry-jpa/src/test/java/org/example/app1/pages/GridDemo.java +++ b/tapestry-jpa/src/test/java/org/example/app1/pages/GridDemo.java @@ -23,7 +23,7 @@ import jakarta.persistence.criteria.Root; import org.apache.tapestry5.grid.GridDataSource; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.jpa.JpaGridDataSource; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app1.AppConstants; import org.example.app1.entities.User; import org.example.app1.services.UserDAO; diff --git a/tapestry-jpa/src/test/java/org/example/app1/pages/PersistEntity.java b/tapestry-jpa/src/test/java/org/example/app1/pages/PersistEntity.java index 6f34f29a1..1188e4ac4 100644 --- a/tapestry-jpa/src/test/java/org/example/app1/pages/PersistEntity.java +++ b/tapestry-jpa/src/test/java/org/example/app1/pages/PersistEntity.java @@ -22,7 +22,7 @@ import jakarta.persistence.PersistenceContext; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.jpa.JpaPersistenceConstants; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app1.AppConstants; import org.example.app1.entities.User; diff --git a/tapestry-jpa/src/test/java/org/example/app1/pages/PersistThang.java b/tapestry-jpa/src/test/java/org/example/app1/pages/PersistThang.java index 9c4d20962..1e4cabf0b 100644 --- a/tapestry-jpa/src/test/java/org/example/app1/pages/PersistThang.java +++ b/tapestry-jpa/src/test/java/org/example/app1/pages/PersistThang.java @@ -17,7 +17,7 @@ package org.example.app1.pages; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.jpa.JpaPersistenceConstants; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app1.AppConstants; import org.example.app1.entities.Thang; import org.example.app1.entities.User; diff --git a/tapestry-jpa/src/test/java/org/example/app1/services/AppModule.java b/tapestry-jpa/src/test/java/org/example/app1/services/AppModule.java index 14d7c11b6..552fb6006 100644 --- a/tapestry-jpa/src/test/java/org/example/app1/services/AppModule.java +++ b/tapestry-jpa/src/test/java/org/example/app1/services/AppModule.java @@ -21,10 +21,10 @@ import org.apache.tapestry5.ioc.annotations.ImportModule; import org.apache.tapestry5.ioc.annotations.Match; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.EntityManagerSource; -import org.apache.tapestry5.jpa.JpaTransactionAdvisor; -import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.core.EntityManagerSource; +import org.apache.tapestry5.jpa.core.JpaTransactionAdvisor; +import org.apache.tapestry5.jpa.core.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; import org.apache.tapestry5.jpa.modules.JpaModule; import org.example.app1.AppConstants; import org.example.app1.entities.Thang; diff --git a/tapestry-jpa/src/test/java/org/example/app1/services/UserDAO.java b/tapestry-jpa/src/test/java/org/example/app1/services/UserDAO.java index 5ac815bee..970a08d80 100644 --- a/tapestry-jpa/src/test/java/org/example/app1/services/UserDAO.java +++ b/tapestry-jpa/src/test/java/org/example/app1/services/UserDAO.java @@ -18,7 +18,7 @@ import java.util.List; import jakarta.persistence.PersistenceContext; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app1.AppConstants; import org.example.app1.entities.User; diff --git a/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem.java b/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem.java index f81813cb8..a5c7069cd 100644 --- a/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem.java +++ b/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ import jakarta.persistence.PersistenceContext; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app2.entities.Item; public class PersistItem diff --git a/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem2.java b/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem2.java index 786f9273d..ea4e2855e 100644 --- a/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem2.java +++ b/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem2.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package org.example.app2.pages; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.ioc.annotations.Inject; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app2.entities.Item; import jakarta.persistence.EntityManager; diff --git a/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem3.java b/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem3.java index f8d9820b5..ffbf5c182 100644 --- a/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem3.java +++ b/tapestry-jpa/src/test/java/org/example/app2/pages/PersistItem3.java @@ -17,7 +17,7 @@ package org.example.app2.pages; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.ioc.annotations.Inject; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app2.entities.Item; import org.example.app2.services.UserDAO; diff --git a/tapestry-jpa/src/test/java/org/example/app3/pages/PersistThing.java b/tapestry-jpa/src/test/java/org/example/app3/pages/PersistThing.java index 172f7d97a..bb53bbe1f 100644 --- a/tapestry-jpa/src/test/java/org/example/app3/pages/PersistThing.java +++ b/tapestry-jpa/src/test/java/org/example/app3/pages/PersistThing.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import jakarta.persistence.PersistenceContext; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.jpa.JpaPersistenceConstants; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app3.model.Thing; public class PersistThing diff --git a/tapestry-jpa/src/test/java/org/example/app3/services/AppModule.java b/tapestry-jpa/src/test/java/org/example/app3/services/AppModule.java index fa2cd1461..c889b666d 100644 --- a/tapestry-jpa/src/test/java/org/example/app3/services/AppModule.java +++ b/tapestry-jpa/src/test/java/org/example/app3/services/AppModule.java @@ -17,10 +17,10 @@ import org.apache.tapestry5.ioc.annotations.Contribute; import org.apache.tapestry5.ioc.annotations.ImportModule; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.EntityManagerSource; +import org.apache.tapestry5.jpa.core.EntityManagerSource; import org.apache.tapestry5.jpa.JpaSymbols; -import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.core.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; import org.apache.tapestry5.jpa.modules.JpaModule; @ImportModule(JpaModule.class) diff --git a/tapestry-jpa/src/test/java/org/example/app4/pages/PersistAll.java b/tapestry-jpa/src/test/java/org/example/app4/pages/PersistAll.java index d7a808076..07b0fbf2e 100644 --- a/tapestry-jpa/src/test/java/org/example/app4/pages/PersistAll.java +++ b/tapestry-jpa/src/test/java/org/example/app4/pages/PersistAll.java @@ -1,4 +1,4 @@ -// Copyright 2011 The Apache Software Foundation +// Copyright 2011, 2026 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package org.example.app4.pages; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.jpa.JpaPersistenceConstants; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app1.entities.Thang; import org.example.app1.entities.User; import org.example.app2.entities.Item; diff --git a/tapestry-jpa/src/test/java/org/example/app6/pages/CommitAfterDemo.java b/tapestry-jpa/src/test/java/org/example/app6/pages/CommitAfterDemo.java index c6445f44b..b59bed456 100644 --- a/tapestry-jpa/src/test/java/org/example/app6/pages/CommitAfterDemo.java +++ b/tapestry-jpa/src/test/java/org/example/app6/pages/CommitAfterDemo.java @@ -18,7 +18,7 @@ import java.sql.SQLException; import jakarta.persistence.PersistenceContext; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app6.AppConstants; import org.example.app6.entities.User; diff --git a/tapestry-jpa/src/test/java/org/example/app6/pages/EncodeEntities.java b/tapestry-jpa/src/test/java/org/example/app6/pages/EncodeEntities.java index 8d172ab10..10541ecb9 100644 --- a/tapestry-jpa/src/test/java/org/example/app6/pages/EncodeEntities.java +++ b/tapestry-jpa/src/test/java/org/example/app6/pages/EncodeEntities.java @@ -21,7 +21,7 @@ import jakarta.persistence.PersistenceContext; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.ioc.annotations.Inject; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app6.AppConstants; import org.example.app6.entities.User; import org.example.app6.services.UserDAO; diff --git a/tapestry-jpa/src/test/java/org/example/app6/pages/GridDemo.java b/tapestry-jpa/src/test/java/org/example/app6/pages/GridDemo.java index 88b2e6fd7..9d13a4e33 100644 --- a/tapestry-jpa/src/test/java/org/example/app6/pages/GridDemo.java +++ b/tapestry-jpa/src/test/java/org/example/app6/pages/GridDemo.java @@ -23,7 +23,7 @@ import jakarta.persistence.criteria.Root; import org.apache.tapestry5.grid.GridDataSource; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.jpa.JpaGridDataSource; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app6.AppConstants; import org.example.app6.entities.User; import org.example.app6.services.UserDAO; diff --git a/tapestry-jpa/src/test/java/org/example/app6/pages/PersistEntity.java b/tapestry-jpa/src/test/java/org/example/app6/pages/PersistEntity.java index 26a922506..da7068de6 100644 --- a/tapestry-jpa/src/test/java/org/example/app6/pages/PersistEntity.java +++ b/tapestry-jpa/src/test/java/org/example/app6/pages/PersistEntity.java @@ -22,7 +22,7 @@ import jakarta.persistence.PersistenceContext; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.jpa.JpaPersistenceConstants; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app6.AppConstants; import org.example.app6.entities.User; diff --git a/tapestry-jpa/src/test/java/org/example/app6/pages/PersistThang.java b/tapestry-jpa/src/test/java/org/example/app6/pages/PersistThang.java index b542f2419..866d7be1b 100644 --- a/tapestry-jpa/src/test/java/org/example/app6/pages/PersistThang.java +++ b/tapestry-jpa/src/test/java/org/example/app6/pages/PersistThang.java @@ -24,7 +24,7 @@ import jakarta.persistence.PersistenceContext; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.jpa.JpaPersistenceConstants; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app6.entities.Thang; public class PersistThang diff --git a/tapestry-jpa/src/test/java/org/example/app6/services/AppModule.java b/tapestry-jpa/src/test/java/org/example/app6/services/AppModule.java index 9304acc5c..2895f3b96 100644 --- a/tapestry-jpa/src/test/java/org/example/app6/services/AppModule.java +++ b/tapestry-jpa/src/test/java/org/example/app6/services/AppModule.java @@ -21,10 +21,10 @@ import org.apache.tapestry5.ioc.annotations.ImportModule; import org.apache.tapestry5.ioc.annotations.Match; import org.apache.tapestry5.ioc.services.ApplicationDefaults; import org.apache.tapestry5.ioc.services.SymbolProvider; -import org.apache.tapestry5.jpa.EntityManagerSource; -import org.apache.tapestry5.jpa.JpaTransactionAdvisor; -import org.apache.tapestry5.jpa.PersistenceUnitConfigurer; -import org.apache.tapestry5.jpa.TapestryPersistenceUnitInfo; +import org.apache.tapestry5.jpa.core.EntityManagerSource; +import org.apache.tapestry5.jpa.core.JpaTransactionAdvisor; +import org.apache.tapestry5.jpa.core.PersistenceUnitConfigurer; +import org.apache.tapestry5.jpa.core.TapestryPersistenceUnitInfo; import org.apache.tapestry5.jpa.modules.JpaModule; import org.example.app6.AppConstants; import org.example.app6.entities.Thang; diff --git a/tapestry-jpa/src/test/java/org/example/app6/services/UserDAO.java b/tapestry-jpa/src/test/java/org/example/app6/services/UserDAO.java index 0e6fb274c..30eb91af4 100644 --- a/tapestry-jpa/src/test/java/org/example/app6/services/UserDAO.java +++ b/tapestry-jpa/src/test/java/org/example/app6/services/UserDAO.java @@ -18,7 +18,7 @@ import java.util.List; import jakarta.persistence.PersistenceContext; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app6.AppConstants; import org.example.app6.entities.User; diff --git a/tapestry-jpa/src/test/java/org/example/app6/services/impl/UserDAOImpl.java b/tapestry-jpa/src/test/java/org/example/app6/services/impl/UserDAOImpl.java index a29985f30..29fc711e3 100644 --- a/tapestry-jpa/src/test/java/org/example/app6/services/impl/UserDAOImpl.java +++ b/tapestry-jpa/src/test/java/org/example/app6/services/impl/UserDAOImpl.java @@ -20,7 +20,7 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.apache.tapestry5.ioc.annotations.Inject; -import org.apache.tapestry5.jpa.annotations.CommitAfter; +import org.apache.tapestry5.jpa.core.annotations.CommitAfter; import org.example.app6.AppConstants; import org.example.app6.entities.User; import org.example.app6.services.UserDAO;
