第一次編寫EJB總結!

    這個月打算學習EJB, 看了頭3章,發現有點亂,呵呵。果然EJB不是那麼容易學的,第一個HelloWorld就搞了4個小時,但總算聽到了EJB的聲音了。具體的全過程我就不說了,主要寫下和我一樣是菜鳥的朋友容易犯的錯誤,也歡迎大蝦們指教。

    我用的是JBoss+Eclipse。

    安裝JBoss沒什麼說得了,記得安裝完後在環境變量裏添加:JBOSS_HOME=c:/jboss-4.0.2(這裏是你安裝JBoss的路徑),將%JBOSS_HOME%/bin加入至PATH中。

    說明下JBoss的目錄結構,對初學者還是有些幫助的。
bin : JBoss 開關 Scripts   
client
: 與JBoss通訊使用的客戶端 libraries ( JARs )
docs
: 設定文檔樣本. ( 如資訊庫設定文檔樣本等 )
docs/dtd
: JBoss 不同XML 的 Document Type Definitions (DTDs) 檔.
lib
: JBoss 啓動時, 會讀取放在這裏被不同配置共享的 libraries.
server
: 存放 JBoss 不同配置檔案.
server/default
: JBoss 預設的配置檔案.
server/default/conf
: JBoss 配置檔案.
server/default/data
: JBoss 資料庫.
server/default/deploy
: JBoss 自動發佈檢測目錄. ( EBJ-JARs, WARs 及 EARs 放下去, JBoss 會自動檢測)
server/default/lib
: JBoss 啓動此配置目錄時, 會讀取這裏的 libraries.
server/default/log
: 存放 JBoss 日誌檔案.
server/default/tmp
: 存放 JBoss 咱存檔案.
server/default/work
: 存放 JBoss 編譯後的java byte code.  

注意事項:
    1:ejb-jar.xml是放在META-INF文件夾裏,如果你要建立jboss.xml也是放在這裏。
    2:如果你在同一臺機器上運行客戶端代碼和JBOSS服務器的話,那以下代碼無須任何修改就可以運行,
          env.put(Context.PROVIDER_URL, "localhost:1099");
          如果在別的機器更換IP即可。
    3:如果你運行時出現ClassNotFound諸如此類的異常,說明你沒有導入包,導入即可。我現在運行是導入了         2個包,jnp-client.jar,jbossall-client.jar,它們是在JBoss下client目錄裏面的。
    4:看到網上有很多寫建立個jboss.xml,我運行後才理解它是用於設置JNDI的,其實像咱們這麼簡單可以不            需要建立。
       記住:Object obj = ctx.lookup("Hello");這裏"Hello"是你在ejb-jar.xml裏面的<ejb-name>得值,如果你建立  
       了jboss.xml那麼"Hello"應該換成<jndi-name>的值。

這是我jboss.xml:
   
    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "jboss_4_0.dtd" >
<jboss>
    <enterprise-beans>
        <session>
            <ejb-name>Hello</ejb-name>
            <jndi-name>example/Hello</jndi-name>
        </session>
    </enterprise-beans>
</jboss>

HelloClient.java:
   
package example;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import java.util.*;

public class HelloClient {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        Hashtable env = new Hashtable();
        
        env.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.jnp.interfaces.NamingContextFactory");
        env.put(Context.PROVIDER_URL, 
"localhost:1099");
        env.put(
"java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
        
        
try {
            Context ctx 
= new InitialContext(env);
            Object obj 
= ctx.lookup("Hello");
            
            HelloHome home 
= (HelloHome)javax.rmi.PortableRemoteObject.narrow(obj, HelloHome.class);
            Hello hello 
= home.create();
            
            System.out.println(hello.hello());
            
            hello.remove();
        }
 catch (Exception e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(e.getMessage());
        }

    }


}


以上是我總結的些經驗,希望給初學者一些幫助。
發佈了13 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章