2014-10-24 1 views
0

Я пытаюсь настроить объединение пулов в servcemix 4.4.1. Я создал объект источника данных oracle и задал такие свойства, как user, password, url. В моем smx я развернул следующий xml как службу osgi.servicemix, источник данных oracle, объединение соединений, максимальное количество соединений

Вот моя конфигурация DataSource:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> 

    <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"> 
    <property name="URL" value="jdbc:oracle:thin:@connection:url"/> 
<property name="user" value="****"/> 
<property name="password" value="*****"/> 


</bean> 

<service interface="javax.sql.DataSource" ref="dataSource"> 
<service-properties> 
<entry key="osgi.jndi.service.name" value="oracleds"/> 
</service-properties> 
</service> 
</blueprint> 

Объект DataSource создан успешно, и я могу получить объект, используя JNDI поиск в моей пачке.

Теперь я хочу применить пул соединений, для которых мне нужно объявить «максимальные соединения». Пожалуйста, предложите мне, как я могу объявить max no. соединений в приведенном выше xml

Заранее спасибо.

ответ

0

Вот пример моего blueprint.xml:

<blueprint  xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0" 
    xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0" 
    xsi:schemaLocation= 
      "http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd" 
    default-activation="eager"> 

    <cm:property-placeholder id="server.placeholder" persistent-id="test.datasource"> 
     <cm:default-properties> 
      <cm:property name="driverClassName" value="oracle.jdbc.pool.OracleDataSource" /> 
      <cm:property name="validationQuery" value="SELECT 1 FROM DUAL" /> 
      <cm:property name="defaultReadOnly" value="false" /> 
      <cm:property name="defaultAutoCommit" value="true" /> 
      <cm:property name="maxActive" value="100" /> 
      <cm:property name="whenExhaustedAction" value="2" /> 
      <cm:property name="maxWait" value="-1" /> 
      <cm:property name="maxIdle" value="8" /> 
      <cm:property name="minIdle" value="1" /> 
      <cm:property name="testOnBorrow" value="true" /> 
      <cm:property name="testOnReturn" value="true" /> 
      <cm:property name="timeBetweenEvictionRunsMillis" value="-1" /> 
      <cm:property name="numTestsPerEvictionRun" value="3" /> 
      <cm:property name="minEvictableIdleTimeMillis" value="1800000" /> 
      <cm:property name="testWhileIdle" value="false" /> 
      <cm:property name="softMinEvictableIdleTimeMillis" value="-1" /> 
      <cm:property name="lifo" value="true" /> 
     </cm:default-properties> 
    </cm:property-placeholder> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value= "${driverClassName}" /> 
     <property name="url" value="jdbc:oracle:thin:@${db.host}:${db.port}:${db.instance}" /> 
     <property name="username" value="${db.user}" /> 
     <property name="password" value="${db.password}" /> 
     <property name="maxIdle" value="1" /> 
    </bean> 

    <bean id="connectionFactory" class="org.apache.commons.dbcp.DataSourceConnectionFactory"> 
     <argument ref="dataSource" /> 
    </bean> 

    <bean id="connectionPool" class="org.apache.commons.pool.impl.GenericObjectPool" > 
     <argument><null/></argument> 
     <argument value="${maxActive}" /> 
     <argument value="${whenExhaustedAction}" /> 
     <argument value="${maxWait}" /> 
     <argument value="${maxIdle}" /> 
     <argument value="${minIdle}" /> 
     <argument value="${testOnBorrow}" /> 
     <argument value="${testOnReturn}" /> 
     <argument value="${timeBetweenEvictionRunsMillis}" /> 
     <argument value="${numTestsPerEvictionRun}" /> 
     <argument value="${minEvictableIdleTimeMillis}" /> 
     <argument value="${testWhileIdle}" /> 
     <argument value="${softMinEvictableIdleTimeMillis}" /> 
     <argument value="${lifo}" /> 
    </bean> 

    <bean id="pooledConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory" > 
     <argument ref="connectionFactory" /> 
     <argument ref="connectionPool" /> 
     <argument><null/></argument> 
     <argument value="${validationQuery}" /> 
     <argument value="${defaultReadOnly}" /> 
     <argument value="${defaultAutoCommit}" /> 
    </bean> 

    <bean id="poolingDataSource" class="org.apache.commons.dbcp.PoolingDataSource" depends-on="pooledConnectionFactory"> 
     <argument ref="connectionPool" /> 
    </bean> 

    <service interface="javax.sql.DataSource" ref="poolingDataSource"> <!--ref="oracleDataSource"--> 
     <service-properties> 
      <entry key="osgi.jndi.service.name" value="jdbc/testdb"/> 
      <entry key="datasource.name" value="jdbc/testdb" /> 
     </service-properties> 
    </service> 

</blueprint> 

Это да tasource работа хорошо. Я думаю, что атрибут «maxActive» близок к тому, что вам нужно.

1

Вы можете выбрать между двумя способами:

  • использование oracle.jdbc.pool.OracleConnectionPoolDataSource как класс источника данных
  • использование Обще-ДБХП https://gist.github.com/splatch/2d631ec09f9be0730b1e (это форк кого-то еще сутью)