开发第一个无状态会话bean [草稿]

准备事项

1.查询jBoss部署的JNDI,http://localhost:8080/jmx-console/ 路径下,查找jboss-->service=JNDIView-->java.lang.String list()--点击Invoke-->Global JNDI Namespace(这是全部的JNDI,最下面就有自己开发的HelloWorldBean)

2.运行JBoss: jboss-4.2.3.GA-jdk6\jboss-4.2.3.GA\bin\run.bat文件

3.jBoss默认部署的路径: jboss-4.2.3.GA-jdk6\jboss-4.2.3.GA\server\default\deploy下

Jboss默认生成的JNDI 名称

当EJB发布到Jboss 时,如果我们没有为它指定全局JNDI名称或修改过其默认EJB名称,Jboss就会按照默认的命名规则为EJB生成全局JNDI名称,默认的命名规则如下:

如果把EJB作为模块打包进后缀为*.ear的JAVA EE企业应用文件,默认的全局JNDI名称是

本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local

远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote

       EAR-FILE-BASE-NAME为ear文件的名称,EJB-CLASS-NAME为EJB的非限定类名。

例:把HelloWorld应用作为EJB模块打包进名为HelloWorld.ear的企业应用文件,它的远程接口的JNDI 名称是:HelloWorld/HelloWorldBean/remote

如果把EJB应用打包成后缀为*.jar的模块文件,默认的全局JNDI名称是

本地接口:EJB-CLASS-NAME/local

远程接口:EJB-CLASS-NAME/remote

例:把HelloWorld应用打包成HelloWorld.jar文件,它的远程接口的JNDI名称是:HelloWorldBean/remote

开发步骤

1.开发服务端HelloWorldBean.java

2.开发客户端EJBClient.java

3.部署服务到jBoss下,有两种方式:一种是打成*.ear文件,一种是打成*.jar文件,本文采用*.jar文件,不同的发布JNDI的名称会不一样,看【Jboss默认生成的JNDI 名称】这里,现在是把HelloWorld.java和HelloWorld.java打成helloWorld.jar文件部署服务到jboss-4.2.3.GA-jdk6\jboss-4.2.3.GA\server\default\deploy下,然后运行jBoss,然后客户端调用EJBClient1和EJBClient2两种方式调用.

HelloWorld.java

package cn.cmcc.ejb3;

public interface HelloWorld {

public String say(String name);

}

HelloWorldBean.java

package cn.cmcc.ejb3.impl;

import javax.ejb.Remote;

import javax.ejb.Stateless;

import cn.cmcc.ejb3.HelloWorld;

@Stateless //申明是一个无状态bean

@Remote  //申明是一个远程接口,不写默认是本地接口

public class HelloWorldBean implements HelloWorld {

@Override

public String say(String name) {

return name+":说,您好";

}

}

EJBClient1.java

package cn.cmcc.test;

import java.util.Properties;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import cn.cmcc.ejb3.HelloWorld;

public class EJBClient1 {

public static void main(String[] args) {

Properties props = new Properties();

//JBoss应用服务器的上下文信息

props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");

props.setProperty("java.naming.provider.url", "localhost:1099");

//Sun应用服务器的上下文信息

//props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");

//props.setProperty("java.naming.provider.url", "localhost:3700");

try {

InitialContext ctx = new InitialContext(props);

HelloWorld helloworld = (HelloWorld) ctx

.lookup("HelloWorldBean/remote");

System.out.println(helloworld.say("佛山"));

} catch (NamingException e) {

System.out.println(e.getMessage());

}

}

}

EJBClient2.java

package cn.cmcc.test;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import cn.cmcc.ejb3.HelloWorld;

public class EJBClient2 {

public static void main(String[] args) {

try {

//默认是去classpath下寻找jndi.properties文件

InitialContext ctx = new InitialContext();

HelloWorld helloworld = (HelloWorld) ctx

.lookup("HelloWorldBean/remote");

System.out.println(helloworld.say("佛山"));

} catch (NamingException e) {

System.out.println(e.getMessage());

}

}

}

jndi.properties

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

java.naming.provider.url=localhost:1099

猜你喜欢

转载自javaeedevelop.iteye.com/blog/1830713