工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 4014|回复: 16

SLSB入门实例(Eclipse版)(已完成)

[复制链接]
发表于 2006-7-13 21:59 | 显示全部楼层 |阅读模式
留位。
ps:SLSB是EJB中物状态会话Bean的缩写(Stateless Session Bean)。。。

这里说明下,我一贯的发帖风格都是图文并茂,但本次帖子没有附图,主要原因是个人觉得MYECLIPSE的例子写得已经足够详细(可能英文会影响到大家理解,所以请配合我自己的文字看原文例子).还有强调一点是客户端的写法,这个是网上难以找到现成例子的东西,大家留意一下.

文章在8楼...

[ 本帖最后由 wool王 于 2006-7-24 18:55 编辑 ]
发表于 2006-7-13 22:10 | 显示全部楼层
近期……



楼上和HJACK成上班族后好像少来编程版了
回复

使用道具 举报

 楼主| 发表于 2006-7-16 17:22 | 显示全部楼层
首先我这里声明下,我这文章其实不能算完全原创,因为许多方法和技巧我都是借鉴其他文章的.

建议大家看完我这文章后去看看Myeclipse关于创建EJB项目的帮助,我就是看那个入门的.(打开Eclipse,点击帮助就可以看到)不过是全英文的.我这里也当一次孙卫琴,把国外的东西"本地化"一下.

还有就是Myeclipse帮助那个例子没有写EJB客户端,而客户端代码我是通过JBuilder自动生成测试用例源码,然后拷贝到Eclipse中使用.这点算是我对Myeclipse帮助例子的一个加强吧.这里再提醒大家一点,如果大家学习时看的书是<<精通EJB>>的话,它EJB客户端连接服务器的写法好像是错误的(好像是第三章),我后来请教了其他人才知道.
回复

使用道具 举报

 楼主| 发表于 2006-7-16 17:32 | 显示全部楼层
晕...想开始写的时候发现自己没有JBOSS...看来得去公司写了...
回复

使用道具 举报

发表于 2006-7-16 19:59 | 显示全部楼层
楼主在上班时间干私事...
回复

使用道具 举报

 楼主| 发表于 2006-7-16 19:59 | 显示全部楼层
原帖由 用程序诠释生命 于 2006/7/16 19:59 发表
楼主在上班时间干私事...


你几时去优识上班?

我装JBOSS了,现在开始写.
回复

使用道具 举报

 楼主| 发表于 2006-7-17 22:59 | 显示全部楼层
在MYECLIPSE网站上找到帮助的原文.网址如下:http://myeclipseide.com/enterpri ... firstejb/index.html

我文章流程基本上与其相同,所以在此不详细说明,只是描述我我觉得值得小心的地方.

重点注意EJB客户端的写法.
回复

使用道具 举报

 楼主| 发表于 2006-7-17 23:15 | 显示全部楼层
一   建立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 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2006-7-17 23:29 | 显示全部楼层
四    接下来配置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源码如下:
  1. package test;

  2. import java.rmi.RemoteException;
  3. import java.util.Hashtable;

  4. import javax.ejb.CreateException;
  5. import javax.ejb.RemoveException;
  6. import javax.naming.Context;
  7. import javax.naming.InitialContext;
  8. import javax.naming.NamingException;
  9. import javax.rmi.PortableRemoteObject;

  10. import com.woden.interfaces.Hello;
  11. import com.woden.interfaces.HelloHome;

  12. public class EJBClient {

  13.         /**
  14.          * @param args
  15.          * @throws NamingException
  16.          * @throws CreateException
  17.          * @throws RemoteException
  18.          * @throws RemoveException
  19.          */
  20.         public static void main(String[] args) throws NamingException, RemoteException, CreateException, RemoveException {
  21.                 // TODO 自动生成方法存根
  22.                 // TODO 自动生成方法存根
  23.                 // Properties props = System.getProperties();
  24.                 Hashtable environment = new Hashtable();

  25.                 environment.put(Context.INITIAL_CONTEXT_FACTORY,
  26.                                 "org.jnp.interfaces.NamingContextFactory");
  27.                 environment.put(Context.URL_PKG_PREFIXES,
  28.                                 "org.jboss.naming:org.jnp.interfaces");
  29.                 environment.put(Context.PROVIDER_URL, "jnp://localhost:1099");

  30.                 // Context ctx = new InitialContext(props);
  31.                 Context ctx = new InitialContext(environment);

  32.                 Object obj = ctx.lookup("ejb/Hello");

  33.                 HelloHome home = (HelloHome) PortableRemoteObject.narrow(obj,
  34.                                 HelloHome.class);

  35.                 Hello hello = home.create();

  36.                 System.out.println(hello.sayHello("woden"));
  37.                
  38.                 hello.remove();
  39.         }
  40. }
复制代码

[ 本帖最后由 wool王 于 2006-7-18 08:28 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2006-7-18 08:30 | 显示全部楼层
八    运行.打开JBOSS,经过N秒打开成功,然后运行客户端程序,在控制台打印出"Hello!woden"...

九    关于EJB.通过这个小例子,大家应该对SLSB有所了解,现在,可以更有体会的阅读<<精通EJB>>了.
回复

使用道具 举报

发表于 2006-7-18 12:52 | 显示全部楼层
得闲先至睇过。

wool辛苦了。253一下
回复

使用道具 举报

 楼主| 发表于 2006-7-18 16:41 | 显示全部楼层
原帖由 hjack 于 2006/7/18 12:52 发表
得闲先至睇过。

wool辛苦了。253一下


...:time:
回复

使用道具 举报

发表于 2006-7-18 19:32 | 显示全部楼层

楼主的Home接口 和 Remote接口都是用工具生成的吧?

匆匆的而又认真的看了一下
楼主的Home接口 和 Remote接口没贴出来!
都是用工具生成的吧?

呵呵     俺除了简单的JavaBean    还不会用这些IDE工具

改天买本又教某些内容又从浅入深的介绍,使用IDE工具的书来看看,
似乎夏晰的精通Hibernate不错  可惜我已经买了孙的了
  等学Spring再去找本这样的书来看看    呵呵
  

-------------------------------------------------------------------------------------------------
据说华师西门现在打7.3折     不知真否, 改天去瞧瞧  ,   呵呵
-------------------------------------------------------------------------------------------------
回复

使用道具 举报

 楼主| 发表于 2006-7-18 23:00 | 显示全部楼层
楼上的,接口都是工具生成的.自己要做的只是写一个类.很方便.

Spring我刚买了Spring技术手册,还没怎么看,据说也挺不错,跟JSP2.0技术手册和深入浅出Hibernate一样的外观风格.也是华师后门买的,7.3折.
回复

使用道具 举报

发表于 2006-7-19 10:39 | 显示全部楼层

好 THX 改天去买本回来

好   THX   改天去买本回来
回复

使用道具 举报

发表于 2006-7-21 21:36 | 显示全部楼层
我也要重新拾起spring先至得。。。
回复

使用道具 举报

发表于 2006-8-26 18:34 | 显示全部楼层
第二次打开这个帖子已经是一个月之后了...
在优识已经呆了一个月,
楼主还是在不遗余力的帮助初学者入门.精神可嘉..
欠你那顿饭....
有时间再请了,一方面优识还没给我发工资,我自己都快没钱吃饭了,另一方面,原来上班这么忙,难得星期六星期日就只想好好呆宿舍了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-4-30 22:23

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表