EJB3入门(1)Stateless Session bean

Posted by Elton's Blog on June 13, 2009

一直想学EJB,今天有空开始学习。

下载相关资源 JDK 1.6u14 http://java.sun.com eclipse 3.4 http://www.eclipse.org Jboss tools http://jboss.org/tools Jboss AS 5.1.0AS http://www.jboss.org/jbossas

安装配置好后,我们开始写第一个EJB, 先写个无状态的Session Bean – Hello world

先定义接口

package me.prosight;
import javax.ejb.Remote;

@Remote
public interface HelloRemote {
	public String sayHello(String name);

}

再定义实现

package me.prosight;

import javax.ejb.Stateless;

/**
 * Session Bean implementation class Hello
 */
@Stateless
public class HelloBean implements HelloRemote {

	@Override
	public String sayHello(String name) {
		return "Hello " + name;
	}

}

启动Jboss服务器,将刚刚的EJB应用部署到jboss中。右键点击项目名称,然后选择Export–>EJB/JAR file

[caption id=”attachment_32” align=”alignnone” width=”446” caption=”EJB项目部署”]EJB项目部署[/caption]

将这个Jar包部署到/server/default/deploy中,一会jboss就会自动将这个应用部署到jboss的容器中,后面我们就可以使用这个ejb了。

再写一个测试客户端

package me.prosight;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class HelloClent {

	public static void main(String[] args) throws NamingException {
		Context ctx = new InitialContext();
		HelloRemote hello = (HelloRemote) ctx.lookup("HelloBean/remote");
		String msg = hello.sayHello("Elton");
		System.out.println(msg);
	}

}

客户端要注意两件事情

  1. 确保正确设置了JNDI
  2. 在引用远程的EJB bean的时候,要使用对应的接口来引用而不是实现类。

JNDI是Java命名和目录接口,是用来标记EJB的bean位置的。 如果你的客户端和EJB不在一个JVM中运行,就需要配置JNDI。当你部署好一个EJB的应用,会在控制台中显示出调用这个EJB的所有的JNDI名称,如:

[caption id=”attachment_40” align=”alignnone” width=”362” caption=”JNDI”]JNDI[/caption]

在InitialContext的lookup方法中就可以使用这个名称来引用相关的Bean了。

配置JNDI有两个方法,一个就是在源文件目录中建立jndi.properties文件,我的这个文件内容如下:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=localhost:1099

provide.url指定的是EJB容器的地址和端口,可以使用IP地址来指定你的EJB容器装在哪台服务器上。

或者在程序中以编程的方式来指定,在new InitialContext()前,输入如下代码:

Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
props.setProperty("java.naming.provider.url", "localhost:1099");
InitialContext ctx = new InitialContext(props);

运行这个程序,将会在控制台中看到:

[caption id=”attachment_36” align=”alignnone” width=”257” caption=”程序输出”]程序输出[/caption]

第一个EJB的Hello World就完成了。还很简单吧。

工程源代码