欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      論基于Web服務器的企業(yè)應用集成(推薦閱讀)

      時間:2019-05-12 18:16:56下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關的《論基于Web服務器的企業(yè)應用集成》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《論基于Web服務器的企業(yè)應用集成》。

      第一篇:論基于Web服務器的企業(yè)應用集成

      論基于Web服務器的企業(yè)應用集成摘要:

      去年,我所在的公司承擔了一項為X卷煙廠建立企業(yè)應用集成的項目。主要目標是將該廠原使用的辦公系統(tǒng)、人力資源系統(tǒng)、生產(chǎn)管理系統(tǒng)等系統(tǒng)進行集成,使之成為一個無縫連接的整體。我有幸參與了該項目,并擔任主要的規(guī)劃設計工作。

      針對該項目,我們綜合運用了J2EE平臺構架、Web Service、IBM websphere等技術,來實現(xiàn)基于Web Service的企業(yè)應用集成,其效果相當顯著。而且如果今后有新的系統(tǒng)加入,也能夠很容易地添加。用戶在使用該系統(tǒng)后,生產(chǎn)、經(jīng)營效率有了大幅度的提高,得到了用戶的一致好評。

      正文:

      去年,我公司承擔了X卷煙廠的企業(yè)應用集成項目。該卷煙廠是一家大型國有企業(yè),經(jīng)過多年的發(fā)展和積累,形成一套行之有效的管理機制,并實施了一系列的管理、生產(chǎn)自動化系統(tǒng),如LOTUS的Domino辦公自動化系統(tǒng)、人力資源管理系統(tǒng)、CRM客戶關系管理系統(tǒng)、用友財務軟件等商品化軟件,也有該廠與一家軟件公司合作開發(fā)的生產(chǎn)管理軟件(具有源代碼)。這些軟件實施于不同時間,也為各部門的生產(chǎn)、管理效率的提高起到了巨大的推動作用。但是各個分散獨立的系統(tǒng)也給企業(yè)的發(fā)展造成了瓶頸,生產(chǎn)第一線的數(shù)據(jù)不能隨時反饋給決策層領導,供應鏈、銷售鏈不能與生產(chǎn)管理系統(tǒng)銜接,只能用手工方式將數(shù)據(jù)輸入生產(chǎn)管理系統(tǒng),不僅速度慢,而且經(jīng)常容易出錯。

      隨著企業(yè)的發(fā)展,這些系統(tǒng)也成為了一個個信息孤島,給企業(yè)的進一步發(fā)展造成了瓶頸。為徹底消除這些限制企業(yè)發(fā)展的因素,該廠決定實施企業(yè)應用集成,將各個獨立的系統(tǒng)集成起來,成為一個無縫連接的整體,使各種信息在整個企業(yè)范圍內(nèi)流動起來,促進企業(yè)的進一步發(fā)展。

      我公司成立了項目組,我有幸參與了該項目,并擔任主要的規(guī)劃設計工作。

      根據(jù)以往項目的經(jīng)驗,我們首先進行了技術方案的選擇。目前企業(yè)應用集成通行的做法有三種:數(shù)據(jù)層集成、業(yè)務層集成和表示層集成。數(shù)據(jù)層集成需要修改大量的應用程序,而使用的系統(tǒng)中一些是商業(yè)軟件,我們無法得到源代碼。而表示層集成只是集成了各個應用程序的顯示界面,就好像只是做一層外裝修,無實質(zhì)性的改變,而且有可能成為整個集成系統(tǒng)的瓶頸。業(yè)務層集成則克服數(shù)據(jù)層、表示層集成的這些缺點,而程序代碼的修改量不大,且只是針對沒有API(應用程序接口)的應用程序。因此,我們根據(jù)企業(yè)目前系統(tǒng)使用的狀況及我們以往開發(fā)類似項目的成功經(jīng)驗,經(jīng)項目組討論決定采用業(yè)務層集成方式來完成該項目。

      我們采用了J2EE的平臺構架,并為企業(yè)將來在企業(yè)間和電子商務的進一步集成,采用了基于Web服務的集成方案。Web服務具有各個應用程序之間松散耦合、位置透明、協(xié)議獨立的特點,某個應用程序的增減變動不會影響到其它應用程序的運行,并且它所使用的SOAP、XML等協(xié)議和技術也不被某一家公司所控制。

      選定了實現(xiàn)平臺,我們開始對各個系統(tǒng)進行封裝、組合。各個系統(tǒng)的接口的異構性帶來了訪問上的麻煩。為了屏蔽接口上的差異性,我們采用了將這些接口映射為統(tǒng)一的虛擬組件。虛擬組件一邊通過J2EE低層接口顯示現(xiàn)有應用程序的功能,另一邊通過現(xiàn)有應用程序接口API和它們進行連接。這樣用戶就可以用統(tǒng)一的方式訪問虛擬組件而獲得應用程序的功能。我們通過采用J2EE的JCA方式實現(xiàn)虛擬組件對各個應用程序的訪問,為每一個應用程序定制一個資源適配器,并插入J2EE的應用程序服務器中。資源適配器拿有一個指定的原系統(tǒng)庫(用Java寫的或帶有自身接口單元的庫),這個庫同它描述的原系統(tǒng)具有連通性。通過J2EE平臺的JCA這樣一種方式,我們向用戶提交了一個統(tǒng)一的調(diào)用接口。

      解決了接口問題,接下來就要將各應用程序提供的服務通過WSDL描述服務,并且注

      冊到企業(yè)內(nèi)部的加UDDI中心。我們采用了Apache axis 1.0來開發(fā)Web服務,IBM的Websphere作為消息服務器。根據(jù)該廠的要求,將各應用程序提供的服務分為5個種類來提供Web服務,分別是銷售、人事、生產(chǎn)、供應、辦公五個部分,再將各應用程序提供的Web服務具體細分,如生產(chǎn)部分提供了物料需求計劃服務、庫存服務、產(chǎn)品目錄更新服務等。并WSDL實用程序生成代理代碼,發(fā)布Web服務程序,在統(tǒng)一的服務發(fā)布服務器上,通過UDDI服務實現(xiàn)發(fā)現(xiàn)Web服務功能,便于查詢系統(tǒng)各模塊提供的Web Service服務。服務請求者按照標準接口構造XML格式的SOAP Request并通過HTTP方式向UDDI注冊中心發(fā)出請求。當有一個新的物料需求計劃生成時,我們通過使用JMS中間件來發(fā)布物料需求計劃,使得訂閱該主題的供應商得到消息。

      企業(yè)信息門戶EIP我們采用IBM WebSphere Portal Server來實現(xiàn)。對用戶帳號采用統(tǒng)一管理,統(tǒng)一授權,用戶登錄系統(tǒng)時采用統(tǒng)一認證服務調(diào)用接口以實現(xiàn)用戶身份的認證過程,并通過單點登錄SSO,從根本上改變了現(xiàn)有各應用程序帳號之間進行漫游,不需要進行重新登錄,給用戶提供了極大的便利,并減少了不法用戶利用認證攻擊應用程序的可能,極大地提高了系統(tǒng)的安全性和可用性。

      在系統(tǒng)實施過程中,我們也遇到了一些困難。

      生產(chǎn)部門使用的生產(chǎn)管理系統(tǒng)是由該廠與一家軟件合作開發(fā)的,沒有預留API,我們便對該系統(tǒng)進行了改造,由于該軟件公司已找不到,而且該系統(tǒng)文檔難以找到,因此我們對接口改造會對原應用程序造成的兼容性、穩(wěn)定性的問題估計不足,改造完成后只進行了接口改造的回歸測試,使得該應用程序一直不穩(wěn)定。于是我們重新對該系統(tǒng)進行了深入透徹的了解,決定采用CORBA規(guī)范的接口定義語言IDL描述接口,而J2EE與CORBA又有極大的相關性,便于今后的封裝、組合。接口改造完成后,我們進行了反復的回歸測試和穩(wěn)定性測試,才使系統(tǒng)又恢復原來的運行水平。

      還有就是與各應用程序供應商的協(xié)調(diào),大家都站在各自的立場上,設想對方的系統(tǒng)接口應該如何改,以適應自己的接口。經(jīng)過我們和該廠的努力,最終大家都同意以最有利于集成系統(tǒng)的角度進行改造。

      在本項目中,我們綜合運用了J2EE平臺構架、Web Service、IBM WebSphere等技術,來實現(xiàn)基于Web Service的企業(yè)應用集成,其效果相當顯著。而且如果今后有新的系統(tǒng)加入,也能夠很容易地添加。用戶在使用該系統(tǒng)后,生產(chǎn)、銷售、供應、辦公成為一體化的無縫連接的一個整體,生產(chǎn)、經(jīng)營效率有了大幅度的提高,得到了用戶的一致好評。

      我從實踐中領會到,企業(yè)應用集成是一項技術復雜,工程繁雜的工程,但也是企業(yè)目前最急需解決的問題。同時我也認識到,企業(yè)應用集成還有很多領域和知識點需要繼續(xù)研究和實踐,新技術的應用也帶來了新的要求和挑戰(zhàn),我將在企業(yè)應用集成領域不斷探索,不斷實踐。

      第二篇:Web服務器實驗3報告

      操作系統(tǒng)實驗報告三

      姓名:陳玉博

      學號:2011011207

      日期:2013-11-24

      【實驗內(nèi)容】:設計一段內(nèi)存結構,能夠緩存一定數(shù)量的網(wǎng)頁,在客戶端訪問時,首先從內(nèi)存中查找是否存在客戶端訪問的網(wǎng)頁內(nèi)容,如果存在,則直接從內(nèi)存中將相應的內(nèi)容返回給客戶端;如果不存在,則從磁盤中將網(wǎng)頁內(nèi)容讀入到內(nèi)存,并返回給客戶端。【實驗思路】:客戶端連接之后,在線程的處理函數(shù)handle()函數(shù)中,從內(nèi)存中查找相應的網(wǎng)頁內(nèi)容,發(fā)送至客戶端。如果在內(nèi)存中找不到,則通過調(diào)用store()函數(shù)從磁盤中讀取該網(wǎng)頁到內(nèi)存,當內(nèi)存中的網(wǎng)頁個數(shù)大于100的時候,通過某種算法從內(nèi)存中移除某個網(wǎng)頁,然后重新存入新的網(wǎng)頁。在主函數(shù)中,連接成功以后調(diào)用handle()函數(shù),然后在handle()函數(shù)中,如果找不到請求的網(wǎng)頁,則調(diào)用store()函數(shù)。【主要代碼及注釋】----main函數(shù):

      void main(int argc, _TCHAR* argv[]){ //聲明處理函數(shù),作為QueueUserWorkItem的一個參數(shù)

      DWORD WINAPI handle(void *);//初始化WinSock庫

      WORD wVersionRequested;WSADATA wsaData;

      wVersionRequested = MAKEWORD(2, 2);

      int wsaret=WSAStartup(wVersionRequested,&wsaData);if(wsaret)

      return;//創(chuàng)建SOCKET

      SOCKET socketSrv;

      socketSrv=socket(AF_INET,SOCK_STREAM,0);if(socketSrv==INVALID_SOCKET)

      return;SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(87);

      //綁定套接字

      if(bind(socketSrv,(struct sockaddr*)&addrSrv,sizeof(SOCKADDR))){ //關閉連接

      shutdown(socketSrv,1);closesocket(socketSrv);

      WSACleanup();return;} //等待客戶端連接

      SOCKADDR_IN addrCli;int len=sizeof(SOCKADDR);//監(jiān)聽端口

      if(listen(socketSrv,5)==SOCKET_ERROR){ printf(“監(jiān)聽失敗!n”);} while(true){ //接受連接

      SOCKET socketconn= accept(socketSrv,(SOCKADDR*)&addrCli, &len);

      if(socketconn==SOCKET_ERROR)

      {

      cout<<“接受連接失敗!”;

      return;

      }

      cout<<“連接成功”<

      shutdown(socketSrv,1);closesocket(socketSrv);

      WSACleanup();return;}----handle函數(shù):

      DWORD WINAPI handle(void *para){ //聲明store函數(shù),用來從磁盤中讀取網(wǎng)頁內(nèi)容到內(nèi)存

      void store(string);SOCKET socketconn=(SOCKET)para;//連接成功后與客戶端進行會話 char recvBuff[1024];string sendBuff;

      string locDir;ifstream fp;//接收請求

      if(recv(socketconn,recvBuff,1024,0)==SOCKET_ERROR)return 0;//讀取http請求頭

      string recvBuffer=recvBuff;int posGet=recvBuffer.find(“GET”,0);int posHttp=recvBuffer.find(“HTTP”,0);for(int pos=posGet+4;pos

      locDir.push_back('');

      continue;} locDir.push_back(recvBuffer[pos]);} int len=locDir.length();//截取網(wǎng)頁的文件名

      string ine_str=locDir.substr(1,len-2);//從內(nèi)存中獲得該網(wǎng)頁的內(nèi)容

      string allcontent=webhtml[ine_str];//如果在內(nèi)存中找不到,則再從磁盤中把網(wǎng)頁讀入內(nèi)存,然后再從內(nèi)存中查找 if(allcontent==“"){ //調(diào)用store函數(shù),從磁盤中重新讀取網(wǎng)頁內(nèi)容 store(ine_str);//重新從內(nèi)存中讀取網(wǎng)頁內(nèi)容

      allcontent=webhtml[ine_str];} //將讀取的內(nèi)容追加入sendBuff中 sendBuff.append(allcontent);fp.close();//響應請求,將頁面信息發(fā)送到客戶端

      if(send(socketconn,sendBuff.c_str(),sendBuff.length(),0)==SOCKET_ERROR){

      cout<<”傳送文件錯誤!“;

      return 0;} shutdown(socketconn,1);closesocket(socketconn);//關閉連接

      return 0;}----Store()函數(shù):

      void store(string ine_str){

      //如果內(nèi)存中的網(wǎng)頁個數(shù)大于100個,則把第一個移除

      if(webhtml.size()>100){ map::iterator Iter=webhtml.begin();webhtml.erase(Iter);} string allchars=”“;//一個網(wǎng)頁中所有的字符

      char buffer[1024*10];//每次讀取1024個字節(jié)到緩存 ifstream fp;//文件流

      fp.open((loc_webpage+ine_str).c_str(),std::ios::binary);//打開指定文件 if(fp.fail())cout<<”存儲文件失??!"<

      fp.getline(buffer,1024*10);//從文件中讀取1024個字節(jié)到緩沖區(qū)里面

      allchars.append(buffer);//把緩存中的字節(jié)加到allchars后面

      buffer[0]='