今天終于還是下定決心看看EJB,看著SPRING看了兩天,覺得一點頭緒都沒有,我不是一個講究速成的人,但是總是感覺和它們的理念不太一樣,唉,真可憐,都怪自己,初學JAVA的時候就把J2SE看得太重了.
在學習了J2SE一整年之后,發現JAVA的應用還遠遠沒有掌握,我學習一年的結果就是剛剛對JAVA有所了解而已,回首這一年的路,挺艱難的,但是現在以一個過來人的姿態去看的時候,我又學得很慶幸.因為我沒有放棄,在我學習條件最艱苦的時候,在我最無助的時候我都沒有放棄.曾經記得為了想一個小小的程序,為了實現一個小小的功能,在那里苦思冥想,想得都想吐了,還記得半夜從夢中醒來的時候,腦子里滿是程序代碼,甚至做夢的時候也在編程序,想算法.就這樣,一年,我磕磕碰碰的走過來了.
一年后的今天,我將重新站在一個全新的起點上:J2EE,面全企業的應用,希望以后心態能像一年前一樣.踏踏實實地走過.一步一個腳印.記得一年前,我剛學JAVA時,喜歡寫學習日記,喜歡把自己不懂的,以及當天收獲的,還有對一些程序的理解和看法記下來,并且過一段時間就去看以前寫的學習日記,那時候經常會發現自己有所進步.那種感覺,真的很好.
今天算我第一天,我下面把我今天所看到的,寫下來,以及自己不太了解的地方寫下來,做為一個初學者最真實的心理反應和想法,也為自己J2EE之路留下些紀念.
今天下載了黎活明的EJB3.0實例教程,學了如何裝JBoss4.0,第一次我下載的是免安裝版,直接解壓縮就可以用了,但是一直都配置不好那個EJB的應用,后來,刪掉重新按照書上的地址下載了一個安裝版的,并按照介始的順序和方法安裝了一遍,一布署,呵,真的可以了.看到網頁打開的一霎那,真的感覺很有成就感,雖然應用都是別人寫的.
由于此書用的IDE是Eclipse,可是我用的IDE是NetBeans,所以有些地方就實踐不了了,但是能實踐的,我都盡量會去實踐一下,哪怕是抄代碼,我也會親手抄一遍.我覺得這對我們初學者來說有很大的幫助.
今天學的是會話BEAN,有狀態會話BEAN和無狀態會話BEAN
聲明接口的代碼
/*
* HelloWorld.java
*
* Created on 2006年12月7日, 下午9:26
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package lbf.demo;
/**
*
* @author lbf
*/
public interface HelloWorld {
/** Creates a new instance of HelloWorld */
public String sayHello(String who);
}
實現接口的代碼
/*
* HelloWorldBean.java
*
* Created on 2006年12月7日, 下午9:27
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package lbf.demo.impl;
/**
*
* @author lbf
*/
import lbf.demo.*;
import javax.ejb.*;
@Stateless
@Remote({HelloWorld.class}) //表示是遠程調用
public class HelloWorldBean implements HelloWorld {
/** Creates a new instance of HelloWorldBean */
public HelloWorldBean() {
}
public String sayHello(String who){
return who+"說:這是我的第一個EJB東東??!";
}
}
打包成JAR文件以后,放到JBOSS_HOME/server/all/deploy下面就可以了,JBOSS支持熱布置,這一點和TOMCAT一樣
只是兩者的目錄結構有一點不一樣而已,并且它也支持WAR布署.同樣也是復制到JBOSS_HOME/server/all/deploy下面
用ctx.lookup("HelloWorldBean/remote"); 來查找綁定的BEAN,一般命名規則是
在這里我要重點說明一下EJB JNDI名稱默認的命名規則,命名規則如下:
1> 如果EJB應用打包成后綴為*.ear 的發布文件,默認的 JNDI 名稱是
訪問本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
訪問遠程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote
例:如果HelloWorld應用打包成HelloWorld.ear 文件,訪問她遠程接口的 JNDI 名是:
HelloWorld/HelloWorldBean/remote
2> 如果EJB應用打包成后綴為*.jar 的發布文件, 默認的 JNDI 名稱是
訪問本地接口:EJB-CLASS-NAME/local
訪問遠程接口:EJB-CLASS-NAME/remote
例: HelloWorld應用打包成HelloWorld.jar 文件,訪問她遠程接口的 JNDI名稱是:HelloWorldBean/remote
另外有一點要注意:EJB-CLASS-NAME 是不帶包名的,如 com.foshanshop.ejb3.impl.HelloWorldBean只需取
HelloWorldBean。
目前網上很多教材獲取JNDI名的方式都過時了,如:
HelloWorld helloworld = (HelloWorld) ctx.lookup(HelloWorld.class.getName());
stateless每次查找都會返回同一個BEAN,而stateful每次查找都會產生一個新的BEAN,用來保存特定的客戶會話
那按照上面的命名規則,豈不是很容易生成相同的名字的BEAN?因為它的名字那么短,如何避免這種情況呢.EJB應該有解決的辦法吧.看以后吧
希望以后的日記中能搞清楚這個問題