① EJB无状态的bean
1.定义
无状态会话bean是一种企业bean,它通常用来做独立操作。无状态会话Bean根据其名字没有任何关联的客户端的状态,但它可能会保留其实例的状态。就相当于我们spring中的单例对象,能够保存信息,服务于多个请求连接。
2.创建过程
2.1 创建服务端程序(EJBServer)
选择Java Enterprise,同时勾选(EJB),注意选择的jdk一定要是1.7.选择jboss服务器进行开发。
创建完成后,会自动在lib下面下载javax.ejb-api.jar,我们新建Hello World接口和HelloWorldBean实现类。
HelloWorldBean:
public interface HelloWorld {
String sayHello(String name);
}
HelloWorldBean:
@Stateless(name = "HelloWorldBean")
@Remote
public class HelloWorldBean implements HelloWorld {
@Override
public String sayHello(String name) {
System.out.println("吴涛涛最可爱!!!");
return "hello"+name;
}
}
Stateless:表示该bean为无状态的bean。后面的name就是暴露出去的名称。(默认为我们的方法名称)
配置Jboss服务器(注意是选择war包的方式进行打包,若是失败或者其他原因,可重新编译或者重启服务器):
启动服务器成功(下图所示是我们的访问字符串):
访问字符串(JNDI的命名规则):
"ejb:" + appName + "/" + moduleName + "/" + beanName + "!" + viewClassName;
部署文件的名字
final String appName = ""; (as:EJBServerStateFul_war_exploded)
访问模块的名字
final String moduleName = ""; (as:LibraryStatefulSessionBean)
接口类的全名
final String viewClassName = ""; (as:pers.jhl.session.stateless.LibraryStatefulSessionBeanRemote)
状态值(适用于有状态的情况,无状态可不选)
stateful = "xxx"
完整示例(有状态的情况之下)
ejb:/EJBServerStateFul_war_exploded/LibraryStatefulSessionBean!pers.jhl.session.stateless.LibraryStatefulSessionBeanRemote?stateful=TMingYi
2.2 创建客户端程序(EJBClient)
创建普通的java程序。把jbossxxx/bin/client中的jboss-client.jar加入该客户端的依赖之中。
在src目录下建立 jboss-ejb-client.properties 配置文件。
jboss-ejb-client.properties:
endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=TMingYi
remote.connection.default.password=root
目录架构图如图所示。(HelloWorld接口就是server端的接口,在maven中我们可以直接依赖,在这里的官方的做法是吧接口文件打成jar然后放入client进行依赖,但是这里没得必要,我们只要在同一包目录下,建立这样一个Hello World接口,效果和打成jar的效果一样)。
编写主程序(HelloWorldClient):
import pers.jhl.session.stateless.HelloWorld;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Properties;
public class HelloWorldClient {
public static void main(String[] args) {
try{
Properties pro = new Properties();
pro.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");
pro.put("jboss.naming.client.ejb.context",true);
Context context = new InitialContext(pro);
HelloWorld h = (HelloWorld) context.lookup("ejb:/EJBServer_war_exploded/HelloWorldBean!pers.jhl.session.stateless.HelloWorld");
System.out.println( h.sayHello("Medlen"));
}catch(NamingException e){
e.printStackTrace();
}
}
}
在服务器运行的情况下,在运行此程序,即可看到打印: