JBossTools实践系列:JBossESB服务开发入门

2008年6月21日 | 19:46分类:JBossTools | 标签: | 浏览:1,144
转载文章请注明:转载自JBossWeek.com [http://www.jbossweek.com]

环境:JBoss 4.2.2GA + JBossESB 4.3GA + JBossTools 2.1.1

(一) 建立JBossESB用户库

1、 JBossTools中,选择菜单“Windows->Preferences”;

2、 在打开的“Preferences”对话框中,选择“Java->Build Path->User Libraries”;

3、 在右边的窗格中,选择“New”新建一个名为JBossESB的用户库;

4、 选中JBossESB用户库,选择“Add jars”将JBoss部署目录中如下子目录里的jar包加入到JBossESB用户库:

jbossesb.sar

jbossesb.esb

jbpm.esb

jbrules.esb

slsb.esb

smookes.esb

soap.esb

spring.esb

5、 选择“OK”,结束创建JBossESB用户库。

(二) 建立JBossESB项目

1、 JBossTools中,选择菜单“File->New->Project…”;

2、 在打开的“Select a wizard”对话框中,选择“JavaEE->Utility Project”,点击“Next”继续;

3、 在打开的“Utility Module”对话框中,输入如下信息:

Project NameHelloESB

Target RuntimeJBoss 4.2 Runtime

ConfigurationDefault Configuration for JBoss 4.2 Runtime

点击“Finish”结束创建项目;

4、 选中HelloESB项目,右键单击,在弹出的上下文菜单中选择“Build Path->Configure Build Path…”;

5、 在弹出的属性对话框中,选择“Add Library…”;

6、 在弹出的“Add Library”对话框中,选择“User Library”,点击“Next”继续;

7、 在弹出的“User Library”对话框中,选中上面创建的“JBossESB”用户库,单击“Finish”回到属性对话框;

8、 单击“OK”,结束。

(三) 编写Action

1、 JBossTools中,选中HelloESB项目,右键单击,在弹出的上下文菜单中选择“New->Class”;

2、 在弹出的“Java Class”对话框中,输入如下信息:

Packagedemo

NameMyJMSListenerAction

SuperClassorg.jboss.soa.esb.actions.AbstractActionLifecycle

单击“Finish”,结束创建MyJMSListenerAction

3、 MyJMSListenerAction.java文件中,创建一个sayHello函数,最终代码如下:

package demo;

import org.jboss.soa.esb.actions.AbstractActionLifecycle;

import org.jboss.soa.esb.helpers.ConfigTree;

import org.jboss.soa.esb.message.Message;

public class MyJMSListenerAction extends AbstractActionLifecycle {

protected ConfigTree _config;

public MyJMSListenerAction(ConfigTree config) {

_config = config;

}

public void sayHello(Message msg) {

System.out.println(”hello ” + msg.getBody().get());

}

}

(四) 建立ESB配置文件

1、 JBossTools中,选中HelloESB项目中的目录“src->META-INF”,右键单击,在弹出的上下文菜单中选择“New->Other…”;

2、 在弹出的“Select a wizard”对话框中,选择“ESB->ESB File”,选择“Next”继续;

3、 在弹出的“ESB File”对话框中输入如下信息:

Namejboss-esb

单击“Finish”结束创建

(五) 配置JMS Providers

1、 双击打开jboss-esb.xml文件,在“JBoss ESB Editor”中选中“Providers”,在右边窗格中选择“Add”,在弹出的菜单中选择“JMS Provider”;

2、 在弹出的“ESB JMS Provider”对话框中,输入如下信息:

NameJBossMQ

Connection FactoryConnectionFactory

单击“Next”继续;

3、 在弹出的“ESB JMS Bus”对话框中输入如下信息:

IDhelloworld_gateway_channel

单击“Finish”结束创建,

4、 选中“Providers->JBossMQ-> helloworld_gateway_channel->Filter”,在右边的窗格中输入:

Destination Namequeue/helloworld_request_gateway

5、 选中“JBossMQ”再添加一个IDhelloworld_esb_channelEJB JMS Bus

6、 选中“Providers->JBossMQ-> helloworld_esb_channel->Filter”,在右边的窗格中输入:

Destination Namequeue/helloworld_request_esb

(六) 配置Services

1、 在“JBoss ESB Editor”中选中“Services”,在右边窗格中选择“Add”,

2、 在弹出的对话框中输入如下信息:

NameHelloWorld

CategoryHelloWorld

Descriptiona simple listener to say hello

选择Finish结束;

3、 选中“Services->HelloWorld->Listeners”,在右边窗格中选择“Add”,在出现的菜单中选择“JMS Listener”;

4、 在弹出的对话框中输入如下信息:

Namehelloworld_jms_gateway

Channel ID Refhelloworld_gateway_channel

选择“Finish”结束

5、 在右边的属性窗格中输入如下信息:

MaxThreads1

Is Gatewaytrue

6、 重复3~5再添加一个JMS Listener

Namehelloworld_jms_esb

Channel ID Refhelloworld_esb_channel

7、 选中“Services->HelloWorld->Actions”,在右边窗格中选择“Add”;

8、 在出现的对话框中输入如下信息:

NameDemoListener

Classdemo. MyJMSListenerAction /* 对应于前面创建的java */

ProcesssayHello /* 对应于前面创建java类的方法 */

选择Finish结束

(七) 建立JMS配置文件

JBossTools中,选中src目录,新建一个名为helloworld-queue-service.xml文件,内容如下:

<?xml version=“1.0″ encoding=“UTF-8″?>

<server>

<mbean code=“org.jboss.mq.server.jmx.Queue”

name=“jbossweek.esb.helloworld:service=Queue,name=helloworld_request_gateway”>

<depends optional-attribute-name=“DestinationManager”>

jboss.mq:service=DestinationManager</depends>

</mbean>

<mbean code=“org.jboss.mq.server.jmx.Queue”

name=“jbossweek.esb.helloworld:service=Queue,name=helloworld_request_esb”>

<depends optional-attribute-name=“DestinationManager”>

jboss.mq:service=DestinationManager</depends>

</mbean>

</server>

注:该文件创建jbossesb配置文件指定的JMS 消息队列。

(八) 建立Deployment.xml

JBossTools中,选中“src->META-INF”目录,新建一个名为deployment.xml文件,内容如下:

<?xml version=“1.0″ encoding=“UTF-8″?>

<jbossesb-deployment>

<depends>jbossweek.esb.helloworld:service=Queue,name=helloworld_request_gateway</depends>

<depends>jbossweek.esb.helloworld:service=Queue,name=helloworld_request_esb</depends>

</jbossesb-deployment>

(九) 打包与部署

1、 JBossTools中,选择菜单“Window->Show view->Other->JBossTools->Project archives”;

2、 在“Project archives”视图中,创建一个名为helloworld.esb类型为JARarchives

3、 选中刚才创建的helloworld.esb,新建一个includes为“*/”的fileset;右键单击,在出现的上下文菜单中选择“Build archive”创建helloworld.esb包;

4、 JBossTools中,选择“Servers”视图,将helloworld.esb部署到JBoss服务器上;启动JBoss,打开浏览器访问http://localhost:8080/jbossesb。如果成功部署,就会看到:

clip_image002

(十) 测试

注:这里的测试通过往JMS消息队列里发请求来测试

1、 JBossTools中,新建一个test包下的TestESB.java文件,其代码如下:

package test;

import java.util.Hashtable;

import javax.jms.JMSException;

import javax.jms.ObjectMessage;

import javax.jms.Queue;

import javax.jms.QueueConnection;

import javax.jms.QueueConnectionFactory;

import javax.jms.QueueSender;

import javax.jms.QueueSession;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

public class TestESB {

QueueConnection conn;

QueueSession session;

Queue que;

@SuppressWarnings(”unchecked”)

public void setupConnection() throws JMSException, NamingException

{

Hashtable properties = new Hashtable();

properties.put(Context.INITIAL_CONTEXT_FACTORY,

“org.jnp.interfaces.NamingContextFactory”);

properties.put(Context.URL_PKG_PREFIXES,

“org.jboss.naming:org.jnp.interfaces”);

properties.put(Context.PROVIDER_URL, “jnp://127.0.0.1:1099″);

InitialContext iniCtx = new InitialContext(properties);

Object tmp = iniCtx.lookup(”ConnectionFactory”);

QueueConnectionFactory qcf = (QueueConnectionFactory) tmp;

conn = qcf.createQueueConnection();

que = (Queue) iniCtx.lookup(”queue/helloworld_request_gateway”);

session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);

conn.start();

System.out.println(”Connection Started”);

}

public void stop() throws JMSException

{

conn.stop();

session.close();

conn.close();

}

public void sendAMessage(String msg) throws JMSException {

QueueSender send = session.createSender(que);

ObjectMessage tm = session.createObjectMessage(msg);

send.send(tm);

send.close();

}

public static void main(String args[]) throws Exception

{

TestESB sm = new TestESB();

sm.setupConnection();

sm.sendAMessage(” jbossweek.com! “);

sm.stop();

}

}

2、 右键单击TestESB.java文件,以java应用程序的方式运行,就会在控制台看到:

10:41:02,281 INFO [STDOUT] hello jbossweek.com!

恭喜您,第一个JBossESB服务开发成功!

相关文章:

  1. 4条评论 关于 “JBossTools实践系列:JBossESB服务开发入门”

  2. blackiron 发表于2008-10-15

    在(九) 打包与部署中第4步中,能不能说得详细一些?我在JBoss Tools 工具Project Archives 视图中,在HelloWorld.ESB的包上右键,菜单中publish to Server,Archives Publish Setting 对话框Server列表中是空的!

    我在Project Explorer视图中,HelloWorld.esb包上右键菜单Deploy to Server,弹出对话框告诉我“There are no servers that support deploying single files”

    而在JBoss Tools工具的Servers视图中已经JBoss v4.2,并且可以启动和停止。

    哪位能告诉我是怎么回事

  3. jbossweek 发表于2008-10-16

    你可以在server视图中选择JBoss AS服务器,右键单击在弹出的上下文菜单中选择”Add or Remove Projects…”,在出现的窗口中选择要部署的esb包即可

  4. fely 发表于2008-11-16

    我照上面做了,但是部署不成功,请高人指教哦
    — Incompletely deployed packages —
    org.jboss.deployment.DeploymentInfo@d1d8130a { url=file:/D:/java/jboss/jbossesb-server-4.4.GA/jbossesb-server-4.4.GA/server/default/deploy/helloworld.esb }
    deployer: org.jboss.soa.esb.listeners.config.JBoss4ESBDeployer@67a232
    status: Deployment FAILED reason: No ClassLoaders found for: org.jboss.mq.server.jmx.Queue; - nested throwable: (java.lang.ClassNotFoundException: No ClassLoaders found for: org.jboss.mq.server.jmx.Queue)
    state: FAILED
    watch: file:/D:/java/jboss/jbossesb-server-4.4.GA/jbossesb-server-4.4.GA/server/default/deploy/helloworld.esb
    altDD: null
    lastDeployed: 1226881350859
    lastModified: 1226881352000
    mbeans:

  5. jbossweek 发表于2008-11-16

    错误的意思是没有找到包含org.jboss.mq.server.jmx.Queue的jar包,请确认JBoss的default配置下的lib目录下存在jbossmq.jar包!

发表您的评论

您的名字: (*必填)

您的邮箱: (*不会被公布 ,必填)

您的网站: