开发第一个无状态会话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
?
?
?
?