- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法理解 EJBTransactionRolledbackException。
我有实体:
@Entity
public class MyEntity {
@Id
@GeneratedValue
private Long id;
@Size(max=5)
private String name;
//...
}
存储库是 SLSB,因为易于 CMT:
@Stateless
public class ExampleRepository {
@PersistenceContext
private EntityManager em;
public void add(MyEntity me) {
em.persist(me);
}
}
现在,当我模拟 ConstraintViolation(名称太长)时,我已经测试了 Servlet。
@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
@Inject
private ExampleRepository repo;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
MyEntity me = new MyEntity();
me.setName("TooLongName");
try {
repo.add(me);
} catch(EJBTransactionRolledbackException e) {
System.out.println("Exception caught");
}
}
}
我知道在这种情况下,EJB 容器将包装 ConstraintViolationException,因此我改为捕获 EJBTransactionRolledbackException。问题是,在控制台中,我可以看到来自 catch block 的消息(“异常捕获”),但在此之前生成了大量异常日志( link )。我不太明白发生了什么 - 这个异常是否被捕获?在如此简单的场景中如何防止控制台中出现所有这些错误消息?
最佳答案
请看这个解释:A clear explanation of system exception vs application exception
您必须了解,处理异常和处理事务是同时发生的两件不同的事情。 系统异常无条件触发事务回滚。当您看到 ConstraintViolationException
(这是一个系统异常,因为它扩展了 RuntimeException
)时,它不仅仅是包装和重新抛出。在此过程中发生了一件坏事 - 您的交易已中止。
因此,回答第一个问题,如果异常 (ConstraintViolationException
) 被捕获 - 是的,它被容器捕获。事务被中止,并抛出一个新的异常来通知应用程序代码。
您可以禁止记录这些消息,但这样您就不会知道数据持久性失败。
关于java - 捕获 EJBTransactionRolledbackException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35212060/
我发现在我们的实际环境中经常发生以下异常: 2013-01-08 00:09:45,886 ERROR [org.jboss.aspects.tx.TxPolicy] (Thread-70534 (H
我无法理解 EJBTransactionRolledbackException。 我有实体: @Entity public class MyEntity { @Id @Generate
我的设置: 我有一个 EJB bean(部署在 JBoss 6.4 的耳朵中),其方法可以计算一些值并将其存储在数据库中。该方法在新事务中启动。它看起来像这样: @TransactionAttribu
我正在尝试使用数据库中的凭据登录。到目前为止,我刚刚收到 EJBTransactionRolledbackException。堆栈跟踪非常巨大,到目前为止我还无法在网上找到与我的具体问题相关的任何内容
我正在尝试从 JBoss 5.1 迁移到 JBoss 7.1.1。我使用 @EJB 注释访问我的 SessionBeans,但有些方法失败了(其中大部分都有效)。这是导致应用程序崩溃的代码片段之一:
在我的 Web 应用程序中,我在 Apache Tomcat (TomEE)/7.0.37 服务器上使用 OpenJPA。 我的实体 User.class: @Entity @Table(name =
应用程序托管在 JBoss6(版本 6.0.0.Final)中。 在生产环境中,我有时会看到以下错误: 2012-10-01 17:59:00,290 ERROR [org.jboss.webserv
我正在使用 Java 1.6.0_23 和 Glassfish 3.1.1。我有两个 Singleton EJB。一种是使用 TimerService 来触发 @Timeout 函数。在@Timeou
我正在尝试通过约束验证来持久化实体,当调用 persist - 抛出约束并且调用者得到 EjbTransactionRolledbackException...所以我尝试显式调用验证并抛出 Const
问题是:EJB 抛出这个异常(来自 glassfish 日志): SEVERE: Attempting to confirm previously confirmed login using conf
我是一名优秀的程序员,十分优秀!