3

アプリケーションがいくつかの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ステートメントをコンソールに出力できるようにするにはどうすればよいでしょうか...?

私は以前、SpringのDriverManagerDataSourceなどの他のデータソースでP6spyを使用しました。

(Tomcatの場合)

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

4

2 に答える 2

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>
于 2013-12-20T18:10:34.447 に答える
1

Glassfish での私の経験から、次のことをお勧めします。

  • 既存の oracle (実際の) データソース定義を保持します
  • 実際のものへのプロキシとして使用される新しいもの(P6Spyのもの)を作成し、

次のように定義されます。

<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設定ファイルで)
于 2013-09-09T08:19:19.783 に答える