md build
javac -d build Hello.java HelloHome.java HelloBean.java
md build\Meta-inf
copy *.xml build\Meta-inf
md build\images
copy *.gif build\images
cd build
jar cv0f std_myfirstejb_hello.jar META-INF *.class images
cd ..
java weblogic.ejbc -compiler javac build\std_myfirstejb_hello.jar build\myfirstejb_hello.jar
這樣,在程序代碼編輯好的情況下,只運行這個命令腳本程序,就可以完成EJB開發。
2.4 EJB部署
EJB的部署有很多種方法,最簡單的一種就是把C:\work\hello\build目錄下的myfirstejb_hello.jar文件拷貝到服務器的applications目錄下,即C:\bea\wlserver6.0\config\mydomain\applications目錄下。如果服務器已經啟動,則在拷貝的時候不需要重新啟動服務器。服務器會自動檢測到新拷貝的EJB。
2.5 EJB運行測試
編寫一個簡單的客戶端程序HelloClient來測試已部署的ejb。
2.5.1 客戶端測試程序代碼編寫
在文本編輯器中編輯HelloClient.java文件,并保存在C:\work\hello目錄下,其代碼如下:
//本類需要引入的類或接口
import java.rmi.RemoteException;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
/**
* 這是EJB的客戶端測試程序
*/
public class HelloClient {
private static final String JNDI_NAME = "HelloHome";
private String url;
private HelloHome home;
public HelloClient(String url)
throws NamingException
{
this.url = url;
home = lookupHome();
}
void test()
throws RemoteException,CreateException
{
Hello hello = (Hello) PortableRemoteObject.narrow(home.create(), Hello.class);
System.out.println("I am in client. "+hello.sayHello());
}
/**
* 運行這個實例:
* java HelloClient t3://localhost:7001
*/
public static void main(String[] args) throws Exception {
System.out.println("\n客戶端程序測試開始...\n");
String url = "t3://localhost:7001";
// 解析命令行
if (args.length != 1) {
System.out.println("用法: java HelloClient t3://hostname:port");
return;
} else {
url = args[0];
}
HelloClient client = null;
try {
client = new HelloClient(url);
} catch (NamingException ne) {
System.exit(1);
}
try {
client.test();
} catch (Exception e) {
System.exit(1);
}
System.out.println("\n客戶端程序測試結束...\n");
}
/**
* 查找 EJB 的主接口
*/
private HelloHome lookupHome()
throws NamingException
{
Context ctx = getInitialContext();
Object home = ctx.lookup(JNDI_NAME);
return (HelloHome) PortableRemoteObject.narrow(home, HelloHome.class);
}
/**
* 使用屬性對象獲取上下文
*/
private Context getInitialContext() throws NamingException {
Properties h = new Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, url);
return new InitialContext(h);
}
}
2.5.2 客戶端測試程序代碼編譯
請執行以下操作:
(1)在hello目錄下創建client子上當放置客戶端測試程序,創建client目錄,拷貝文件。執行:
c:\work\hello>md client
c:\work\hello>copy HelloClient.java client
注意:因為HelloClient類需引入Hello和HelloHome接口,因此要從build目錄下拷貝Hello.class和HelloHome.class文件到client目錄。
c:\work\hello>copy build\Hello.class client
c:\work\hello>copy build\HelloHome.class client
(2)進入client目錄
c:\work\hello>cd client
(3)編譯:
c:\work\hello\client>java HelloClient.java
至此客戶端測試程序代碼編譯完畢。
也可以把這些命令做成一個命令腳本文件build_client.cmd,保存在C:\work\hello目錄,其代碼如下:
md client
copy HelloClient.java client
copy build\Hello.class client
copy build\HelloHome.class client
cd client
javac HelloClient.java
2.5.3 運行測試
運行測試程序,執行如下操作:
(1)啟動Weblogic Server 6.0的缺省服務器,Weblogic Server的啟動是個簡單的過程,可以通過開始菜單和直接運行啟動命令腳本兩種方式,詳細情況請參見第1章。
(2)運行測試程序。在命窗口中進入C:\work\hello\client目錄,執行:
c:\work\hello\client>java HelloClient t3://127.0.0.1:7001
(3)觀察運行結果:應該如下:
客戶端程序測試開始...
I am in client. Hello World
客戶端程序測試結束...
而在Weblogic Server的命令行窗口中打印如下信息:
I am in an EJB of Server .Hello World
并且每運行一次,這行信息就打印一次。
2.6 常見故障及解決方法
(1)在命令行窗口中運行javac命令出現:
"java"不是內部或外部命令,也不是可運行的程序或批處理文件。
原因:javac.exe命令文件所有的路徑沒有包含在環境變量Path中。
(2)執行javac -d build Hello.java HelloHome.java HelloBean.java 命令時出現編譯錯誤,其中有一條錯誤是:
cannot resolve symbol
symbol : class EJBHome
location : package ejb
impor javax.ebj.EJBHome;
原因:javac.exe命令文件甩在的路徑沒有被包含在環境變量Path中。
解決方法:運行環境變量腳本命令setEnv.cmd。
(3)運行客戶端測試程序時,即運行:
java HelloClient t3://127.0.0.1:7001時,出現:
Exception in thread "main" java.lang.NoClassFoundError: HelloClient
可能的原因是沒有把“.”設置到環境變量classpath中。
(4)執行java weblogic.ejbc... 命令時,拋出org.xml.sax.SAXParseException異常。
原因:xml文件有語法錯誤
解決辦法:進行.xml文件有效性檢查。
(5)執行之后僅顯示一行文字程序就結束。
原因:可能沒有部署或者沒有正確部署EJB。
解決辦法:仔細查看本書3.4節的內容。
2.7 本章小結
本章首先討論如何進行一些準備工作,然后詳細介紹了一個簡單的EJB的開發過程,包括編寫代碼、編譯、打包、部署和測試運行。通過本章的學習,以期對J2EE的開發有一個感性的認識。
接下來的第3章到第7章將全面深入的討論EJB應用及其開發的有關問題。
----
對新手的提示:本章所稱腳本文件使用的擴展名是.cmd,實際上該文件在DOS平臺上擴展名為.bat,也稱為批處理文件。
本章的內容涉及到DOS環境設置,如果你想了解更多的內容可以查詢相關的內容
原文轉自:http://www.anti-gravitydesign.com