Maga a JPA nem teszi lehetővé a pontos adatbázis felé történő kommunikációt, csak annyit amennyit a persistence.xml fájban állíthatunk:
<persistence version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence" xsi:schemalocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="primary" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/jdbc/primary</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"></property>
<property name="hibernate.hbm2ddl.auto" value="none"></property>
<property name="hibernate.show_sql" value="false"></property>
<property name="hibernate.format_sql" value="true"></property>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"></property>
<property name="hibernate.connection.release_mode" value="auto"></property>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"></property>
</properties>
</persistence-unit>
</persistence>
Ez sok esetben nem elegendő, mert nem látszódnak a felhasznált paraméterek, visszatérő értékek és típusai, stb...
Erre nagyon nagyon jó szolgálhat a
log4jdbc. Ha a projektünket jBoss-ban definiált JNDI datasource-kkal használjuk akkor a kódunk érintettlen maradhat, nem kell hozzárakni semmi csomagot és konfigot.
Elősször is le kell szedni a
log4jdbc oldalról a jar fájlt, és bele rakni a jBoss modules közé (létrehozzuk az útvonalat és bemásoljuk a jar fájlt és létrehozzuk a module.xml fájlt):
<module name="com.googlecode.log4jdbc" xmlns="urn:jboss:module:1.1">
<resources>
<resource-root path="log4jdbc4-1.2.jar">
</resource-root></resources>
<dependencies>
<module name="org.slf4j"></module>
<module name="javax.api"></module>
<module name="javax.transaction.api"></module>
<module name="com.oracle"></module>
</dependencies>
</module>
A kiemelt sorba olyan adatbázis dependencia kell, melyet használunk. Az én esetemben ez Oracle.
Most a jBoss standalone.xml-ben kell aktiválni a log4jdbc-t:
<server xmlns="urn:jboss:domain:1.2">
<extensions>...</extensions>
<system-properties>
<property name="logback.configurationFile" value="c:/logback.xml">
<property name="log4jdbc.drivers" value="oracle.jdbc.OracleDriver">
<property name="log4jdbc.auto.load.popular.drivers" value="false">
</property></property></property></system-properties>
<management>...</management>
<profile>...
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource enabled="true" jndi-name="java:/jdbc/primary" jta="true" use-ccm="true">
<connection-url>jdbc:oracle:thin:@//192.168.1.100:1521/DB</connection-url>
<driver>oracle</driver>
</datasource>
<drivers>
<driver module="com.oracle" name="oracle">
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<xa-datasource-class>oracle.jdbc.OracleDriver</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
...
</profile>
...
</server>
<server xmlns="urn:jboss:domain:1.2">
<extensions>...</extensions>
<system-properties>
<property name="logback.configurationFile" value="c:/logback.xml">
<property name="log4jdbc.drivers" value="oracle.jdbc.OracleDriver">
<property name="log4jdbc.auto.load.popular.drivers" value="false">
</property></property></property></system-properties>
<management>...</management>
<profile>
...
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource enabled="true" jndi-name="java:/jdbc/primary" jta="true" use-ccm="true">
<connection-url>jdbc:log4jdbc:oracle:thin:@//192.168.1.100:1521/DB</connection-url>
<driver>log4jdbc</driver>
</datasource>
<drivers>
<driver module="com.oracle" name="oracle">
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<xa-datasource-class>oracle.jdbc.OracleDriver</xa-datasource-class>
</driver>
<driver module="com.googlecode.log4jdbc" name="log4jdbc">
<driver-class>net.sf.log4jdbc.DriverSpy</driver-class>
</driver>
</drivers>
</datasources>
</subsystem>
...
</profile>
...
</server>
Mostmár csak a loggolás beállítása maradt hátra. Az én esetemben logback van használva, external konfig fájból, így az applikáció teljesen érintetlen a JDBC aktiválásától:
<configuration debug="true" scan="true">
<appender class="ch.qos.logback.core.ConsoleAppender" name="STDOUT">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- log4jdbc sql & jdbc logging -->
<logger additivity="false" name="jdbc.sqlonly">
<level value="INFO">
<appender-ref ref="STDOUT">
</appender-ref></level></logger>
<logger additivity="false" name="jdbc.sqltiming">
<level value="INFO">
<appender-ref ref="STDOUT">
</appender-ref></level></logger>
<logger additivity="false" name="jdbc.audit">
<level value="INFO">
<appender-ref ref="STDOUT">
</appender-ref></level></logger>
<logger additivity="false" name="jdbc.resultset">
<level value="INFO">
<appender-ref ref="STDOUT">
</appender-ref></level></logger>
<logger additivity="false" name="jdbc.connection">
<level value="INFO">
<appender-ref ref="STDOUT">
</appender-ref></level></logger>
<logger additivity="false" name="log4jdbc.debug">
<level value="DEBUG">
<appender-ref ref="STDOUT">
</appender-ref></level></logger>
<root level="trace">
<appender-ref ref="STDOUT">
</appender-ref></root>
</configuration>
Itt egy hasonló példa
http://sfleiter.github.io/blog/2013/12/08/jboss-datasource-proxy-with-log4jdbc-log4j2/