3

私が使用しているアプリケーションは次のとおりです。

  1. ウェブロジック 10.3.3
  2. Websphere MQ 7.0
  3. Oracle 11g Express Edition (DB)

現在のプロセス フローは次のとおりです。

  1. メッセージは Weblogic によって Websphere MQ キューから読み取られ、MDB によって処理されます。
  2. MDB はメッセージを DB に保存します
  3. MDB はメッセージを別の Websphere MQ キューに書き込みます

これは XA トランザクションであるため、上記のいずれかが失敗した場合、メッセージは元のキューに返されます。

プロセスを開始するために Websphere MQ キューにメッセージを入れると、次のエラーが表示されます。

<Jun 29, 2010 11:15:15 PM CDT> <Error> <EJB> <BEA-010080> <An error occurred whi
le attempting to process a message inside a message-driven bean: com.bea.core.re
packaged.springframework.beans.factory.BeanCreationException: Dependency injecti
on failure: can't find the bean definition about class interface javax.sql.DataS
ource; nested exception is com.bea.core.repackaged.springframework.beans.factory
.NoSuchBeanDefinitionException: No unique bean of type [javax.sql.DataSource] is
 defined: No beans of type javax.sql.DataSource; owner=com.bea.core.repackaged.s
pringframework.context.support.GenericApplicationContext@3de84b8: display name [
com.bea.core.repackaged.springframework.context.support.GenericApplicationContex
t@3de84b8]; startup date [Tue Jun 29 23:14:53 CDT 2010]; parent: com.bea.core.re
packaged.springframework.context.support.GenericApplicationContext@3dd694f
Nested exception: com.bea.core.repackaged.springframework.beans.factory.NoSuchBe
anDefinitionException: No unique bean of type [javax.sql.DataSource] is defined:
 No beans of type javax.sql.DataSource; owner=com.bea.core.repackaged.springfram
ework.context.support.GenericApplicationContext@3de84b8: display name [com.bea.c
ore.repackaged.springframework.context.support.GenericApplicationContext@3de84b8
]; startup date [Tue Jun 29 23:14:53 CDT 2010]; parent: com.bea.core.repackaged.
springframework.context.support.GenericApplicationContext@3dd694f
Exception is : com.bea.core.repackaged.springframework.beans.factory.BeanCreatio
nException: Dependency injection failure: can't find the bean definition about c
lass interface javax.sql.DataSource; nested exception is com.bea.core.repackaged
.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of
type [javax.sql.DataSource] is defined: No beans of type javax.sql.DataSource; o
wner=com.bea.core.repackaged.springframework.context.support.GenericApplicationC
ontext@3de84b8: display name [com.bea.core.repackaged.springframework.context.su
pport.GenericApplicationContext@3de84b8]; startup date [Tue Jun 29 23:14:53 CDT
2010]; parent: com.bea.core.repackaged.springframework.context.support.GenericAp
plicationContext@3dd694f
        at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.app
lyInjections(Jsr250Metadata.java:244)
        at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.inj
ect(Jsr250Metadata.java:226)
        at com.bea.core.repackaged.springframework.jee.spi.EjbComponentCreatorBr
okerImpl.injection(EjbComponentCreatorBrokerImpl.java:112)
        at com.bea.core.repackaged.springframework.jee.spi.EjbComponentCreatorBr
okerImpl.getBean(EjbComponentCreatorBrokerImpl.java:70)
        at weblogic.ejb.container.injection.EjbComponentCreatorImpl.getBean(EjbC
omponentCreatorImpl.java:68)
        at weblogic.ejb.container.manager.BaseEJBManager.createNewBeanInstance(B
aseEJBManager.java:216)
        at weblogic.ejb.container.manager.BaseEJBManager.allocateBean(BaseEJBMan
ager.java:231)
        at weblogic.ejb.container.manager.MessageDrivenManager.createBean(Messag
eDrivenManager.java:288)
        at weblogic.ejb.container.pool.MessageDrivenPool.createBean(MessageDrive
nPool.java:174)
        at weblogic.ejb.container.pool.MessageDrivenPool.getBean(MessageDrivenPo
ol.java:99)
        at weblogic.ejb.container.internal.MDListener.execute(MDListener.java:43
4)
        at weblogic.ejb.container.internal.MDListener.transactionalOnMessage(MDL
istener.java:371)
        at weblogic.ejb.container.internal.NewJMSMessagePoller.processOneMessage
(NewJMSMessagePoller.java:248)
        at weblogic.ejb.container.internal.NewJMSMessagePoller.run(NewJMSMessage
Poller.java:121)
        at weblogic.ejb.container.internal.NewJMSMessagePoller.timerExpired(NewJ
MSMessagePoller.java:208)
        at weblogic.timers.internal.TimerImpl.run(TimerImpl.java:273)
        at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTunin
gWorkManagerImpl.java:528)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Caused by: com.bea.core.repackaged.springframework.beans.factory.NoSuchBeanDefin
itionException: No unique bean of type [javax.sql.DataSource] is defined: No bea
ns of type javax.sql.DataSource; owner=com.bea.core.repackaged.springframework.c
ontext.support.GenericApplicationContext@3de84b8: display name [com.bea.core.rep
ackaged.springframework.context.support.GenericApplicationContext@3de84b8]; star
tup date [Tue Jun 29 23:14:53 CDT 2010]; parent: com.bea.core.repackaged.springf
ramework.context.support.GenericApplicationContext@3dd694f
        at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.get
UniqueInstanceOfType(Jsr250Metadata.java:305)
        at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.res
olveByType(Jsr250Metadata.java:299)
        at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.res
olve(Jsr250Metadata.java:286)
        at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.app
lyInjections(Jsr250Metadata.java:238)
        at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.inj
ect(Jsr250Metadata.java:227)
        at com.bea.core.repackaged.springframework.jee.spi.EjbComponentCreatorBr
okerImpl.injection(EjbComponentCreatorBrokerImpl.java:112)
        at com.bea.core.repackaged.springframework.jee.spi.EjbComponentCreatorBr
okerImpl.getBean(EjbComponentCreatorBrokerImpl.java:74)
        ... 15 more
>
<Jun 29, 2010 11:15:15 PM CDT> <Warning> <EJB> <BEA-010065> <MessageDrivenBean t
hrew an Exception in onMessage(). The exception was:
 com.bea.core.repackaged.springframework.beans.factory.BeanCreationException: De
pendency injection failure: can't find the bean definition about class interface
 javax.sql.DataSource; nested exception is com.bea.core.repackaged.springframewo
rk.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.sq
l.DataSource] is defined: No beans of type javax.sql.DataSource; owner=com.bea.c
ore.repackaged.springframework.context.support.GenericApplicationContext@3de84b8
: display name [com.bea.core.repackaged.springframework.context.support.GenericA
pplicationContext@3de84b8]; startup date [Tue Jun 29 23:14:53 CDT 2010]; parent:
 com.bea.core.repackaged.springframework.context.support.GenericApplicationConte
xt@3dd694f.
com.bea.core.repackaged.springframework.beans.factory.BeanCreationException: Dep
endency injection failure: can't find the bean definition about class interface
javax.sql.DataSource; nested exception is com.bea.core.repackaged.springframewor
k.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.sql
.DataSource] is defined: No beans of type javax.sql.DataSource; owner=com.bea.co
re.repackaged.springframework.context.support.GenericApplicationContext@3de84b8:
 display name [com.bea.core.repackaged.springframework.context.support.GenericAp
plicationContext@3de84b8]; startup date [Tue Jun 29 23:14:53 CDT 2010]; parent:
com.bea.core.repackaged.springframework.context.support.GenericApplicationContex
t@3dd694f
        at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.app
lyInjections(Jsr250Metadata.java:244)
        at com.bea.core.repackaged.springframework.jee.inject.Jsr250Metadata.inj
ect(Jsr250Metadata.java:226)
        at com.bea.core.repackaged.springframework.jee.spi.EjbComponentCreatorBr
okerImpl.injection(EjbComponentCreatorBrokerImpl.java:112)
        at com.bea.core.repackaged.springframework.jee.spi.EjbComponentCreatorBr
okerImpl.getBean(EjbComponentCreatorBrokerImpl.java:70)
        at weblogic.ejb.container.injection.EjbComponentCreatorImpl.getBean(EjbC
omponentCreatorImpl.java:68)
        Truncated. see log file for complete stacktrace

コードでデータベースに接続する方法は次のとおりです

// Datasource declaration
@Resource(name = "database", mappedName = "datasource/oracle-11g")
private DataSource database;
...
// Save data to messages table
String sql = "insert into messages(payload) values(?)";
OracleConnection dbConn = (OracleConnection) database.getConnection();
OraclePreparedStatement insertSql = (OraclePreparedStatement)   
dbConn.prepareStatement(sql);
insertSql.setStringForClob(1, msgPayload);
insertSql.execute();

これまでにトラブルシューティングを行うために、次のことを行いました。

  1. データソースをチェックして、jndi 名が実際に「datasource/oracle-11g」であることを確認しました
  2. データソースのセットアップ中に [テスト構成] ボタンを使用してデータベースに正常に接続できました
  3. メッセージテーブルがデータベースに存在することを確認しました

データベースへの特定の JDBC 接続エラーを確認できるように、ログを有効にする方法はありますか?

4

3 に答える 3

2

Weblogic 管理コンソールで定義されたデータ ソースのターゲット管理サーバーを設定していない可能性があります。適切に設定すると、このエラーは表示されません。

于 2015-04-03T19:20:03.590 に答える
1

構成に問題があります。そのことを伝えるメッセージは次のとおりです。

Caused by: com.bea.core.repackaged.springframework.beans.factory.NoSuchBeanDefin
itionException: No unique bean of type [javax.sql.DataSource] is defined: No bea
ns of type javax.sql.DataSource

DataSource がないか、正しく構成されていません。

于 2010-07-01T01:01:51.690 に答える
0

DataSource投稿されたトレースから、注入に失敗したため、MDB がデータベースに書き込めないようです。

No unique bean of type [javax.sql.DataSource] is defined

どこかで衝突している。より正確な回答を得るには、もっと詳しく教えていただく必要があると思います。

更新:とプロパティ (この場合) に同じnameものを使用しても問題が発生しないのではないかと思います。@ResourceDataSourcedatabase

したがって、代わりに:

// Datasource declaration
@Resource(name = "database", mappedName = "datasource/oracle-11g")
private DataSource database;

これを試していただけますか (datasource/oracle-11gがグローバル JNDI 名であると仮定します):

// Datasource declaration
@Resource(mappedName="datasource/oracle-11g") 
private DataSource database;

以下も参照してください。

于 2010-07-01T01:02:43.067 に答える