3

jndi リソースを検索して jms ブローカーに接続し、メッセージを送信する汎用プロデューサー プログラムがあります。

統合テスト用に組み込みの hornetq を設定しています。サーバーを起動するために使用するサーバーコードは次のとおりです(正常に動作します)

サーバ

        Configuration configuration = new ConfigurationImpl();
        configuration.setPersistenceEnabled(false);
        configuration.setSecurityEnabled(false);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("host", "localhost");
        map.put("port", 5445);
        configuration.getAcceptorConfigurations()
                .add(new TransportConfiguration(NettyAcceptorFactory.class.getName(), map));

        TransportConfiguration connectorConfig = new TransportConfiguration(NettyConnectorFactory.class.getName());

        configuration.getConnectorConfigurations().put("connector", connectorConfig);


        // Step 2. Create the JMS configuration
        JMSConfiguration jmsConfig = new JMSConfigurationImpl();

        // Step 3. Configure the JMS ConnectionFactory
        ArrayList<String> connectorNames = new ArrayList<String>();
        connectorNames.add("connector");
        ConnectionFactoryConfiguration cfConfig = new ConnectionFactoryConfigurationImpl("ConnectionFactory", false,  connectorNames, "/ConnectionFactory");
        jmsConfig.getConnectionFactoryConfigurations().add(cfConfig);

        // Step 4. Configure the JMS Queue
        JMSQueueConfiguration queueConfig = new JMSQueueConfigurationImpl("exampleQueue", null, false, "/queue/exampleQueue");
        jmsConfig.getQueueConfigurations().add(queueConfig);

        // Step 5. Start the JMS Server using the HornetQ core server and the JMS configuration
        EmbeddedJMS jmsServer = new EmbeddedJMS();
        jmsServer.setConfiguration(configuration);
        jmsServer.setJmsConfiguration(jmsConfig);

        jmsServer.start();
        System.out.println("Started Embedded JMS Server");

プロデューサー

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");

Context context = new InitialContext(env);

ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
Destination destination = (Destination) context.lookup("/queue/exampleQueue");

Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Producer producer = session.createProducer(destination);
connection.start();

TextMessage message = session.createTextMessage("Hello sent at " + new Date());
System.out.println("Sending message: " + message.getText());
producer.send(message);

サーバーの JNDI リソースを登録して、プロデューサがこれらのプロパティを使用して組み込みサーバーにアクセスできるようにするにはどうすればよいですか。

4

2 に答える 2

1

HornetQBootstrapServer を使用して hornetQ を開始しています

HornetQBootstrapServer hornetQ = new HornetQBootstrapServer(hornetq-beans.xml)
hornetQ.run();
.
.
.
//to stop
hornetQ.shutDown();

クラスパスに hornetq-beans.xml、hornetq-configuration.xml、hornetq-jms.xml を保持します。

hornetq-beans.xml のサンプルコンテンツ

<bean name="Naming" class="org.jnp.server.NamingBeanImpl"/>
<!-- JNDI server. Disable this if you don't want JNDI -->
<bean name="JNDIServer" class="org.jnp.server.Main">
  <property name="namingInfo">
     <inject bean="Naming"/>
  </property>
  <property name="port">1099</property>
  <property name="bindAddress">localhost</property>
  <property name="rmiPort">1098</property>
  <property name="rmiBindAddress">localhost</property>
</bean>

<!-- MBean server -->
<bean name="MBeanServer" class="javax.management.MBeanServer">
  <constructor factoryClass="java.lang.management.ManagementFactory"
               factoryMethod="getPlatformMBeanServer"/>
</bean> 

.
.
.

これは、組み込みの HornetQ に対して JNDI を有効にする方法です。

于 2013-07-03T11:43:37.070 に答える