jboss ESB 服务编排

jboss ESB 是企业服务总线,应用很广,但资料很少,而且仅有的很少的资料都是英文的。

最近研究了一下jboss esb的服务编排,直接进入主题了。

jboss ESB 的环境配置这里就不说了,jboss的服务编排要建三个项目

(1)jbpm的项目(编排服务的流转顺序,这里使用的是jbpm3)

(2)建一个web项目,提供webservice服务。

(3)建一个esb服务,作为企业服务总线使用。

一 建 jbpm项目,然后建一个流程实例
[img]http://hi.csdn.net/attachment/201010/9/0_1286633928WDy9.gif[/img]


如图所示的流程实例,有一个开始节点、两个esb service 节点 、一个任务节点和一个结束节点

a 打开esb service节点的属性页面,编辑服务的名称,类别,输入、输出参数(这里的服务名称、类别、输入输出参数将和esb中的对应)

[img]http://hi.csdn.net/attachment/201010/9/0_1286634500mNwO.gif[/img]



二 建一个动态的web项目,作为webservice服务使用。


这里使用cxf 提供的建立webservice的方法


1 webservice_1
package com.richfit.jbpmwebservice;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public class WebService_1java {
@WebMethod(operationName = "process")
public String process_1(@WebParam(name = "xml") String xml) {
System.out
.println("------------------start process_1--------------------");
System.out.println(xml);
System.out
.println("------------------start process_1--------------------");
return "webservice_1:" + xml;
}

}


2 webservice_2


package com.richfit.jbpmwebservice;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public class WebService_2java {

@WebMethod(operationName = "process")
public String process_1(@WebParam(name = "xml") String xml) {
System.out
.println("------------------start process_2--------------------");
System.out.println(xml);
System.out
.println("------------------start process_2--------------------");
return "webservice_1:" + xml;
}

}


三 建立esb服务

[img]http://hi.csdn.net/attachment/201010/9/0_1286634825RXBR.gif[/img]

ProcessWebServiceParam 类


package com.richfit.jbpm;

import java.util.HashMap;
import java.util.Map;

import org.jboss.soa.esb.actions.AbstractActionLifecycle;
import org.jboss.soa.esb.actions.ActionProcessingException;
import org.jboss.soa.esb.helpers.ConfigTree;
import org.jboss.soa.esb.message.Message;

public class ProcessWebServiceParam extends AbstractActionLifecycle{

public ProcessWebServiceParam(ConfigTree _tree) {
}

public Message processParam(Message msg) throws ActionProcessingException {
String order = (String)msg.getBody().get("xml");
Map map = new HashMap();
map.put("process.xml", order);
msg.getBody().add("xml",map);
return msg;
}

public Message processReturn(Message msg) throws ActionProcessingException {
Map order = (Map)msg.getBody().get("return");
msg.getBody().add("xml",order.get("processResponse.return"));
return msg;
}

}


jbm-queue-service.xml 文件 (为provider提供队列)



name="jboss.esb.demo.destination:service=Queue,name=bpmstart"
xmbean-dd="xmdesc/Queue-xmbean.xml">
jboss.messaging:service=ServerPeer
jboss.messaging:service=PostOffice



jboss-esb.xml 文件 (esb的主要文件,配置服务、action,provider 等信息)


xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.2.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.2.0.xsd http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.2.0.xsd">

name="jboss message">

dest-type="QUEUE" />




name="webservice_1">

process="processParam" />
name="webservice_1">
value="http://127.0.0.1:8080/jbpmtest/webservice_1?wsdl" />





process="processReturn" />


name="webservice_2">

process="processParam" />
name="webservice_2">
value="http://127.0.0.1:8080/jbpmtest/webservice_2?wsdl" />





process="processReturn" />


(这里是对jbpm的引用)





class="org.jboss.soa.esb.services.jbpm.actions.BpmProcessor">











deployment.xml文件,发布服务的描叙文件


name="jboss.esb.demo.destination:service=Queue,name=bpmstart"
xmbean-dd="xmdesc/Queue-xmbean.xml">
jboss.messaging:service=ServerPeer
jboss.messaging:service=PostOffice



到这里,所有的信息都建立完毕。


然后发布服务和流程实例,注意这里的服务器使用的是jboss

建立客户端测试,esb的服务编排是否成功

[img][http://hi.csdn.net/attachment/201010/9/0_1286635466C6cB.gif/img]
所需的jar包如上图所示。
客户端的目录说明,
SimpleWebServiceEsbClient 类信息


package org.jboss.simple.esbclient;

import org.jboss.soa.esb.client.ServiceInvoker;
import org.jboss.soa.esb.couriers.FaultMessageException;
import org.jboss.soa.esb.listeners.message.MessageDeliverException;
import org.jboss.soa.esb.message.Message;
import org.jboss.soa.esb.message.format.MessageFactory;
import org.jboss.soa.esb.services.registry.RegistryException;

public class SimpleWebServiceEsbClient {

/**
* @param args
* @throws RegistryException
* @throws MessageDeliverException
* @throws FaultMessageException
*/
public static void main(String[] args) throws FaultMessageException,
MessageDeliverException, RegistryException {
System.setProperty("javax.xml.registry.ConnectionFactoryClass",
"org.apache.ws.scout.registry.ConnectionFactoryImpl");
// System.setProperty("org.jboss.soa.esb.propertyFile",
// "abs://D:/jbossesb-properties.xml");
Message esbMessage = MessageFactory.getInstance().getMessage();

// Map map = new HashMap();
// map.put("hello.username", "jboss soa");
esbMessage.getBody().add("simplewebservice");
new ServiceInvoker("jbpm", "bpmstart").deliverAsync(esbMessage);
}

}

uudi.xml文件





3600000




default
Main jUDDI node

org.apache.juddi.v3.client.transport.JAXWSTransport
http://localhost:8080/juddiv3/services/custody-transfer?wsdl
http://localhost:8080/juddiv3/services/inquiry?wsdl
http://localhost:8080/juddiv3/services/publish?wsdl
http://localhost:8080/juddiv3/services/security?wsdl
http://localhost:8080/juddiv3/services/subscription?wsdl
http://localhost:8080/juddiv3/services/subscription-listener?wsdl
http://localhost:8080/juddiv3/services/juddi-api?wsdl






default-ws
jUDDI console node

org.jboss.internal.soa.esb.registry.client.JuddiInVMTransport
org.apache.juddi.api.impl.UDDICustodyTransferImpl
org.apache.juddi.api.impl.UDDIInquiryImpl
org.apache.juddi.api.impl.UDDIPublicationImpl
org.apache.juddi.api.impl.UDDISecurityImpl
org.apache.juddi.api.impl.UDDISubscriptionImpl
org.apache.juddi.api.impl.UDDISubscriptionListenerImpl
org.apache.juddi.api.impl.JUDDIApiImpl






jbossesb-properties.xml 文件






xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="jbossesb-1_0.xsd">



















































































































如果控制台打印出了webservice总输出的信息,说明服务编排成功。还可以从jboss的控制台查看流程实例的节点是否运行到了end节点
[img]http://hi.csdn.net/attachment/201010/9/0_128663573829ZJ.gif[/img]

你可能感兴趣的:(工作流)