wool王 发表于 2006-7-13 21:59

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

留位。
ps:SLSB是EJB中物状态会话Bean的缩写(Stateless Session Bean)。。。

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

文章在8楼...

[ 本帖最后由 wool王 于 2006-7-24 18:55 编辑 ]

iptton 发表于 2006-7-13 22:10

近期……



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

wool王 发表于 2006-7-16 17:22

首先我这里声明下,我这文章其实不能算完全原创,因为许多方法和技巧我都是借鉴其他文章的.

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

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

wool王 发表于 2006-7-16 17:32

晕...想开始写的时候发现自己没有JBOSS...看来得去公司写了...

用程序诠释生命 发表于 2006-7-16 19:59

楼主在上班时间干私事...

wool王 发表于 2006-7-16 19:59

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

你几时去优识上班?

我装JBOSS了,现在开始写.

wool王 发表于 2006-7-17 22:59

在MYECLIPSE网站上找到帮助的原文.网址如下:http://myeclipseide.com/enterpriseworkbench/help/index.jsp?topic=/com.genuitec.myeclipse.doc/html/quickstarts/firstejb/index.html

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

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

wool王 发表于 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 编辑 ]

wool王 发表于 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源码如下:
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 编辑 ]

wool王 发表于 2006-7-18 08:30

八    运行.打开JBOSS,经过N秒打开成功,然后运行客户端程序,在控制台打印出"Hello!woden"...

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

hjack 发表于 2006-7-18 12:52

得闲先至睇过。

wool辛苦了。253一下

wool王 发表于 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折   不知真否, 改天去瞧瞧,   呵呵
-------------------------------------------------------------------------------------------------

wool王 发表于 2006-7-18 23:00

楼上的,接口都是工具生成的.自己要做的只是写一个类.很方便.

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

深圳情缘 发表于 2006-7-19 10:39

好 THX 改天去买本回来

好   THX   改天去买本回来

hjack 发表于 2006-7-21 21:36

我也要重新拾起spring先至得。。。

用程序诠释生命 发表于 2006-8-26 18:34

第二次打开这个帖子已经是一个月之后了...
在优识已经呆了一个月,
楼主还是在不遗余力的帮助初学者入门.精神可嘉..
欠你那顿饭....
有时间再请了,一方面优识还没给我发工资,我自己都快没钱吃饭了,另一方面,原来上班这么忙,难得星期六星期日就只想好好呆宿舍了.
页: [1]
查看完整版本: SLSB入门实例(Eclipse版)(已完成)