1

私はlog4jを取得しようとしています(jpa永続的であるため、ログAPIをログとして使用することもできます)jpaアペンダーを使用します。

私のpersistence.xmlは次のようになります

<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>org.apache.camel.processor.interceptor.jpa.JpaTraceEventMessage</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ContextMapAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ContextMapJsonAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ContextStackAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ContextStackJsonAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.MarkerAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.MessageAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.StackTraceElementAttributeConverter</class>
    <class>org.apache.logging.log4j.core.appender.db.jpa.converter.ThrowableAttributeConverter</class>
    <class>com.xxxxxx.lab.logging.ReportEntity</class>
    <properties>
        <property name="openjpa.jdbc.DBDictionary" value="org.apache.openjpa.jdbc.sql.HSQLDictionary"/>
        <!-- value="buildSchema" to runtime forward map the DDL SQL; value="validate" makes no changes to the database -->
        <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
        <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/>
    </properties>
</persistence-unit>

apidocs によると:

LogEvent メソッドの戻り型の多く (StackTraceElement、Message、Marker、Throwable、ThreadContext.ContextStack、Map など) は、JPA プロバイダーによって認識されません。@Convert と組み合わせて、org.apache.logging.log4j.core.appender.db.jpa.converter パッケージのコンバーターを使用して、これらの型をデータベース列に変換できます。

したがって、必要なすべてのクラスを追加しましたが、それでもスローされます:

java.lang.NoClassDefFoundError: javax/persistence/AttributeConverter
4

1 に答える 1