【问题标题】:Eclipse & TomEE: no JPA loggingEclipse 和 TomEE:没有 JPA 日志记录
【发布时间】:2014-11-07 12:57:03
【问题描述】:

我正在使用 Eclipse 和 TomEE 1.7.1。

如果我对 (Open)JPA 的异常日志记录有疑问: 错误不会记录到控制台或日志文件中。

例如:

entityManager.createQuery("THIS IS NOT SQL");

如果我在我的 WebApp 中运行它,它不会在控制台中显示任何内容。 但是:如果我设置断点并手动执行它(通过 Inspect Cntrl+Shift+I),异常会显示在控制台中。

WTF 正在进行中???


编辑:

我做了一个只有三个文件的测试项目,将它复制到Tomee-Webapps-Folder 直接启动Tomee。结果相同:在控制台中看不到任何内容,也没有生成日志文件。

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="hprex">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>


        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mytest"/>
            <property name="javax.persistence.jdbc.user" value="user"/>
            <property name="javax.persistence.jdbc.password" value="test"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>

<!--             <property name="openjpa.Log" value="DefaultLevel=TRACE, Runtime=TRACE, Tool=INFO, SQL=TRACE"/>                         -->
<!--             <property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true"/> -->
        </properties>
    </persistence-unit>
</persistence>

test.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:c="http://java.sun.com/jsp/jstl/core">

<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</h:head>
<h:body>
<h:form>
<h:commandButton action="#{loginBean.login}"/>
</h:form>
</h:body>
</html>

LoginBean.java

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;


@ManagedBean
@SessionScoped
public class LoginBean {

    @PersistenceContext(unitName="mytest")
    private EntityManager em;


    public String login() {
        Query query = em.createQuery("This is not SQL");
        query.getResultList();
        return "test";
    }

}

【问题讨论】:

    标签: eclipse logging openjpa apache-tomee


    【解决方案1】:

    我不相信这条路径会导致 JPA 提供程序记录任何内容。当 OpenJPA 无法创建该查询时,它将向您的应用程序抛出异常。

    【讨论】:

    • 你是对的。这将抛出一个 ArgumentException,它是一个 RuntimeException。所以我想,我必须记录 RuntimeExceptions,但是如何记录呢?为什么默认情况下不记录?目前我在那个异常中运行,但在控制台和日志文件中都没有关于它的信息。我想,我误解了 TomEE 中记录/异常处理的一些基本概念。
    • 您可能应该捕获所有 PersistenceExceptions 并适当处理。即:记录消息,或将其转储到 SystemOut/Err。
    • 是否有一种简单的方法可以捕获所有异常?还是我必须在每个查询上包装一个 try/catch 块?
    • 我通常不希望在运行时遇到异常。请务必测试您的查询,它们应该在生产中成功。
    【解决方案2】:

    您的设置/配置是什么?默认情况下会记录异常。您可以检查:catalina.out、catalina*.log 和 localhost*.log,具体取决于您对默认位置的配置(如果您使用 log4j、slf4j...确保它被记录在您身边)。

    【讨论】:

    • 我没有做任何配置,我只是使用普通的 Tomee-config。我在我的问题中添加了一些代码。
    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2021-05-11
    • 2014-06-19
    相关资源
    最近更新 更多