我们在项目中使用Oracle连接池机制,因为我们的应用程序使用了一些oracle特定功能。
jetty.xml中数据源的配置如下:
<Call name="addService">
<Arg>
<New class="org.mortbay.jetty.plus.DefaultDataSourceService">
<Set name="Name">DataSourceService</Set>
<Call name="addDataSource">
<Arg>app_ds</Arg><!--java:comp/env-->
<Arg>
<New class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<Set name="description">xxxx</Set>
<Set name="user">xxx</Set>
<Set name="password">xxxx</Set>
<Set name="loginTimeout">xxx</Set>
<Set name="URL">jdbc:oracle:thin:@localhost:1521:xxx</Set>
</New>
</Arg>
</Call>
<Call name="start"/>
</New>
现在我们如何将这个数据源与P6Spy集成,以便P6Spy可以将所有SQL语句打印到控制台上......?
我之前使用P6spy和其他数据源一样,比如spring的DriverManagerDataSource,其他数据源如
Resource name="jdbc/test" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@xxx"
username="xxx" password="xxx" maxActive="65" maxIdle="10"
maxWait="-1" removeAbandoned="true"/>
...等。
所有这些数据源都将driverClassName作为参数,我们可以在“oracle.jdbc.driver.OracleDriver”的位置提供“com.p6spyengine.spy.P6SpyDriver”,并在spy.properties中提供真实的驱动程序名称。一切正常。
但是使用oracle.jdbc.pool.OracleConnectionPoolDataSource,没有名为driverClassName的属性来提供代理驱动程序。
在这种情况下,我如何将P6Spy与它集成?
请帮忙......
先谢谢, 克里希纳V
答案 0 :(得分:1)
根据我对Glassfish的经验,我建议:
定义如下:
<Call name="addService">
<Arg>
<New class="org.mortbay.jetty.plus.DefaultDataSourceService">
<Set name="Name">DataSourceService</Set>
<Call name="addDataSource">
<Arg>p6spy_ds</Arg><!--java:comp/env -->
<Arg>
<New class="com.p6spy.engine.spy.P6DataSource">
<!-- properties would be irrelevant here -->
<Set name="description">xxxx</Set>
<Set name="user">xxx</Set>
<Set name="password">xxxx</Set>
<Set name="loginTimeout">xxx</Set>
<Set name="URL">jdbc:oracle:thin:@localhost:1521:xxx</Set>
</New>
</Arg>
</Call>
<Call name="start" />
</New>
spy.properties
文件中的真实文件使用:
realdatasource=jdbc/app_ds # assuming that app_ds is your real datasource
proxy_ds
以确保使用它(如果引用会花费你太多,你总是可以调用代理数据源与原始数据源相同并重命名原始的+在spy.properties
配置文件中引用新名称)答案 1 :(得分:1)
使用Jetty,添加P6Spy实际上更容易一些。 P6Spy有一个P6DataSource,它通过构造函数参数接受另一个数据源。这是迄今为止设置P6Spy的最简单方法。
<Call name="addService">
<Arg>
<New class="org.mortbay.jetty.plus.DefaultDataSourceService">
<Set name="Name">DataSourceService</Set>
<Call name="addDataSource">
<Arg>app_ds</Arg><!--java:comp/env-->
<Arg>
<New class="com.p6spy.engine.spy.P6DataSource">
<Arg>
<New class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
<Set name="description">xxxx</Set>
<Set name="user">xxx</Set>
<Set name="password">xxxx</Set>
<Set name="loginTimeout">xxx</Set>
<Set name="URL">jdbc:oracle:thin:@localhost:1521:xxx</Set>
</New>
</Arg>
</New>
</Arg>
</Call>
<Call name="start"/>
</New>