Как настроить P6Spy с OracleConnectionPoolDataSource в конкретных

Мы используем механизм пула соединений 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 с другими источниками данных, такими как SpringManagerDataSource, другими источниками данных, такими как as

(В 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, в котором мы можем предоставить "com.p6spyengine.spy.P6SpyDriver" вместо "oracle.jdbc.driver.OracleDriver" и предоставить реальное имя драйвера в spy.properties. Все работало нормально.

Но с oracle.jdbc.pool.OracleConnectionPoolDataSource не существует такого свойства, называемого driverClassName, для которого предоставляется прокси-драйвер.

В этом случае, как я могу интегрировать P6Spy с ним?

Пожалуйста помоги...

Заранее спасибо, Кришна V

2 ответа

Исходя из моего опыта работы с Glassfish, я бы предложил:

  • сохранить существующее определение источника данных оракула (реального)
  • создать новый (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 файл конфигурации)

С 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>
Другие вопросы по тегам