10

プログラムでトピックとその接続ファクトリを作成できるかどうか誰かが知っていますか?現在、glassfish管理ユーティリティを使用して、トピックとその接続ファクトリを作成しています。コードで作成できない場合、glassfish / openmqにはデフォルトのトピックとconnファクトリを使用できますか?

4

1 に答える 1

18

管理者でリソースを手動で作成することだけを回避したい場合は、ファイル「glassfish-resources.xml」(GF 3.1、http://docs.oracle.com/cd/E18930_01/html/821を参照)を使用してリソースをデプロイするだけです。 -2417 / giyhh.html)。

次のようなadmin-object-resourceが必要です(トピック用):

<admin-object-resource enabled="true" jndi-name="jms/myTopic"
   object-type="user" res-adapter="jmsra" res-type="javax.jms.Topic">
  <property name="Name" value="physicalTopic"/>
</admin-object-resource>

メッセージが混同されてはならない複数のトピックを実装する場合は、トピック(ここでは「physicalTopic」)に異なる「Name」値を使用する必要があることに注意してください。

さらに、タイプjavax.jms.TopicConnectionFactoryのコネクタ接続プールを参照するコネクタリソースが必要です。

デプロイメント記述子を使用してリソースを動的に作成することを目的としない場合は、glassfish-resources.xmlが最善の方法のようです。

そのようにデプロイされたリソースはアプリケーションスコープであることに注意してください:http://docs.oracle.com/cd/E18930_01/html/821-2417/giydj.html

「glassfish-resources.xml」はGF3.xのファイルで、GF2.xの場合は「sun-resources.xml」でした。NetBeansを使用している場合、ファイルはプロジェクトビューの「サーバーリソース」フォルダにあります。注意:「サーバーリソース」のglassfish-resources.xmlは、NetBeansを使用してデプロイする場合にのみNetBeansによって使用されます。NetBeansは、これらのリソースを作成する方法を知っており、このタスクを実行します。NetBeansを使用せずにEARをGlassfishに直接デプロイする場合(実稼働環境では非常に可能性が高いと思われます)、次の場所でglassfish-resources.xmlを提供する必要があります。

  • モジュールスコープのリソースのEJBモジュールのMETA-INFまたはWARのWEB-INF
  • アプリケーション全体のリソースに対するエンタープライズアプリケーションのMETA-INFNetBeansでは、ファイルをプロジェクトビューの「構成ファイル」フォルダ(ファイルシステムではsrc / conf /)に配置することでこれを実現します。

このリソース定義は、NetBeansの[新しいメッセージ駆動型Bean]ウィザードを使用して簡単に作成できます([新規...]を選択してMBeanを追加するだけです)。ウィザードで、[プロジェクトの宛先]>[追加]を選択します。完全な3.1の例は次のようになります。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
    <admin-object-resource enabled="true" jndi-name="jms/myDestination"  res-type="javax.jms.Topic"  res-adapter="jmsra">
        <property name="Name" value="PhysicalTopic"/>
    </admin-object-resource>
    <connector-connection-pool name="jms/myDestinationFactoryPool"  connection-definition-name="javax.jms.TopicConnectionFactory"  resource-adapter-name="jmsra"/>
    <connector-resource enabled="true" jndi-name="jms/myDestinationFactory" pool-name="jms/myDestinationFactoryPool"  />
</resources>

これはMBeanアノテーションです。

@MessageDriven(mappedName = "java:app/jms/myDestination", activationConfig =
{
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
    @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
    @ActivationConfigProperty(propertyName = "clientId", propertyValue = "NewMessageBean"),
    @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "NewMessageBean")
})
public class NewMessageBean implements MessageListener
{ 
[...]

注意:mappedNameの「java:app /」は、アプリケーションスコープのリソースを使用する場合にのみ正しくなります。glassfish-resources.xmlの定義に「java:app/」を含めることができます。GFデプロイメントガイドには、「アプリケーションスコープのリソースJNDI名はjava:appまたはjava:moduleで始まります。これらのプレフィックスのいずれかがJNDI名に指定されていない場合は、追加されます」と記載されています。

「mappedName」の代わりに「name」を使用して、別のレベルの間接参照を導入することもできます。次に、(論理)名がJNDIの「物理」の場所にマップされる「application-client.xml」という名前のファイルを提供する必要があります。

于 2011-12-08T08:33:19.423 に答える