This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new 0efe0e7acf CAUSEWAY-3075: improves exception translation
0efe0e7acf is described below

commit 0efe0e7acfaf633285987354fc67f9818744ff09
Author: andi-huber <[email protected]>
AuthorDate: Thu Apr 13 17:49:57 2023 +0200

    CAUSEWAY-3075: improves exception translation
    
    - also deduplicates demo error showcase
---
 .../transaction/TransactionServiceSpring.java      |  2 +-
 .../java/demoapp/dom/featured/FeaturedMenu.java    |  9 -------
 .../src/main/java/demoapp/dom/menubars.layout.xml  |  4 ----
 .../ErrorReportingServiceDemoImplementation.java   |  5 +++-
 .../ErrorReportingServiceDemoVm.java               |  8 ++++---
 .../CausewayModulePersistenceJpaEclipselink.java   | 28 +++++++++++++---------
 6 files changed, 27 insertions(+), 29 deletions(-)

diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
index c01151740a..b0ba590ea4 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/transaction/TransactionServiceSpring.java
@@ -308,7 +308,7 @@ implements
         if(ex instanceof RuntimeException) {
 
             val translatedEx = persistenceExceptionTranslators.stream()
-            //.peek(translator->System.out.printf("%s", 
translator.getClass().getName()))
+            .peek(translator->System.out.printf("%s%n", 
translator.getClass().getName()))
             
.map(translator->translator.translateExceptionIfPossible((RuntimeException)ex))
             .filter(_NullSafe::isPresent)
             .findFirst()
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/featured/FeaturedMenu.java 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/FeaturedMenu.java
index 9cf9643e41..806c81a13e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/featured/FeaturedMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/featured/FeaturedMenu.java
@@ -32,7 +32,6 @@ import org.apache.causeway.applib.annotation.NatureOfService;
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
 import org.apache.causeway.applib.annotation.SemanticsOf;
 import org.apache.causeway.applib.services.factory.FactoryService;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
 
 import demoapp.dom.domain.progmodel.actions.assoc.assoc.DemoItem;
 import demoapp.dom.featured.customui.geocoding.GeoapifyClient;
@@ -53,14 +52,6 @@ public class FeaturedMenu {
 
     final FactoryService factoryService;
 
-    @Action(semantics = SemanticsOf.SAFE)
-    @ActionLayout(
-            cssClassFa="fa-skull-crossbones",
-            describedAs = "Throws an unrecoverable error for demonstration 
purposes")
-    public Object errorPage(){
-        throw _Exceptions.unrecoverable("Error for demonstration purposes!");
-    }
-
 //tag::whereInTheWorldAction[]
     @Inject
     private GeoapifyClient geoapifyClient;
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml 
b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
index d6c2426407..fc6f55b071 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
@@ -276,10 +276,6 @@ For latest we use: 
https://raw.githubusercontent.com/apache/causeway/master/anto
 
         <mb3:menu>
             <mb3:named>Featured</mb3:named>
-            <mb3:section>
-                <mb3:named>Error</mb3:named>
-                <mb3:serviceAction objectType="demo.FeaturedMenu" 
id="errorPage" />
-            </mb3:section>
             <mb3:section>
                 <mb3:named>Layout</mb3:named>
                 <mb3:serviceAction objectType="demo.FeaturedMenu" 
id="toolTips" />
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoImplementation.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoImplementation.java
index 4f04d4f5e9..efaa0a19df 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoImplementation.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoImplementation.java
@@ -21,6 +21,7 @@ package demoapp.dom.services.core.errorreportingservice;
 import javax.inject.Named;
 
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
 import org.springframework.stereotype.Service;
 
 import org.apache.causeway.applib.services.error.ErrorDetails;
@@ -37,7 +38,9 @@ import lombok.val;
 public class ErrorReportingServiceDemoImplementation implements 
ErrorReportingService {
 
     @Override
-    public Ticket reportError(ErrorDetails errorDetails) {
+    public Ticket reportError(final ErrorDetails errorDetails) {
+
+        LocalContainerEntityManagerFactoryBean x;
 
         val reference = "#0";
         val userMessage = errorDetails.getMainMessage();
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoVm.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoVm.java
index 3672a6d651..2789be054c 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoVm.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoVm.java
@@ -41,13 +41,15 @@ import 
demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 public class ErrorReportingServiceDemoVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
-        return "Error Reporting Service demo";
+        return "Error Reporting Service Demo";
     }
 
     @Action
-    @ActionLayout(cssClassFa="fa-bolt")
+    @ActionLayout(
+            cssClassFa="fa-skull-crossbones",
+            describedAs = "Throws an unrecoverable error for demonstration 
purposes.")
     public Object triggerAnError(){
-        throw new IllegalArgumentException("This is a demo Exception.");
+        throw new IllegalArgumentException("Error for demonstration 
purposes!");
     }
 
 }
diff --git 
a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
 
b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
index f9397ff3ab..ec83daf2e3 100644
--- 
a/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
+++ 
b/persistence/jpa/eclipselink/src/main/java/org/apache/causeway/persistence/jpa/eclipselink/CausewayModulePersistenceJpaEclipselink.java
@@ -71,10 +71,10 @@ public class CausewayModulePersistenceJpaEclipselink 
extends JpaBaseConfiguratio
     @Inject private ElSettings elSettings;
 
     protected CausewayModulePersistenceJpaEclipselink(
-            CausewayConfiguration causewayConfiguration,
-            DataSource dataSource,
-            JpaProperties properties,
-            ObjectProvider<JtaTransactionManager> jtaTransactionManager) {
+            final CausewayConfiguration causewayConfiguration,
+            final DataSource dataSource,
+            final JpaProperties properties,
+            final ObjectProvider<JtaTransactionManager> jtaTransactionManager) 
{
 
         super(
                 autoCreateSchemas(dataSource, causewayConfiguration),
@@ -132,8 +132,8 @@ public class CausewayModulePersistenceJpaEclipselink 
extends JpaBaseConfiguratio
      * integrates with settings from causeway.persistence.schema.*
      */
     protected static JpaProperties addAdditionalOrmFiles(
-            JpaProperties properties,
-            CausewayConfiguration causewayConfiguration) {
+            final JpaProperties properties,
+            final CausewayConfiguration causewayConfiguration) {
 
         val persistenceSchemaConf = 
causewayConfiguration.getPersistence().getSchema();
 
@@ -158,7 +158,7 @@ public class CausewayModulePersistenceJpaEclipselink 
extends JpaBaseConfiguratio
         return new EclipseLinkJpaDialect() {
 
             @Override
-            public DataAccessException 
translateExceptionIfPossible(RuntimeException ex) {
+            public DataAccessException translateExceptionIfPossible(final 
RuntimeException ex) {
 
                 if(ex instanceof DataAccessException) {
                     return (DataAccessException)ex; // has already been 
translated to Spring's hierarchy
@@ -181,8 +181,14 @@ public class CausewayModulePersistenceJpaEclipselink 
extends JpaBaseConfiguratio
 
                 }
 
-                // (null-able) converts javax.persistence exceptions to 
Spring's hierarchy
-                val translatedEx = super.translateExceptionIfPossible(ex);
+                /* (null-able) converts javax.persistence exceptions to 
Spring's hierarchy
+                 * However, don't let
+                 * 
org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(RuntimeException)
+                 * translate those 2 generic ones ... */
+                val translatedEx = (ex instanceof IllegalStateException
+                        || ex instanceof IllegalArgumentException)
+                        ? null
+                        : super.translateExceptionIfPossible(ex);
 
                 if((translatedEx==null
                         // JpaSystemException is just a generic fallback, try 
to be smarter
@@ -222,7 +228,7 @@ public class CausewayModulePersistenceJpaEclipselink 
extends JpaBaseConfiguratio
              * @param ex the JDOException, containing a SQLException
              * @return the SQL String, or {@code null} if none found
              */
-            private String extractSqlStringFromException(Throwable ex) {
+            private String extractSqlStringFromException(final Throwable ex) {
                 return null;
             }
 
@@ -244,7 +250,7 @@ public class CausewayModulePersistenceJpaEclipselink 
extends JpaBaseConfiguratio
      * @see org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator
      * @see org.springframework.jdbc.support.SQLStateSQLExceptionTranslator
      */
-    private static SQLExceptionTranslator newJdbcExceptionTranslator(Object 
connectionFactory) {
+    private static SQLExceptionTranslator newJdbcExceptionTranslator(final 
Object connectionFactory) {
         // Check for PersistenceManagerFactory's DataSource.
         if (connectionFactory instanceof DataSource) {
             return new SQLErrorCodeSQLExceptionTranslator((DataSource) 
connectionFactory);

Reply via email to