第一篇:論基于Web服務(wù)器的企業(yè)應(yīng)用集成
論基于Web服務(wù)器的企業(yè)應(yīng)用集成摘要:
去年,我所在的公司承擔(dān)了一項為X卷煙廠建立企業(yè)應(yīng)用集成的項目。主要目標(biāo)是將該廠原使用的辦公系統(tǒng)、人力資源系統(tǒng)、生產(chǎn)管理系統(tǒng)等系統(tǒng)進(jìn)行集成,使之成為一個無縫連接的整體。我有幸參與了該項目,并擔(dān)任主要的規(guī)劃設(shè)計工作。
針對該項目,我們綜合運用了J2EE平臺構(gòu)架、Web Service、IBM websphere等技術(shù),來實現(xiàn)基于Web Service的企業(yè)應(yīng)用集成,其效果相當(dāng)顯著。而且如果今后有新的系統(tǒng)加入,也能夠很容易地添加。用戶在使用該系統(tǒng)后,生產(chǎn)、經(jīng)營效率有了大幅度的提高,得到了用戶的一致好評。
正文:
去年,我公司承擔(dān)了X卷煙廠的企業(yè)應(yīng)用集成項目。該卷煙廠是一家大型國有企業(yè),經(jīng)過多年的發(fā)展和積累,形成一套行之有效的管理機(jī)制,并實施了一系列的管理、生產(chǎn)自動化系統(tǒng),如LOTUS的Domino辦公自動化系統(tǒng)、人力資源管理系統(tǒng)、CRM客戶關(guān)系管理系統(tǒng)、用友財務(wù)軟件等商品化軟件,也有該廠與一家軟件公司合作開發(fā)的生產(chǎn)管理軟件(具有源代碼)。這些軟件實施于不同時間,也為各部門的生產(chǎn)、管理效率的提高起到了巨大的推動作用。但是各個分散獨立的系統(tǒng)也給企業(yè)的發(fā)展造成了瓶頸,生產(chǎn)第一線的數(shù)據(jù)不能隨時反饋給決策層領(lǐng)導(dǎo),供應(yīng)鏈、銷售鏈不能與生產(chǎn)管理系統(tǒng)銜接,只能用手工方式將數(shù)據(jù)輸入生產(chǎn)管理系統(tǒng),不僅速度慢,而且經(jīng)常容易出錯。
隨著企業(yè)的發(fā)展,這些系統(tǒng)也成為了一個個信息孤島,給企業(yè)的進(jìn)一步發(fā)展造成了瓶頸。為徹底消除這些限制企業(yè)發(fā)展的因素,該廠決定實施企業(yè)應(yīng)用集成,將各個獨立的系統(tǒng)集成起來,成為一個無縫連接的整體,使各種信息在整個企業(yè)范圍內(nèi)流動起來,促進(jìn)企業(yè)的進(jìn)一步發(fā)展。
我公司成立了項目組,我有幸參與了該項目,并擔(dān)任主要的規(guī)劃設(shè)計工作。
根據(jù)以往項目的經(jīng)驗,我們首先進(jìn)行了技術(shù)方案的選擇。目前企業(yè)應(yīng)用集成通行的做法有三種:數(shù)據(jù)層集成、業(yè)務(wù)層集成和表示層集成。數(shù)據(jù)層集成需要修改大量的應(yīng)用程序,而使用的系統(tǒng)中一些是商業(yè)軟件,我們無法得到源代碼。而表示層集成只是集成了各個應(yīng)用程序的顯示界面,就好像只是做一層外裝修,無實質(zhì)性的改變,而且有可能成為整個集成系統(tǒng)的瓶頸。業(yè)務(wù)層集成則克服數(shù)據(jù)層、表示層集成的這些缺點,而程序代碼的修改量不大,且只是針對沒有API(應(yīng)用程序接口)的應(yīng)用程序。因此,我們根據(jù)企業(yè)目前系統(tǒng)使用的狀況及我們以往開發(fā)類似項目的成功經(jīng)驗,經(jīng)項目組討論決定采用業(yè)務(wù)層集成方式來完成該項目。
我們采用了J2EE的平臺構(gòu)架,并為企業(yè)將來在企業(yè)間和電子商務(wù)的進(jìn)一步集成,采用了基于Web服務(wù)的集成方案。Web服務(wù)具有各個應(yīng)用程序之間松散耦合、位置透明、協(xié)議獨立的特點,某個應(yīng)用程序的增減變動不會影響到其它應(yīng)用程序的運行,并且它所使用的SOAP、XML等協(xié)議和技術(shù)也不被某一家公司所控制。
選定了實現(xiàn)平臺,我們開始對各個系統(tǒng)進(jìn)行封裝、組合。各個系統(tǒng)的接口的異構(gòu)性帶來了訪問上的麻煩。為了屏蔽接口上的差異性,我們采用了將這些接口映射為統(tǒng)一的虛擬組件。虛擬組件一邊通過J2EE低層接口顯示現(xiàn)有應(yīng)用程序的功能,另一邊通過現(xiàn)有應(yīng)用程序接口API和它們進(jìn)行連接。這樣用戶就可以用統(tǒng)一的方式訪問虛擬組件而獲得應(yīng)用程序的功能。我們通過采用J2EE的JCA方式實現(xiàn)虛擬組件對各個應(yīng)用程序的訪問,為每一個應(yīng)用程序定制一個資源適配器,并插入J2EE的應(yīng)用程序服務(wù)器中。資源適配器拿有一個指定的原系統(tǒng)庫(用Java寫的或帶有自身接口單元的庫),這個庫同它描述的原系統(tǒng)具有連通性。通過J2EE平臺的JCA這樣一種方式,我們向用戶提交了一個統(tǒng)一的調(diào)用接口。
解決了接口問題,接下來就要將各應(yīng)用程序提供的服務(wù)通過WSDL描述服務(wù),并且注
冊到企業(yè)內(nèi)部的加UDDI中心。我們采用了Apache axis 1.0來開發(fā)Web服務(wù),IBM的Websphere作為消息服務(wù)器。根據(jù)該廠的要求,將各應(yīng)用程序提供的服務(wù)分為5個種類來提供Web服務(wù),分別是銷售、人事、生產(chǎn)、供應(yīng)、辦公五個部分,再將各應(yīng)用程序提供的Web服務(wù)具體細(xì)分,如生產(chǎn)部分提供了物料需求計劃服務(wù)、庫存服務(wù)、產(chǎn)品目錄更新服務(wù)等。并WSDL實用程序生成代理代碼,發(fā)布Web服務(wù)程序,在統(tǒng)一的服務(wù)發(fā)布服務(wù)器上,通過UDDI服務(wù)實現(xiàn)發(fā)現(xiàn)Web服務(wù)功能,便于查詢系統(tǒng)各模塊提供的Web Service服務(wù)。服務(wù)請求者按照標(biāo)準(zhǔn)接口構(gòu)造XML格式的SOAP Request并通過HTTP方式向UDDI注冊中心發(fā)出請求。當(dāng)有一個新的物料需求計劃生成時,我們通過使用JMS中間件來發(fā)布物料需求計劃,使得訂閱該主題的供應(yīng)商得到消息。
企業(yè)信息門戶EIP我們采用IBM WebSphere Portal Server來實現(xiàn)。對用戶帳號采用統(tǒng)一管理,統(tǒng)一授權(quán),用戶登錄系統(tǒng)時采用統(tǒng)一認(rèn)證服務(wù)調(diào)用接口以實現(xiàn)用戶身份的認(rèn)證過程,并通過單點登錄SSO,從根本上改變了現(xiàn)有各應(yīng)用程序帳號之間進(jìn)行漫游,不需要進(jìn)行重新登錄,給用戶提供了極大的便利,并減少了不法用戶利用認(rèn)證攻擊應(yīng)用程序的可能,極大地提高了系統(tǒng)的安全性和可用性。
在系統(tǒng)實施過程中,我們也遇到了一些困難。
生產(chǎn)部門使用的生產(chǎn)管理系統(tǒng)是由該廠與一家軟件合作開發(fā)的,沒有預(yù)留API,我們便對該系統(tǒng)進(jìn)行了改造,由于該軟件公司已找不到,而且該系統(tǒng)文檔難以找到,因此我們對接口改造會對原應(yīng)用程序造成的兼容性、穩(wěn)定性的問題估計不足,改造完成后只進(jìn)行了接口改造的回歸測試,使得該應(yīng)用程序一直不穩(wěn)定。于是我們重新對該系統(tǒng)進(jìn)行了深入透徹的了解,決定采用CORBA規(guī)范的接口定義語言IDL描述接口,而J2EE與CORBA又有極大的相關(guān)性,便于今后的封裝、組合。接口改造完成后,我們進(jìn)行了反復(fù)的回歸測試和穩(wěn)定性測試,才使系統(tǒng)又恢復(fù)原來的運行水平。
還有就是與各應(yīng)用程序供應(yīng)商的協(xié)調(diào),大家都站在各自的立場上,設(shè)想對方的系統(tǒng)接口應(yīng)該如何改,以適應(yīng)自己的接口。經(jīng)過我們和該廠的努力,最終大家都同意以最有利于集成系統(tǒng)的角度進(jìn)行改造。
在本項目中,我們綜合運用了J2EE平臺構(gòu)架、Web Service、IBM WebSphere等技術(shù),來實現(xiàn)基于Web Service的企業(yè)應(yīng)用集成,其效果相當(dāng)顯著。而且如果今后有新的系統(tǒng)加入,也能夠很容易地添加。用戶在使用該系統(tǒng)后,生產(chǎn)、銷售、供應(yīng)、辦公成為一體化的無縫連接的一個整體,生產(chǎn)、經(jīng)營效率有了大幅度的提高,得到了用戶的一致好評。
我從實踐中領(lǐng)會到,企業(yè)應(yīng)用集成是一項技術(shù)復(fù)雜,工程繁雜的工程,但也是企業(yè)目前最急需解決的問題。同時我也認(rèn)識到,企業(yè)應(yīng)用集成還有很多領(lǐng)域和知識點需要繼續(xù)研究和實踐,新技術(shù)的應(yīng)用也帶來了新的要求和挑戰(zhàn),我將在企業(yè)應(yīng)用集成領(lǐng)域不斷探索,不斷實踐。
第二篇:Web服務(wù)器實驗3報告
操作系統(tǒng)實驗報告三
姓名:陳玉博
學(xué)號:2011011207
日期:2013-11-24
【實驗內(nèi)容】:設(shè)計一段內(nèi)存結(jié)構(gòu),能夠緩存一定數(shù)量的網(wǎng)頁,在客戶端訪問時,首先從內(nèi)存中查找是否存在客戶端訪問的網(wǎng)頁內(nèi)容,如果存在,則直接從內(nèi)存中將相應(yīng)的內(nèi)容返回給客戶端;如果不存在,則從磁盤中將網(wǎng)頁內(nèi)容讀入到內(nèi)存,并返回給客戶端?!緦嶒炈悸贰浚嚎蛻舳诉B接之后,在線程的處理函數(shù)handle()函數(shù)中,從內(nèi)存中查找相應(yīng)的網(wǎng)頁內(nèi)容,發(fā)送至客戶端。如果在內(nèi)存中找不到,則通過調(diào)用store()函數(shù)從磁盤中讀取該網(wǎng)頁到內(nèi)存,當(dāng)內(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))){ //關(guān)閉連接
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;//連接成功后與客戶端進(jìn)行會話 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();//響應(yīng)請求,將頁面信息發(fā)送到客戶端 if(send(socketconn,sendBuff.c_str(),sendBuff.length(),0)==SOCKET_ERROR){ cout<<”傳送文件錯誤!“; return 0;} shutdown(socketconn,1);closesocket(socketconn);//關(guān)閉連接 return 0;}----Store()函數(shù): void store(string ine_str){ //如果內(nèi)存中的網(wǎng)頁個數(shù)大于100個,則把第一個移除 if(webhtml.size()>100){ map 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]='
主站蜘蛛池模板:
97久久精品无码一区二区|
亚洲国产成人久久一区久久|
夹得好湿真拔不出来了动态图|
亚洲国产日韩a在线播放|
暖暖免费 高清 日本社区在线观看|
国产精品久久久久影院嫩草|
亚洲一区激情校园小说|
国产美女在线精品免费观看网址|
伊甸园亚洲av久久精品|
无码av在线一本无码|
爆乳高潮喷水无码正在播放|
久久无码喷吹高潮播放不卡|
女人高潮被爽到呻吟在线观看|
色翁荡息又大又硬又粗又爽电影|
精品久久久久久|
香蕉久久av一区二区三区app|
久久久久久99av无码免费网站|
国产乱xxⅹxx国语对白|
久久亚洲人成网站|
亚洲精品成人久久电影网|
色窝窝无码一区二区三区色欲|
久久精品视频在线看|
老司机午夜永久免费影院|
国产美女露脸口爆吞精|
菠萝菠萝蜜午夜视频在线播放观看|
亚洲熟妇无码一区二区三区导航|
久久9精品区-无套内射无码|
精品国产拍国产天天人|
国产成人综合亚洲精品|
亚洲国产午夜精品理论片|
国内精品久久久久久影院8f|
亚洲日韩乱码久久久久久|
国产一区二区三区免费高清在线播放|
中文字幕一区二区三区四区五区|
人妻少妇精品系列|
久久精品免费一区二区喷潮|
欧美成人一区二区三区在线观看|
自拍偷自拍亚洲精品被多人伦好爽|
亚洲综合性av私人影院|
综合 欧美 亚洲日本|
免费网站内射红桃视频|