SLSB入门实例(Eclipse版)(已完成)
留位。ps:SLSB是EJB中物状态会话Bean的缩写(Stateless Session Bean)。。。
这里说明下,我一贯的发帖风格都是图文并茂,但本次帖子没有附图,主要原因是个人觉得MYECLIPSE的例子写得已经足够详细(可能英文会影响到大家理解,所以请配合我自己的文字看原文例子).还有强调一点是客户端的写法,这个是网上难以找到现成例子的东西,大家留意一下.
文章在8楼...
[ 本帖最后由 wool王 于 2006-7-24 18:55 编辑 ] 近期……
楼上和HJACK成上班族后好像少来编程版了 首先我这里声明下,我这文章其实不能算完全原创,因为许多方法和技巧我都是借鉴其他文章的.
建议大家看完我这文章后去看看Myeclipse关于创建EJB项目的帮助,我就是看那个入门的.(打开Eclipse,点击帮助就可以看到)不过是全英文的.我这里也当一次孙卫琴,把国外的东西"本地化"一下.
还有就是Myeclipse帮助那个例子没有写EJB客户端,而客户端代码我是通过JBuilder自动生成测试用例源码,然后拷贝到Eclipse中使用.这点算是我对Myeclipse帮助例子的一个加强吧.这里再提醒大家一点,如果大家学习时看的书是<<精通EJB>>的话,它EJB客户端连接服务器的写法好像是错误的(好像是第三章),我后来请教了其他人才知道. 晕...想开始写的时候发现自己没有JBOSS...看来得去公司写了... 楼主在上班时间干私事... 原帖由 用程序诠释生命 于 2006/7/16 19:59 发表
楼主在上班时间干私事...
你几时去优识上班?
我装JBOSS了,现在开始写. 在MYECLIPSE网站上找到帮助的原文.网址如下:http://myeclipseide.com/enterpriseworkbench/help/index.jsp?topic=/com.genuitec.myeclipse.doc/html/quickstarts/firstejb/index.html
我文章流程基本上与其相同,所以在此不详细说明,只是描述我我觉得值得小心的地方.
重点注意EJB客户端的写法. 一 建立EJB项目.记住选择J2EE1.3规范(具体原因myeclipse帮助已经说明).
二 按CTRL+N -> MYECLIPSE -> EJB ->SESSION BEAN...由于本实例是要创建SLSB,,,所以使用默认选项即可,,,读者只需选择一个你喜欢的包,还有起一个你喜欢的名字.我这里创建在org.woden.ejb.HelloEJB...好了,接着点击finish.
三 完成第二步后,我们已经创建了一个实现SessionBean接口的bean,并且工具帮你在bean内完成了必要的方法...十分方便.接着我们开始在bean内写业务方法....HelloEJB代码如下:
package com.woden.ejb;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
* XDoclet-based session bean. The class must be declared public according to
* the EJB specification.
*
* To generate the EJB related files to this EJB: - Add Standard EJB module to
* XDoclet project properties - Customize XDoclet configuration for your
* appserver - Run XDoclet
*
* Below are the xdoclet-related tags needed for this EJB.
*
* @ejb.bean name="Hello" display-name="Name for Hello" description="Description
* for Hello" jndi-name="ejb/Hello" type="Stateless"
* view-type="remote"
*/
public class HelloEJB implements SessionBean {
/** The session context */
private SessionContext context;
public HelloEJB() {
// TODO Auto-generated constructor stub
}
public void ejbActivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
public void ejbPassivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
public void ejbRemove() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
/**
* Set the associated session context. The container calls this method after
* the instance creation.
*
* The enterprise bean instance should store the reference to the context
* object in an instance variable.
*
* This method is called with no transaction context.
*
* @throws EJBException
* Thrown if method fails due to system-level error.
*/
public void setSessionContext(SessionContext newContext)
throws EJBException {
context = newContext;
}
/**
* An example business method
*
* @ejb.interface-method view-type = "remote"
*
* @throws EJBException
* Thrown if method fails due to system-level error.
*/
public void replaceWithRealBusinessMethod() throws EJBException {
// rename and start putting your business logic here
}
// 业务方法
/**
* @ejb.interface-method
*/
public String sayHello(String name) {
return "Hello!" + name;
}
}
这里需要特别注意,业务方法的注释@ejb.interface-method是必须的,它通知XDoclet能够生成相应的接口.(PS..至于XDoclet是什么,本版有另一位同学写了篇用XDoclet生成HIBERNATE映射文件的文章,大家可以参考下)...这里为了简单起见,省略其他注释...
前部分的注释是JNDI名,这里在客户端程序会用到,在后文笔者会提到.关于JNDI也是J2EE里面一个很重要概念,如果不很了解,建议参看相关书籍.
[ 本帖最后由 wool王 于 2006-7-18 00:30 编辑 ] 四 接下来配置XDoclet.项目上点鼠标右键 -> 属性 -> Myeclipse-XDoclet -> ADD STANDARD -> Standar EJB (这里建议读者看我前文贴的URL,myeclipse的帮助文档,里面有附图说明).这里可以删除不需要的属性(笔者为了偷懒就什么都没删了).在ejbdoclet上点右键 -> ADD -> jboss ,然后找到JBOSS,在右边添加两个属性:version=4.0;destDir=src/META-INF.确定.
五 运行XDoclet.项目上点击右键 -> Myeclipse -> run XDoclet ,我们会发现生成相关配置文件和接口.
六 配置EJB项目在JBOSS上运行(方法与tomcat一样)...
七 EJB客户端写法:(源码来自JBuilder生成的测试用例代码)
首先我们建立一个测试类,就命名为test.EJBClient吧.在项目中导入JBOSS客户端jar.jboss客户端jar的目录jboss目录下的/client目录下所有.jar文件,在项目的构建路径上导入就可以了.EJBClient源码如下:
package test;
import java.rmi.RemoteException;
import java.util.Hashtable;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import com.woden.interfaces.Hello;
import com.woden.interfaces.HelloHome;
public class EJBClient {
/**
* @param args
* @throws NamingException
* @throws CreateException
* @throws RemoteException
* @throws RemoveException
*/
public static void main(String[] args) throws NamingException, RemoteException, CreateException, RemoveException {
// TODO 自动生成方法存根
// TODO 自动生成方法存根
// Properties props = System.getProperties();
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
environment.put(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
environment.put(Context.PROVIDER_URL, "jnp://localhost:1099");
// Context ctx = new InitialContext(props);
Context ctx = new InitialContext(environment);
Object obj = ctx.lookup("ejb/Hello");
HelloHome home = (HelloHome) PortableRemoteObject.narrow(obj,
HelloHome.class);
Hello hello = home.create();
System.out.println(hello.sayHello("woden"));
hello.remove();
}
}
[ 本帖最后由 wool王 于 2006-7-18 08:28 编辑 ] 八 运行.打开JBOSS,经过N秒打开成功,然后运行客户端程序,在控制台打印出"Hello!woden"...
九 关于EJB.通过这个小例子,大家应该对SLSB有所了解,现在,可以更有体会的阅读<<精通EJB>>了. 得闲先至睇过。
wool辛苦了。253一下 原帖由 hjack 于 2006/7/18 12:52 发表
得闲先至睇过。
wool辛苦了。253一下
...:time:
楼主的Home接口 和 Remote接口都是用工具生成的吧?
匆匆的而又认真的看了一下楼主的Home接口 和 Remote接口没贴出来!
都是用工具生成的吧?
呵呵 俺除了简单的JavaBean 还不会用这些IDE工具
改天买本又教某些内容又从浅入深的介绍,使用IDE工具的书来看看,
似乎夏晰的精通Hibernate不错可惜我已经买了孙的了
等学Spring再去找本这样的书来看看 呵呵
-------------------------------------------------------------------------------------------------
据说华师西门现在打7.3折 不知真否, 改天去瞧瞧, 呵呵
------------------------------------------------------------------------------------------------- 楼上的,接口都是工具生成的.自己要做的只是写一个类.很方便.
Spring我刚买了Spring技术手册,还没怎么看,据说也挺不错,跟JSP2.0技术手册和深入浅出Hibernate一样的外观风格.也是华师后门买的,7.3折.
好 THX 改天去买本回来
好 THX 改天去买本回来 我也要重新拾起spring先至得。。。 第二次打开这个帖子已经是一个月之后了...在优识已经呆了一个月,
楼主还是在不遗余力的帮助初学者入门.精神可嘉..
欠你那顿饭....
有时间再请了,一方面优识还没给我发工资,我自己都快没钱吃饭了,另一方面,原来上班这么忙,难得星期六星期日就只想好好呆宿舍了.
页:
[1]