質問

OpeneJB 3.1.3にアップグレードした後、Tomcat/OpeneJBスタートアップに次のエラーが表示されました。

ERROR - Unable to register MBean 
java.lang.IllegalStateException: javax.management.MalformedObjectNameException: Invalid character ',' in key part of property
    at org.apache.openejb.monitoring.ObjectNameBuilder.build(ObjectNameBuilder.java:59)
    at org.apache.openejb.core.mdb.MdbContainer.deploy(MdbContainer.java:169)
    at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:599)
    at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:450)
    at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:368)
    at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:280)
    at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:125)
    at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:60)
    at org.apache.openejb.OpenEJB.init(OpenEJB.java:271)
    at org.apache.openejb.OpenEJB.init(OpenEJB.java:250)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java:36)
    at org.apache.openejb.client.LocalInitialContextFactory.init(LocalInitialContextFactory.java:71)
    at org.apache.openejb.client.LocalInitialContextFactory.init(LocalInitialContextFactory.java:53)
    at org.apache.openejb.client.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:42)
    ... 
    <proprietary stack trace skipped>
    ...
Caused by: javax.management.MalformedObjectNameException: Invalid character ',' in key part of property
    at javax.management.ObjectName.construct(ObjectName.java:535)
    at javax.management.ObjectName.<init>(ObjectName.java:1403)
    at org.apache.openejb.monitoring.ObjectNameBuilder.build(ObjectNameBuilder.java:57)
    ... 70 more
INFO - Created Ejb(deployment-id=InboundXMLQueueHandlerST,InboundXMLQueueHandlerMT, ejb-name=InboundXMLQueueHandlerST,InboundXMLQueueHandlerMT, container=My MDB Container )

次のMDBがこのエラーを引き起こします。

@MessageDriven(name="InboundXMLQueueHandlerST,InboundXMLQueueHandlerMT")
public class InboundXMLQueueHandler implements MessageListener {
...

に変更した後

@MessageDriven(name="InboundXMLQueueHandlerST")
public class InboundXMLQueueHandler implements MessageListener {
...

エラーはなくなりました。

ご覧のとおり、注釈でシングルクラスとコンマセレーションのキュー名を使用して2人のリスナーを定義します。これは3.1.2で完璧に機能しましたが(少なくともそうは思えました)、現在は上記のエラーが得られます(エラーはMDBの展開を妨げないようですが、JMXモニタリングは私たちにとって重要です)。

使用の例が見つかりません @MessageDriven 複数のキュー(単一のMDBクラス、複数のコンマ区切りキュー名)を使用した注釈ももう。これは間違った方法ですか?文書化された機能ですか? JMXがMDBを登録できなくなるように、3.1.3で何が変わったのですか?

役に立ちましたか?

解決

うーん、3.1.2にJMXサポートがありませんでした。私は個人的にMDBを最大2つのキューに接続しようとしたことはありませんでした - それがうまくいきました。実際の「キューフックアップ」(JMSコネクタの標準ジョブ)を実行するのはActiveMQであり、Meta-Dataを渡すだけです。

Openejb側では、私たちがする唯一の魔法はあなたを埋めようとすることです destinationdestinationType 経由の設定 @ActivationConfigProperty あなたがそうしていないなら。設定します destination それが記入されていない場合、あなたの豆の名前に destinationTypejavax.jms.Queue それが記入されていない場合。

したがって、すべてが明示的に設定された場合、上記の豆は本質的にこのように見えます。

@MessageDriven(
    name="InboundXMLQueueHandlerST,InboundXMLQueueHandlerMT",
    activationConfig = {
        @ActivationConfigProperty(
           propertyName = "destinationType", 
           propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(
           propertyName = "destination", 
           propertyValue = "InboundXMLQueueHandlerST,InboundXMLQueueHandlerMT")})
public class InboundXMLQueueHandler implements MessageListener {
...

ActiveMQが実際に両方のキューを提供していると仮定すると、これがそれを行うActionConfigです。

おそらく試してみる最も簡単なことは、宛先名を明示的に設定し、Bean名を削除することです。

@MessageDriven(
    activationConfig = {
        @ActivationConfigProperty(
           propertyName = "destination", 
           propertyValue = "InboundXMLQueueHandlerST,InboundXMLQueueHandlerMT")})
public class InboundXMLQueueHandler implements MessageListener {
...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top