posts - 0, comments - 77, trackbacks - 0, articles - 356
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

EJB初学日记(1)

Posted on 2007-09-18 21:27 semovy 阅读(186) 评论(0)  编辑  收藏 所属分类: EJB

今天终于还是下定决心看看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应该有解决的办法吧.看以后吧

希望以后的日记中能搞清楚这个问题


只有注册用户登录后才能发表评论。


网站导航: