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);