最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

EJB輕松進階之一

 更新時間:2006年12月23日 00:00:00   作者:  
文章來源:硅谷動力 作者:中流砥柱

一、引言

  EJB(Enterprise JavaBeans)是Java程序設(shè)計中比較高級的內(nèi)容,也是Java程序員由入門級向高手級前進的門檻。SUN公司認證Java程序員(SCJP)與SUN公司認證Java開發(fā)員(SCJD)之間的一個顯著區(qū)別就是:SCJP不考EJB,而SCJD要考。隨著越來越多的企業(yè)采用J2EE平臺開發(fā)電子商務(wù)應(yīng)用系統(tǒng),EJB開發(fā)已成為今天的Java程序員必須要面對的問題。

  本文首先以一個例程介紹了一般分布式對象應(yīng)用程序的基本原理,然后從基本的下載、安裝、配置開始,逐步介紹EJB程序編程的方法,從而使EJB的學(xué)習(xí)成為一件輕松而有趣的事情。

二、典型的分布式對象程序

  不管是CORBA還是RMI,其實現(xiàn)分布式對象的策略都是相似的,我們可以用一個簡單的程序例子來模擬一個分布式對象程序的構(gòu)成。

  這個例子模擬了一個遠程請求對象屬性的過程。有一個遠程對象Dog在網(wǎng)絡(luò)上,現(xiàn)在要得到它的名字(strName)屬性。程序在客戶端設(shè)一個存根(Dog_Stub)類,在服務(wù)器端啟動一個骨架(dog_Skeleton)類,這兩個類都實現(xiàn)了Dog接口,Dog_Stub與Dog_Skeleton通過Socket進行遠程通信。當客戶程序DogClient向Dog_Stub發(fā)出獲取名字屬性的請求時,Dog_Stub對象把方法名“getName()”作為一個字符串通過Socket發(fā)給遠程的Dog_Skeleton對象,Dog_Skeleton對象收到這個字符串后再根據(jù)字符串的內(nèi)容執(zhí)行DogServer對象的getName()方法,得到Dog的名字,然后又通過Socket返回給DogStub對象。整個流程通過網(wǎng)絡(luò)實現(xiàn),但對于客戶程序DogClient來講,它并不知道真正的Dog對象在哪里,甚至也不知道這個過程通過了網(wǎng)絡(luò),它只知道發(fā)出的獲取名字屬性的請求得到了滿意的結(jié)果而已。


  事實上,CORBA或Java RMI的實現(xiàn)方式與此類似,只不過遠沒有這么簡單而已。這個程序?qū)τ谡f明分布式對象應(yīng)用程序的執(zhí)行機理是很有用的。

程序源代碼如下所示:


文件Dog.java

public interface Dog

{

public String getName() throws Exception;

}/* Dog */

文件DogClient.java

public class DogClient

{

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

{

Dog dog = new Dog_Stub();

String strName = dog.getName();

System.out.println( "姓名:" + strName );

}//main()

}/* DogClient */

文件DogServer.java

public class DogServer implements Dog

{

String strName;

int intAge;

public String getName() throws Exception

{

return strName;

}//getName()

public DogServer( String strNameInput )

{

strName = strNameInput;

}//DogServer()

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

{

New Dog_Skeleton( new DogServer( "TOMCAT" ) );

}//main()

}/* DogServer */

文件Dog_Skeleton.java

import java.io.*;

import java.net.*;

public class Dog_Skeleton extends Thread

{

static ServerSocket ss = null;

DogServer ds;

public Dog_Skeleton( DogServer dsInput ) throws Exception

{

ds = dsInput;

if ( ss == null )

ss = new ServerSocket( 8000 );

this.start();

}//Dog_Skeleton()

public synchronized void run()

{

Try

{

while ( ss != null )

{

Socket socket = ss.accept();

ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() );

ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );

String strMethodName = ( String )ois.readObject();

if ( strMethodName.equals( "getName()" ) )

oos.writeObject( ds.getName() );

oos.flush();

ois.close();

oos.close();

socket.close();

}//while

}//try

catch( Exception e )

{

e.printStackTrace();

}//catch

}//run()

}/* Dog_Skeleton */

文件Dog_Stub.java

import java.io.*;

import java.net.*;

Public class Dog_Stub implements Dog

{

Socket socket;

ObjectOutputStream oos;

ObjectInputStream ois;

public Dog_Stub() throws Exception

{

socket = new Socket( "wudi", 8000 );

Oos = new ObjectOutputStream( socket.getOutputStream() );

Ois = new ObjectInputStream( socket.getInputStream() );

}//Dog_Stub()

public String getName() throws Exception

{

Oos.writeObject( "getName()" );

Oos.flush();

return ( String )ois.readObject();

}//getName()

}/* Dog_Stub */


運行該分布式對象程序時,首先運行DogServer,然后在客戶端運行DogClient即可看到結(jié)果。

相關(guān)文章

  • 淺談Sharding-JDBC強制路由案例實戰(zhàn)

    淺談Sharding-JDBC強制路由案例實戰(zhàn)

    本文主要介紹了淺談Sharding-JDBC強制路由案例實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringBoot實現(xiàn)評論回復(fù)功能(數(shù)據(jù)庫設(shè)計)

    SpringBoot實現(xiàn)評論回復(fù)功能(數(shù)據(jù)庫設(shè)計)

    這篇文章主要介紹了SpringBoot實現(xiàn)評論回復(fù)功能(數(shù)據(jù)庫設(shè)計),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • mybatis test標簽如何判斷值是否相等

    mybatis test標簽如何判斷值是否相等

    這篇文章主要介紹了mybatis test標簽判斷值是否相等的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java如何讀取resources目錄和同級目錄文件

    java如何讀取resources目錄和同級目錄文件

    介紹了Java中讀取resources目錄和同級目錄文件的方法,并討論了在IDE和發(fā)布環(huán)境中可能遇到的問題,通過測試發(fā)現(xiàn),執(zhí)行目錄可能會影響文件讀取,建議在使用`user.dir`時注意jar包的運行目錄問題
    2024-12-12
  • 多數(shù)據(jù)源@DS和@Transactional實戰(zhàn)

    多數(shù)據(jù)源@DS和@Transactional實戰(zhàn)

    這篇文章主要介紹了多數(shù)據(jù)源@DS和@Transactional實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 談?wù)勗贘ava發(fā)送郵件中遇到的的問題

    談?wù)勗贘ava發(fā)送郵件中遇到的的問題

    本文介紹了在利用Java發(fā)送郵件過程中遇到的的兩個問題,以及如何解決這兩個問題。如果大家也遇到了這些問題,可以來參考借鑒。
    2016-08-08
  • Java數(shù)據(jù)類型轉(zhuǎn)換的示例詳解

    Java數(shù)據(jù)類型轉(zhuǎn)換的示例詳解

    Java程序中要求參與的計算的數(shù)據(jù),必須要保證數(shù)據(jù)類型的一致性,如果數(shù)據(jù)類型不一致將發(fā)生類型的轉(zhuǎn)換。本文將通過示例詳細說說Java中數(shù)據(jù)類型的轉(zhuǎn)換,感興趣的可以了解一下
    2022-10-10
  • 淺析java創(chuàng)建文件和目錄

    淺析java創(chuàng)建文件和目錄

    這篇文章主要介紹了淺析java創(chuàng)建文件和目錄的關(guān)鍵技術(shù)點以及演示示例,是篇非常不錯的文章,有需要的朋友可以參考下
    2014-09-09
  • springboot接收json數(shù)據(jù)時,接收到空值問題

    springboot接收json數(shù)據(jù)時,接收到空值問題

    這篇文章主要介紹了springboot接收json數(shù)據(jù)時,接收到空值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 詳解Java編譯優(yōu)化之循環(huán)展開和粗化鎖

    詳解Java編譯優(yōu)化之循環(huán)展開和粗化鎖

    之前在講JIT的時候,有提到在編譯過程中的兩種優(yōu)化循環(huán)展開和粗化鎖,今天從Assembly的角度來驗證一下這兩種編譯優(yōu)化方法,快來看看吧。
    2021-06-06

最新評論

崇信县| 翼城县| 泗洪县| 沅江市| 禹城市| 保康县| 曲松县| 扬中市| 张家口市| 洛南县| 泰和县| 伊川县| 伊宁市| 莒南县| 阿勒泰市| 繁昌县| 固始县| 尼勒克县| 鄂托克前旗| 海伦市| 西安市| 东乡族自治县| 耿马| 海淀区| 贵南县| 江源县| 大兴区| 会宁县| 梁平县| 河间市| 固安县| 罗平县| 汉寿县| 高阳县| 阳东县| 东阿县| 墨玉县| 石狮市| 崇文区| 即墨市| 栾城县|