忍者ブログ

Noracorn Try And Error Programサバサバと働くITエンジニア。忘れやすい頭からサラサラと流れ落ちる情報を、書き留めるブログです。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

動的トピック作成JBoss4.3

dynamic topic create

JBOSSのMBeanから直接トピックを作成する。
MBeanの一覧を見るには、jmx-consoleを使う。
JBOSS4.3で動作確認した。

package hoge;

import java.io.IOException;
import java.util.Properties;

import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Receiver
 */
public class CreateTopicServlet extends HttpServlet{

    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Receiver() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try{
            Properties env = new Properties();
            env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
            env.put("java.naming.provider.url", "localhost:1099");
            env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
            env.setProperty(Context.SECURITY_PRINCIPAL, "admin");
            env.setProperty(Context.SECURITY_CREDENTIALS, "admin");
            InitialContext context = new InitialContext(env);

            MBeanServerConnection mBeanServer
                = (MBeanServerConnection)context.lookup("jmx/invoker/RMIAdaptor");
            ObjectName serverObjectName = new ObjectName("jboss.messaging:service=ServerPeer");

            String topicName = "newTopic";

            mBeanServer.invoke(serverObjectName, "deployTopic",
                    new Object[] {topicName, "topic/" + topicName},
                    new String[] {"java.lang.String", "java.lang.String"});
        } catch (Exception ex){
            ex.printStackTrace();
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

拍手[0回]

PR

動的トピック作成JBoss5.1

dynamic topic create

JBOSSのMBeanから直接トピックを作成する。
MBeanの一覧を見るには、jmx-consoleを使う。
JBOSS5.1で動作確認した。

package hoge;

import java.io.IOException;

import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Receiver
 */
public class CreateTopicServlet extends HttpServlet{

    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Receiver() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try{
            InitialContext context = new InitialContext();
            MBeanServerConnection mBeanServer
                = (MBeanServerConnection)context.lookup("jmx/invoker/RMIAdaptor");
            ObjectName serverObjectName = new ObjectName("jboss.messaging:service=ServerPeer");

            String topicName = "newTopic";

            mBeanServer.invoke(serverObjectName, "deployTopic",
                    new Object[] {topicName, "topic/" + topicName},
                    new String[] {"java.lang.String", "java.lang.String"});
        } catch (Exception ex){
            ex.printStackTrace();
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

拍手[0回]

基本的なJMS通信

JMSの簡単なサンプルをJBOSSを使って作成した。(何故かサーブレット)

設定ファイル
JBoss4.3と5.1の設定ファイル配置場所
jboss-eap-4.3\jboss-as\server\XXX\deploy\jboss-messaging.sar
jboss-5.1.0.GA\server\default\deploy\messaging
上記に「適当な名前.xml」ファイルを配置

XXX.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--
     Messaging Example Destinations
 -->

<server>

   <mbean code="org.jboss.jms.server.destination.TopicService"
      name="jboss.messaging.destination:service=Topic,name=sampleTopic"
      xmbean-dd="xmdesc/Topic-xmbean.xml">
      <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
      <depends>jboss.messaging:service=PostOffice</depends>
      <attribute name="SecurityConfig">
         <security>
            <role name="guest" read="true" write="true"/>
            <role name="publisher" read="true" write="true" create="false"/>
            <role name="noacc" read="false" write="false" create="false"/>
         </security>
      </attribute>
   </mbean>
  
</server>

受信側

package hoge;

import java.io.IOException;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Receiver
 */
public class Receiver extends HttpServlet
    implements MessageListener{

    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Receiver() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try{
            InitialContext context = new InitialContext();
            TopicConnectionFactory tcf =
                (TopicConnectionFactory)context.lookup("ConnectionFactory");
            TopicConnection con = tcf.createTopicConnection();
            Topic sampleTopic = (Topic)context.lookup("topic/sampleTopic");
            TopicSession session = con.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);

            con.start();

            // 通常の購読予約
            TopicSubscriber subscriber = session.createSubscriber(sampleTopic);
            subscriber.setMessageListener(this);
        } catch (Exception ex){
            ex.printStackTrace();
        }
    }

    @Override
    public void onMessage(Message msg) {
        TextMessage txtMessage = (TextMessage)msg;
        try {
            System.out.println("メッセージ受信:" + txtMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}


送信側

package hoge;

import java.io.IOException;

import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Sender
 */
public class Sender extends HttpServlet{

    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Sender() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try{
            InitialContext context = new InitialContext();
            TopicConnectionFactory tcf =
                (TopicConnectionFactory)context.lookup("ConnectionFactory");
            TopicConnection con = tcf.createTopicConnection();
            Topic sampleTopic = (Topic)context.lookup("topic/sampleTopic");
            TopicSession session = con.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);

            con.start();

            // 通常のPublish
            TopicPublisher publisher = session.createPublisher(sampleTopic);
            TextMessage msg = session.createTextMessage();
            msg.setText("publish!!!!!!!!!");
            publisher.publish(msg);
        } catch (Exception ex){
            ex.printStackTrace();
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}


拍手[0回]

| HOME |