2017-06-19 6 views
0

karafコンソールから動作するKaraf 4(ServiceMix 7)にデータソースを作成しました。テーブルの一覧表示、クエリの実行などが可能です。 私の問題は私のキャメルルートからそれを使用しようとするときです。私の青写真からApache CamelからKaraf 4のデータソースにアクセスする際の問題

抜粋:

jdbc:ds-create -dbName erp -dt DataSource -dn mysql -u erp -dc com.mysql.jdbc.Driver -p pre jdbc/erp 

:私のデータソースを使用して作成された

"java.lang.IllegalArgumentException: connectionFactory must be specified" 

... 
<reference filter="(osgi.jndi.service.name=jdbc/erp)" id="erpDataSource" interface="javax.sql.DataSource"/> 
... 
<to id="erpSelectQuery" uri="jdbc:erpDataSource"/> 
... 

それは私のDataSourceを見つけたが、青写真が起因して起動することはできません。私はここに敗北している

答えて

1

私はjdbcコマンドの構文を使って決して行ったことがありませんOps4J Wiki On Datasource creationのガイドに従っています。なぜなら、この方法は単なるJava開発者だけでなく簡単に変更できる簡単なテキストファイルを作成するからですトラブルシューティングを行います。

私の答えにリンク腐敗をさせないために、ここで手順を概説します。

次の命名規則org.ops4j.datasource-give_your_datasource_a_name.cfgを使用して、/ servicemixhome/etcにデータソース設定ファイル(シンプルテキストファイル)を作成します。

osgi.jdbc.driver.class = com.mysql.jdbc.Driver 
    databaseName=dhData 
    user=foo 
    url=jdbc:mysql://192.199.199.199:3306/dhData 
    password=somepassword 
    dataSourceName=myDSName 

あなたはops4j必要な機能をインストールしていることを確認してください:

feature:install pax-jdbc-mysql pax-jdbc-config 

さて、次を使用してデータソースをリスト設定ファイルで

は、適切な設定を行う鉱山の例は次のようになります構文:

[email protected]()> service:list javax.sql.DataSource 

これは、以下のリストをご覧ください。

あなたは、データソースは、次の構文でblueprint.xmlでのOSGiフィルターをusign参照することができます。この時点で
[javax.sql.DataSource] 
---------------------- 

    osgi.jdbc.driver.class = com.mysql.jdbc.Driver 
    databaseName=dhData 
    user=foo 
    url=jdbc:mysql://192.199.199.199:3306/dhData 
    password=somepassword 
    dataSourceName=myDSName 
Provided by : 
    OPS4J Pax JDBC Config (216) 

<reference filter="(&amp;(objectClass=javax.sql.DataSource)(dataSourceName=myDSName))" id="myData" interface="javax.sql.DataSource"/> 

次にあなたが行うことができます例えば、Beanのプロパティとしてこれを参照します

<bean class="foo.bar" id="ImsCbrEventsBean"> 
     <property name="dataSource" ref="myData"/> 
    </bean> 

これは、データベースへの単なる接続を作成し、実際に接続プールを作成することに注意してください。

これは、pax-jdbc-pool-dbcp2機能またはその他の接続プールをインストールすることで実行できますが、一度に1つだけ使用し、データソース構成ファイルを変更して、以下の例のような適切な情報を持ちます。

osgi.jdbc.driver.name = mysql 
    databaseName=dhData 
    user=foo 
    url=jdbc:mysql://192.199.199.199:3306/dhData 
    password=somepassword 
    dataSourceName=myDSName 
    jdbc.pool.maxTotal=32 
    jdbc.pool.blockWhenExhausted=true 
    jdbc.pool.lifo=false 
    jdbc.pool.maxIdle=24 
    jdbc.pool.maxWaitMillis=5000 
    jdbc.pool.minEvictableIdleTimeMillis=1800000 
    jdbc.pool.minIdle=16 
    jdbc.pool.numTestsPerEvictionRun=3 
    jdbc.pool.softMinEvictableIdleTimeMillis=-1 
    jdbc.pool.testOnBorrow=true 
    jdbc.pool.testOnCreate=true 
    jdbc.pool.testOnReturn=true 
    jdbc.pool.testWhileIdle=true 
    jdbc.pool.timeBetweenEvictionRunsMillis=3600000 
+0

osgi.jdbc.driver.nameとosgi.jdbc.driver.classは決して使用しないでください。これらのうちの1つだけを使用してください。 –

+0

ありがとう、 私は実際にconfigファイルを使って同じようにしました。無効なJNDI名を入力すると、別のメッセージが表示されるため、サービスを確認でき、ラクダはデータソースを見つけます。あなたのフィルタは私のものと少し違って見えますが、その構文を試してみると同じエラーが出ます。 データソースをBeanに渡すとうまくいくと思っていますが、この場合はJDBCコンポーネントを使いたいと思います。 私は青写真に直接データソースを定義しながらラクダコンポーネントをうまく使いましたが、それを避けたいと思います。 @ChristianSchneiderが合意した。 – user5188655

+0

結膜炎でのコピーと貼り付けもお勧めしません。 – Namphibian

関連する問題