EJB3-使用Eclipse和JBoss开发和部署Session Bean

作者:聂勇 欢迎转载,请保留作者信息并说明文章来源!

环境 | Enviroment

  • Ubuntu 10.10
  • Eclipse 3.6.1
  • JBoss GA 5.1.0

建立EJB3项目| Create EJB3 Project

1、选择菜单 File –> New –> Other。出现“New”对话框,选择EJB –> EJB Project。
新建EJB项目
点击“Next >”按钮,继续步骤2。

2、出现“New EJB Project”对话框。在Project name输入框中输入项目名称,在Target runtime下拉框中选择JBoss v5.0(注意:此处JBoss已经安装并且在Eclipse中完成配置),在EJB module version的下拉框中选择3.0。
新建EJB项目-选择EJB版本和运行环境
点击“Next >”按钮,继续步骤3。

3、继续设置EJB项目的源代码文件夹和源代码编译后class的输出目录。删除项目默认的源代码文件夹,点击“Add Folder”按钮添加自己的源文件夹,修改Default output folder为自定义的class输出目录。
新建EJB项目-定义源代码目录和输出目录
点击“Next >”按钮,继续步骤4。

4、去掉“Generate ejb-jar.xml deployment descriptor”复选框。
新建EJB项目-完成
点击“Finish”按钮,完成EJB3项目的创建。

建立Session Bean | Create Session Bean

1、在“Session Beans“上点击右键,选择菜单 New –> Session Bean(EJB 3.x)。
新建 Session Bean

2、在“Create EJB 3.x Session Bean”对话框中设置如下:

  • 在“Source folder“输入框中输入保存类源代码目录:/JBossEJB3/src/main/java,也可以点击后面的“Browser”按钮进行选择。
  • 在“Class name”输入框中输入类的名称:HelloWorld。
  • 在“Create business interface”下面选择Remote和Locale,表示同时生成远程接口和本地接口。选择后,Eclipse会自动生成远程接口和本地接口的完整类路径。新建 Session Bean 点击“Next >”按钮,继续步骤3。

3、Eclipse会自动生成Bean name等信息,如果没有特殊情况就可以按照默认信息。
新建 Session Bean
点击“Finish”按钮,完成Session Bean(HelloWorld)的创建。

完整的代码的清单如下:
1)远程接口HelloWorldRemote.java的源代码:

1
2
3
4
5
6
7
8
package cn.aofeng.ejb3;
import javax.ejb.Remote;
@Remote
public interface HelloWorldRemote {
}

2)本地接口HelloWorldLocale.java的源代码:

1
2
3
4
5
6
7
8
package cn.aofeng.ejb3;
import javax.ejb.Local;
@Local
public interface HelloWorldLocal {
}

3)Session Bean类HelloWorld.java的源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package cn.aofeng.ejb3;
import javax.ejb.Stateless;
/**
* Session Bean implementation class HelloWorld
*
* @author 傲风 <a href="mailto:aofengblog@163.com">aofengblog@163.com</a>
*/
@Stateless
public class HelloWorld implements HelloWorldRemote, HelloWorldLocal {
/**
* Default constructor.
*/
public HelloWorld() {
}
}

建立Session Bean的方法 | Create Method for Session Bean

1、在远程接口和本地接口中定义方法:String sayHello();,完整的源代码清单如下:
1)远程接口HelloWorldRemote.java的源代码:

1
2
3
4
5
6
7
8
9
10
package cn.aofeng.ejb3;
import javax.ejb.Remote;
@Remote
public interface HelloWorldRemote {
String sayHello();
}

2)本地接口HelloWorldLocale.java的源代码:

1
2
3
4
5
6
7
8
9
package cn.aofeng.ejb3;
import javax.ejb.Local;
@Local
public interface HelloWorldLocal {
String sayHello();
}

3)Session Bean类HelloWorld.java的源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package cn.aofeng.ejb3;
import java.util.Date;
import javax.ejb.Stateless;
/**
* Session Bean implementation class HelloWorld
*
* @author 傲风 <a href="mailto:aofengblog@163.com">aofengblog@163.com</a>
*/
@Stateless
public class HelloWorld implements HelloWorldRemote, HelloWorldLocal {
/**
* Default constructor.
*/
public HelloWorld() {
}
/*
* @see cn.aofeng.ejb3.HelloWorldRemote#sayHello()
* @see cn.aofeng.ejb3.HelloWorldLocale#sayHello()
*/
public String sayHello() {
return "Hello, The World! Now is:" + new Date();
}
}

在JBoss中部署EJB项目 | Deploy EJB Project in JBoss

1、在”Servers”中的“JBoss v5.0 localhost”中点击右键,选择菜单中的“Add and Remove”。
部署项目

2、选择“Available”下拉框中选择项目“JBossEJB3“,点击“Add >”按钮,将项目添加到“Configured”下拉框中。
部署项目
点击“Finish”按钮完成添加。

3、启动JBoss,在浏览器中输入http://localhost:8080/console ,进入控制台。如下图所示:项目JBossEJB3已经成功部署到JBoss中。
部署项目

建立EJB3客户端| Create EJB3 Client

1、在源代码文件夹”test/main/resources”下建立JNDI配置文件:jndi.properties。内容如下:

1
2
3
java.naming.provider.url=127.0.0.1:1099
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

2、在源代码文件夹”test/main/java”下建立EJB3 Client类:HelloWorldTest。内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/**
* 建立时间:2011-3-13
*/
package cn.aofeng.ejb3;
import static org.junit.Assert.*;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* {@link cn.aofeng.ejb3.HelloWorld}的单元测试代码.
*
* @author 傲风 <a href="mailto:aofengblog@163.com">aofengblog@163.com</a>
*/
public class HelloWorldTest {
private static Context _context;
@BeforeClass
public static void init() throws Exception {
Properties props = new Properties();
props.load(HelloWorldTest.class.getResourceAsStream("/jndi.properties"));
_context = new InitialContext();
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
/**
* Test method for {@link cn.aofeng.ejb3.HelloWorld#sayHello()}.
* @throws NamingException
*/
@Test
public void testSayHello() throws NamingException {
HelloWorldRemote remote = (HelloWorldRemote) _context.lookup("HelloWorld/remote");
System.out.println(remote.sayHello());
}
}

3、运行HelloWorldTest类,结果如下图所示:
单元测试中调用 Remote Bean