Java 人生

          java (Java EE)&Linux

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            15 Posts :: 2 Stories :: 5 Comments :: 0 Trackbacks

          2007年9月14日 #

           

          BPEL的概念

                BPEL(Business Process Execution Language)又叫BPEL4WS(Business Process Execution Language For Web Service),面向Web服務的業(yè)務流程執(zhí)行語言。是一種使用Web服務定義和執(zhí)行業(yè)務流程的語言。BPEL提供了一種相對簡單易懂的方法,可將多個WEB服務組合到一個新的復合服務(稱作業(yè)務流程)中。

                BPEL本身是一個Web服務,可以作為服務的提供者。

                BPEL是基於Web服務的,沒有Web服務就沒有BPEL


            

           BPEL
          的運作方式


           BPEL的一般構成

                一個以bpel為後綴的文件(例如MyFlow.bpel)

                一個WSDL文件

                一個部置XML文件,樣子形似bpel.xml

           BPEL的實現(xiàn)需求

                需要熟悉單個的Web Service的使用方法

                需要了解具體的業(yè)務流程

                需要一個運行BPEL的處理器

                需要一個流程設計器

                當然需要對BPEL語法標簽的掌握等

          8.6 BPEL的結構

          BPEL的一般結構

                      <process>

                        <partnerLinks>

                          <partnerLink>

                          </partnerLink>

                        </partnerLinks>

                        <variables>

                          <variable/>

                        </variables>

                        <faultHandlers>   

                        </faultHandlers>

                        <sequence>

                            Activities

                        </sequence>

                      </process>

          <process>的屬性

          <process name="ncname" targetNamespace="uri"

                   queryLanguage="anyURI"?

                   expressionLanguage="anyURI"?

                   suppressJoinFailure="yes|no"?

                   enableInstanceCompensation="yes|no"?

                   abstractProcess="yes|no"?         xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/">

          .

          .

          </process>

          <partnerLinks>樣式

          <partnerLinks>

              <!– 注意:至少要指定一個角色. -->

              <partnerLink name="ncname"

                                   partnerLinkType="qname"

                                   myRole="ncname“

                                   partnerRole="ncname">

              </partnerLink>

           </partnerLinks>

          <variables>樣式

          <variables>

              <variable name="ncname"  

                              messageType="qname/>

           </variables>

          <faultHandlers>樣式

          <faultHandlers>

           <catch faultName="qname“

                       faultVariable="ncname">

                activity

              </catch>

              <catchAll>

                activity

              </catchAll>

           </faultHandlers>

          Activities包含具體如下

                      <receive>

                      <reply>

                      <invoke>

                      <assign>

                      <throw>

                      <terminate>

                      <wait>

                      <empty>

                      <sequence>

                      <switch>

                      <while>

                      <pick>

                      <flow>

                      <scope>

                      <compensate>

          基本活動一

                      <invoke>

          – 調用某個 Web 服務上的操作

                      <receive>

          – 等待一條消息來回應由某人從外部進行調用的服務介面的操作

                      <reply>

          – 生成輸入/輸出操作的回應

                      <wait>

          – 等待一段時間

          基本活動二

                      <assign>

          – 把資料從一個地方複製到另一個地方

                      <throw>

          – 指明某個地方出錯了

                      <terminate>

          – 終止整個服務實例

                      <empty>

          – 什麼也不做

          結構化活動

                      <sequence>

          – 定義一組步驟的有序序列

                      <switch>

          – 使用現(xiàn)在常見的“case-statement”辦法來産生分支

                      <while>

          – 定義一個迴圈

                      <pick>

          – 執(zhí)行幾條可選路徑中的一條

                      <flow>

          – 以及指明一組步驟應該並行地執(zhí)行

          一個完整的簡單示例

          <process name="test" targetNamespace="http://acm.org/samples"

                         suppressJoinFailure="yes"

                         xmlns:tns="http://acm.org/samples"

                         xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"

                         xmlns:bpelx="http://schemas.oracle.com/bpel/extension"

                         xmlns:ora="http://schemas.oracle.com/xpath/extension"

                         xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">

             <partnerLinks>

             <!-- The 'client' role represents the requester of this service. -->

                <partnerLink name="client" partnerLinkType="tns:test" myRole="testProvider"/>

             </partnerLinks>

             <variables>

                <variable name="input" messageType="tns:testRequestMessage"/>

                <variable name="output" messageType="tns:testResponseMessage"/>

             </variables>

             <sequence name="main">

                <receive name="receiveInput" partnerLink="client" portType="tns:test" operation="process" variable="input" createInstance="yes"/>

                <assign name="creatReturnStr">

                   <copy>

                      <from expression="concat(&quot;Hello&quot;, bpws:getVariableData('input','payload','/tns:testRequest/tns:input'))"></from>

                      <to variable="output" part="payload" query="/tns:testResponse/tns:result"/>

                   </copy>

                </assign>

                <reply name="replyOutput" partnerLink="client" portType="tns:test" operation="process" variable="output"/>

             </sequence>

          </process>

          posted @ 2007-09-14 08:51 jinmy liao 閱讀(520) | 評論 (0)編輯 收藏

          2006年10月21日 #

          配置說明

          程序名稱

          JBoss ESB

          數(shù)據(jù)庫路徑和名稱

          222.118.20.108\jbossesb

          程序的文件構成說明

          1)?????? Jboss4.0.4GA (contain Ejb3.0)

          2)?????? jbossesb-4.0Beta1MP1????

          2.1 jbossesb-appl.ear

          2.2 jbossEsb.properties

          2.3 JBossESB-ds.xml

          2.4 properties-service.xml

          2.5 ObjStore.xml

          配置步驟如下 :

          1. jbossesb-appl.ear 復制到 <JBoss-home>/server/default/deploy
          2. properties-service.xml 復制到 <Jboss-home>/server/default/deploy
          3. 復制 Jbossesb.properties <Jboss-home>/server/default/conf
          4. 編輯 JBossESB-ds.xml
          5. 復制 JbossESB-ds.xml <JBoss-home>/server/default/deploy

          ?

          運行條件和配置說明

          運行平臺和條件

          Windows

          Linux

          數(shù)據(jù)源配置

          1)數(shù)據(jù)源配置在JBossESB-ds.xml文件配置,詳細信息如下:

          <datasources>

          ? <local-tx-datasource>

          ??? <jndi-name>JBossESBDS</jndi-name>

          ?

          ??? <connection-url>jdbc:jtds:sqlserver://222.118.20.108;DatabaseName=jbossesb</connection-url>

          ??? <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>

          ??? <user-name>dbname</user-name>

          ??? <password>access</password>

          ?

          ??? <min-pool-size>10</min-pool-size>

          ??? <max-pool-size>100</max-pool-size>

          ??? <blocking-timeout-millis>1000</blocking-timeout-millis>

          ??? <idle-timeout-minutes>5</idle-timeout-minutes>

          ?

          ? </local-tx-datasource>

          ?

          </datasources>

          2.修改jbossEsb.properties文件:

          org.jboss.soa.esb.mail.smtp.host=www.163.com

          org.jboss.soa.esb.mail.smtp.port=23

          org.jboss.soa.esb.mail.smtp.user=ejinmy

          org.jboss.soa.esb.mail.smtp.password=123456789abc

          ?

          ?

          #

          # Object Store Settings

          #

          org.jboss.soa.esb.objStore.configfile=file:/e:/temp/ObjStore.xml

          程序運行配置

          必需是 JBoss .4.0.4 版本,還要支持 EJB3.0

          運行 JBoss App Server 就啟動了 JBoss ESB.

          其它說明

          數(shù)據(jù)庫表(script)

          CREATE TABLE batches (

          ??? batch_num int NOT NULL,

          ??? seq integer NOT NULL,

          ??? data varchar,

          ??? CONSTRAINT batches_pk PRIMARY KEY (batch_num,seq)

          );

          ?

          ?

          CREATE TABLE object_snap (

          ??? uid int NOT NULL,

          ??? stamp int,

          ??? snap_type varchar,

          ??? object_uid int,

          ??? batch_num int,

          ??? xml_data varchar,

          ??? CONSTRAINT object_snap_pk PRIMARY KEY (uid)

          );

          ?

          ?

          CREATE TABLE people_index (

          ? ??uid bigint NOT NULL,

          ??? stamp int,

          ??? latest_snap_uid int,

          ??? latest_snap_date varchar,

          ??? name varchar,

          ??? phone varchar,

          ??? address varchar,

          ??? CONSTRAINT people_index_pk PRIMARY KEY (uid)

          );

          ?

          ?

          CREATE TABLE uid_table (

          ??? uid integer NOT NULL,

          ??? sequence_name varchar NOT NULL,

          ??? last_used_uid bigint NOT NULL,

          ??? CONSTRAINT uid_table_pk PRIMARY KEY (uid)

          );

          ?

          ?

          INSERT INTO uid_table (uid, sequence_name, last_used_uid) VALUES (1, 'jbossEsb_objuid', 10500000);

          INSERT INTO uid_table (uid, sequence_name, last_used_uid) VALUES (2, 'jbossEsb_batchuid', 251000);

          ???

          此文檔是配置安裝JBOSS ESB的步驟說明書.

          ?

          填寫日期: 2006/10/18      填寫人: ?? ??jinmy ????
          ? 更新日期:

          ?

          ?

          有使用JBoss ESB的可以一起探討,QQ:182529178
          posted @ 2006-10-21 14:20 jinmy liao 閱讀(2344) | 評論 (1)編輯 收藏

          2006年9月26日 #

          cimero
          posted @ 2006-09-26 11:26 jinmy liao 閱讀(791) | 評論 (0)編輯 收藏

          2006年8月1日 #

          ? 好久都沒有來這裡看一下了,由於這兩個月要忙一個流程,公司在英國開一個銷售公司,要準備程序給他們用,本來現(xiàn)在的流程運作基本上可以,但是現(xiàn)在的程序能拿到英國用?
          ? 由於是一個銷售的公司,有了銷售、采購、倉庫就差不多了。這些程序我們都有,但是為了那邊的程序、流程能順暢的運行,任務還有好多,到8月15任務就要完成,也差不多了,呵,看了下現(xiàn)在的情況,還基本上可以,不過還有程序沒有組合起來。
          ? 從這兩個月的任務中,我感覺到程序的開發(fā)要做到重用、擴展,並不是很容易的事。
          首先從數(shù)據(jù)層來說,不同的地方有可能使用不同的數(shù)據(jù)表,在java中開發(fā)到是比較容易處理,但是如果是用C/S的delphi開發(fā)的大部分都是直接使用sql的,很難實現(xiàn)這一點
          也許你會說,為什麼不使用同一個數(shù)據(jù)表?情況很多,我們公司是這樣的,賣了一套ERP(不完整版本),自己開發(fā)了其余部分,這兩個程序
          要同時運行,只有我們新開發(fā)的程序要使用不同表的情況。同樣我們的合作公司,有可能有他自己的系統(tǒng),如果能做到不依賴於基表
          就更容易重用,數(shù)據(jù)共享.
          接下來就是:業(yè)務功能的重用.
          像倉庫的進貨、出貨,可用於PO,SO,生產等,都是一樣的意義。為了能使不同地方的業(yè)務功能能重用,我們使用SOA的思想
          利用WebServices、ESB的技術來實現(xiàn),業(yè)務的服務化.
          再就是:擴展
          不同的地方有可能需求有不同,這是很合乎情理的,如現(xiàn)在英國要看到我們貨物在途量,本來倉庫沒有這個功能的.
          我想要做到軟件的可維護、可重用不是簡單的知道使用語言,這個直接輿個人的習慣有很大的關係
          其他開發(fā)軟件,就是開發(fā)人員處理這個,等於生活的中的煮飯一樣,有的人很輕松就完成,有的人就弄的一團糟
          多鍛煉積累經(jīng)驗也是重要,最後提醒自己,做任何事情都不能馬虎,要仔細考慮。同時希望8.15能完成任務

          ?

          posted @ 2006-08-01 20:11 jinmy liao 閱讀(431) | 評論 (0)編輯 收藏

          2006年7月23日 #

          感覺沒有插件開發(fā)工程真的好辛苦,總想去找個插件,但是一直沒有發(fā)現(xiàn),有哪位朋友使用ESB的,能介紹個開發(fā)工具?
          posted @ 2006-07-23 09:54 jinmy liao 閱讀(1576) | 評論 (1)編輯 收藏

          2006年4月25日 #

          不好意思,才知道我也加入了這個團對,非常感謝。
          先說一下我的SOA觀點吧.
          從程序開始的結構化到面向對象,到現(xiàn)在現(xiàn)在的面向服務(組件),從原來的重用打包提供API,到現(xiàn)在的SPI
          世界上的每一個細胞都在發(fā)育成長,同樣電腦的技術也是不段的更換原來的技術觀念。
          我從去年開始用web services,那時候還不在了解SOA,只知道ws能實現(xiàn)原來的分布式.
          隨著ws的wsdl增多,可能要先調用一個接口得到結果再去調用另外一個接口得到結果,這樣就認識了BPEL.
          也知道了SOA在一個企業(yè)中能把所有不同的系統(tǒng)之間關聯(lián)起來的思想的必要性。我覺得SOA思想應該是這十年,重要的編程思想
          也許有一天還有更厲害的思想,哪時候應該是很少寫程序的了,這樣就有另外的架構。

          呵,以後我會跟大家多認識,我現(xiàn)在在用mule來實現(xiàn)ESB,以後跟大家交流.
          posted @ 2006-04-25 19:44 jinmy liao 閱讀(548) | 評論 (1)編輯 收藏

          2006年4月22日 #

          一.SOA
          SOA是一種新架構程序的方法通過服務組合,而不是模塊方法組合代碼.
          SOA軟件系統(tǒng)架構原理是基於自身描述理念:一個服務是一個Function(usually a business function)服務提供者和服務消費者之間通過消息交換來完成.
          SOA優(yōu)點:
          1)SOA主要的優(yōu)點是:松耦合(decoupling)
          ?? 在服務提供者和服務消費之間提供接口,這樣可以更改服務的具體實現(xiàn)而不影響服務消費。
          2)SOA的另外一個好處是可重用的(reuse)服務可以在不同的應用程序中重用。
          我們可以想象應用程序除了包括使用服務、服務提供之外沒有其他的東西了。
          SOA應用:
          一個應用程序符合SOA包括兩個不同的開發(fā)行為:
          1)Service Creation:集成現(xiàn)成的方法使它們成為服務。
          2)Service Composition:使用現(xiàn)成的服務創(chuàng)建一個應用程序和更大的服務.

          二.JBI(Java Business Integration)
          JBI是SOA的解決和集成的基礎
          JBI提供了組件之間交互的消息基礎:
          ?1)NormalizedMessage(NM) 所有基于消息的數(shù)據(jù)片段——SOAP片段、MOM消息、HTTP數(shù)據(jù)或其它信息——被聚合、集中、
          ?應用到業(yè)務邏輯、傳輸,如果有必要則轉換成其他格式隨後被分派到最終目的地
          ?2)JBI machine (SE)
          ?? 組件提供或者消費服務是基於本地的
          ?3)JBI binding (BC)
          ?? 組件 提供或者消費服務是通過一些通信協(xié)議或者是其他遠程技術
          ?組件之間的交互通過消息交換,消息是服務提供者發(fā)佈的WSDL?
          服務元件(Service Unit)
          ?一個服務元件看作是一個黑盒子,它提供了一個靜態(tài)的服務,
          ?服務元件中包含有,提供的服務和服務消費者。它們都從屬服務元件,一個服務元件可以有0個或者多個服務

          ?服務集合(service Assembly)
          ?組合服務元件是大的應用程序或者新的服務形式出現(xiàn) A Service Assembly:一組JBI 服務元件連同描述它們的關係和目標組件
          總結:
          JBI是SOA結構的基礎,它把原來的業(yè)務函數(shù)集成為一個服務,使服務提供者和服務消費者之間的交互是松耦合的,通過service assembly(服務集合)
          可以組合不同的程序,架構圖:
          JBI.bmp

          servicemix

          ?
          posted @ 2006-04-22 16:24 jinmy liao 閱讀(1303) | 評論 (2)編輯 收藏

          2006年4月20日 #


          消息傳遞系統(tǒng)通常被成為MOM(Message Oriented MiddleWare),作為消息服務器,MOM需要客戶端用統(tǒng)一的標準訪問服務器,JMS標準是使用
          最廣泛的消息接口標準.
          JMS消息分點對點、基於主題的消息兩種
          點對點方式:是兩個客戶端建立消息隊列,消息發(fā)送者(sender)把消息(Message)給消息服務器中的一個隊列(Queue),消息接受者(receiver)從服務器中這個隊列中
          獲取消息.
          主題消息:消息發(fā)送者響向消息服務器中的一個主題發(fā)送消息(Message),對這個消息有訂閱的接受者都會接受到這個消息.
          JMS中的主要名詞:
          1)目的地(Desination)
          ?是發(fā)送者和接受者的一個共同的地點,發(fā)送者把消息發(fā)送到這裡,接受者從這裡獲取消息,是我們在服務器中創(chuàng)建的一個隊列,服務器會對這個地方的所有消息維護。
          2)會話
          ?消息發(fā)送者和接受,都要通過JNDI獲取消息服務器的上下文,session就是這樣的一個上下文對象,它可以創(chuàng)建消息生產者、消費者,可以創(chuàng)建點對點消息、主題消息
          所有的消息操作都圍繞這個會話展開.

          消息結構的介紹
          用過web services(SOAP)應該知道消息包括信封、消息頭、主體、附件.同樣JMS消息結構也是差不多包括消息頭、消息屬性、消息體.
          以JMS、SOAP為基礎可以實現(xiàn)面向消息模型(MOM Message Oriented Model)。
          JMS消息樣式:
          SpyTextMessage {
          ???? Header {
          ??????? jmsDestination? : QUEUE.mytestjms
          ??????? jmsDeliveryMode : 2
          ??????? jmsExpiration?? : 0
          ??????? jmsPriority???? : 4
          ??????? jmsMessageID??? : ID:6-11454947326091
          ??????? jmsTimeStamp??? : 1145494732609
          ??????? jmsCorrelationID: null
          ??????? jmsReplyTo????? : null
          ??????? jmsType???????? : null
          ??????? jmsRedelivered? : false
          ??????? jmsProperties?? : {}
          ??????? jmsPropReadWrite: false
          ??????? msgReadOnly???? : true
          ??????? producerClientId: ID:6
          ???? }
          ???? Body {
          ??????? text??????????? :sender message from liao test
          ???? }
          JMS簡單編程實現(xiàn)點對點的消息 服務器用jboss-4.0.3SP1
          1)首先在JBOSS中部屬一個點對點的消息隊列
          配置文件放在JBOSS_Home\server\default\deploy\jms
          配置文件的內容為:
          <?xml version="1.0" encoding="UTF-8"?>

          <server>
          ?<!--是一個點對點的用org.jboss.mq.server.jmx.Queue(Topic),desination的名稱為mytestjms?
          ? 更多的配置說明可以看原來jboss自帶的Jms配置文件,文件名要用*-service.xml
          ?-->
          ? <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=mytestjms">
          ??? <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
          ? </mbean>

          </server>
          2)實現(xiàn)消息發(fā)送者
          import java.util.Hashtable;
          import javax.jms.*;
          import javax.naming.*;
          public class JMSSender {
          ??? QueueSession session;
          ??? QueueConnection conn;
          ??? QueueSender sender;
          ??? QueueReceiver receiver;
          ??? public void clientconnect()throws Exception
          ??? {
          ??????? //消息服務器(destination)設置
          ??????? Hashtable env =? new Hashtable();
          ??????? env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
          ??????? env.put(Context.PROVIDER_URL,"localhost");
          ??????? Context iniCtx = new InitialContext(env)? ;
          ???????? //查創(chuàng)建JMS連接的工廠類
          ??????? Object tmp = iniCtx.lookup("ConnectionFactory");
          ??????? QueueConnectionFactory qcf = (QueueConnectionFactory)tmp;
          ????????
          ??????? //查找JMS目標對象 點對點
          ??????? Queue queue = (Queue)iniCtx.lookup("queue/mytestjms");
          ??????? //創(chuàng)建JMS連接
          ??????? conn = qcf.createQueueConnection();
          ??????? //創(chuàng)建JMS會話
          ???????? session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
          ???????? //開始連接
          ??????? conn.start();
          ??????? sender = session.createSender(queue);
          ??????? receiver = session.createReceiver(queue);
          ??? }
          ??? public? JMSSender()
          ??? {
          ??????? try{
          ?????????? System.out.println("begin");
          ??????????? clientconnect();
          ??????????? TextMessage textmsg = this.session.createTextMessage();
          ??????????? textmsg.setText("sender message from liao test");
          ??????????? //發(fā)送消息 點對點
          ??????????? sender.send(textmsg);
          ??????????? disConnect();
          ??????????? System.out.println("success");
          ??????? }catch(Exception e)
          ??????? {
          ??????????? e.printStackTrace();
          ??????? }

          ??? }
          ??? /**
          ???? * 停止和關閉JMS連接
          ???? * @throws JMSException
          ???? */
          ??? public void disConnect() throws JMSException
          ??? {
          ??????? conn.stop();
          ??????? session.close();
          ??????? conn.close();
          ??? }
          ??? public Message receiver() throws JMSException
          ??? {
          ??????? return receiver.receive(1000);
          ??? }
          ??? public static void main(String[] args)throws Exception
          ??? {
          ???????? new JMSSender();
          ??? }
          }
          3)實現(xiàn)消息接受者
          import java.util.Hashtable;
          import javax.jms.*;
          import javax.naming.*;
          public class JMSReceiver {
          ??? QueueSession session;
          ??? QueueConnection conn;
          ??? QueueReceiver receiver;
          ???
          ??? public void clientconnect()throws Exception
          ??? {
          ??????? Hashtable env =? new Hashtable();
          ??????? env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
          ??????? env.put(Context.PROVIDER_URL,"localhost");

          ??????? Context iniCtx = new InitialContext(env)? ;
          ??????? Object tmp = iniCtx.lookup("ConnectionFactory");
          ??????? QueueConnectionFactory qcf = (QueueConnectionFactory)tmp;
          ??????? Queue queue = (Queue)iniCtx.lookup("queue/mytestjms");
          ??????? conn = qcf.createQueueConnection();
          ???????? session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
          ??????? conn.start();
          ??????? receiver = session.createReceiver(queue);
          ??? }
          ??? public void disConnect() throws JMSException
          ?? {
          ?????? conn.stop();
          ?????? session.close();
          ?????? conn.close();
          ?? }
          ?? public Message receiver() throws JMSException
          ?? {
          ?????? return receiver.receive(1000);
          ?? }
          ?? public JMSReceiver()throws Exception
          ?? {
          ??????? clientconnect();
          ???????? Message msg = receiver();
          ???????? System.out.println(msg);
          ???????? if (msg instanceof TextMessage)
          ???????? {
          ???????????? TextMessage tmsg = (TextMessage)msg;
          ???????????? //消息主題內容:
          ???????????? System.out.println(tmsg.getText());
          ???????? }
          ???????? System.out.println("success");
          ???????? disConnect();
          ?
          ?? }

          ?

          ??? public static void main(String[] args)throws Exception
          ??? {
          ??????? new JMSReceiver();
          ??? }
          }

          主題消息用到Topic,思路基本相同,接受必需先訂閱消息主題,當有發(fā)送者把消息發(fā)給這個主題的時候
          先前訂閱的接受就會收到這個消息。
          SOA中JMS也是一個熱門,客戶端通常用JMS發(fā)送消息再ESB中調用具體的服務。

          posted @ 2006-04-20 11:15 jinmy liao 閱讀(2096) | 評論 (0)編輯 收藏

          2006年4月18日 #

          消息在同一個系統(tǒng)中或者在不同的系統(tǒng)都可以要交互,因為工作都是要交流的,就拿企業(yè)的定單修改為例子,當一個定單要修改,得通知不同的管理人員,當然還要更可靠的消息(Email),在OA系統(tǒng)中,經(jīng)常要監(jiān)測消息,看是否有流程任務到達該用戶,有則提示消息。
          下面是我做的一個小的服務器處理消息,功能如下:

          1)?????? 提供客戶端調用的接口(web services)

          2)?????? 編寫處理處理消息的類,消息現(xiàn)在包括 , 登陸消息、登出消息、消息發(fā)送,消息狀態(tài)的修改

          登陸消息包括 : 客戶端的用戶名、 ip 、端口 ;

          登出消息包括 : 客戶端的用戶名,服務器將注銷客戶端登陸時發(fā)過來的消息

          發(fā)送的消息包括 : 發(fā)送人,接受人,發(fā)送事件,發(fā)送的內容 .
          修改狀態(tài):包括消息的關鍵字ID
          3)?????? 在客戶端登陸的時候監(jiān)測是否是否有新消息,有則發(fā)送給客戶端


          4)發(fā)送的消息如果接受用戶不在線,則保存該消息,等接受者登陸的時候再發(fā)送給接受者。

          消息有一個狀態(tài)N表示新的消息,O表示已經(jīng)確認的消息.
          消息傳給用戶,用戶確認在回寫消息狀態(tài)
          客戶端調用的接口可以是JMS,Http由於現(xiàn)在只有delphi客戶端,現(xiàn)在提供web services訪問
          流程圖:flow.bmp

          posted @ 2006-04-18 20:22 jinmy liao 閱讀(511) | 評論 (0)編輯 收藏

          2006年4月15日 #

          折騰了兩天,想寫一個JBI Component,到現(xiàn)在都還沒有運行起來。
          運行環(huán)境是在Servicemix,主要是沒有工具,配置文件特別多,像jbi.xml,servicemix.xml,sys-.xml等
          要不是找不到服務就是客戶端調用服務器出錯。
          還真是難運行,中文的資料也特別少,今天還得到一個網(wǎng)絡朋友的幫助,還是沒有成功運行
          有點像開始寫EJB的時候,這麼難運行。
          看明天的的情況了。my god!

          posted @ 2006-04-15 17:06 jinmy liao 閱讀(809) | 評論 (0)編輯 收藏

          僅列出標題  下一頁
          主站蜘蛛池模板: 曲阳县| 深州市| 德清县| 绵阳市| 海林市| 周至县| 忻城县| 香港 | 南涧| 开鲁县| 新蔡县| 新巴尔虎左旗| 东源县| 白水县| 庆阳市| 扶风县| 惠东县| 潮州市| 广州市| 绍兴县| 乡宁县| 翼城县| 措美县| 确山县| 涿鹿县| 双柏县| 中卫市| 韶关市| 河西区| 普定县| 濉溪县| 多伦县| 宾阳县| 乌什县| 高阳县| 东台市| 华安县| 岳阳县| 佛坪县| 怀安县| 安达市|