ejb3.0基础

来源:互联网 发布:网络歌曲很少歌曲 编辑:程序博客网 时间:2024/06/05 15:19

1.EJB的三种bean:

1>会话bean(Session Bean)--负责与客户端交互,是编写业务逻辑的地方。在会话bean中要可以直接通过JDBC操作数据库,但大多数情况通过实体bean完成对数据库操作

a.无状态会话bean(使用较多),它的实例可以供多个用户使用,所以它的性能比有状态bean高,而正因为一个bean实例被多个用户使用,所以前一个用户设置的值可能会被后一个用户所修改,因而它无法正确保存某个用户设置的值,所以它是无状态的

b.有状态会话bean(使用较少),因为它的一个实例只供一个用户使用,所以性能开销比较大,每个用户设置的值 不会被其他的用户所修改,所以可以正确每个用户设置值,因而它是有状态的

2>实体bean(entity bean)---Java持久化规范技术,类似于hibernate中与数据库表映射的bean

3>消息驱动bean(message-driven bean)--专门用于异步处理java消息的组件,具有大量处理并发消息的能力

2.开发无状态会话bean:

1>开发接口:

public interface HelloWorld {public String sayHello(String name);}
2>开发无状态bean实现接口

@Stateless//bean类是无状态bean@Remote(HelloWorld.class)//远程接口public class HelloWorldImpl implements HelloWorld {@Overridepublic String sayHello(String name) {return name+" say hello";}}
3>开发客户端,此处的客户端不需要与服务端处于同一台计算机上,只需要修改其中连接的服务器IP地址和启动Jboss时绑定相应的IP地址就可以了,这就是EJB的远程调用特性。

public static void main(String[] args) {//JNDI服务的配置信息Properties properties=new Properties();properties.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");properties.setProperty("java.naming.provider.url", "localhost:1099");try {Context context=new InitialContext(properties);//获取无状态bean的代理HelloWorld helloWorld=(HelloWorld)context.lookup("HelloWorldImpl/remote");System.err.println(helloWorld.sayHello("cash"));} catch (NamingException e) {e.printStackTrace();}}
4>Jboss默认生成的JDNI名称:

a.当EJB发布到Jboss时,没有为它指定全局JNDI名称或修改其默认EJB名称,Jboss就会按照默认的命名规则为EJB生成全局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/HelloWorldImpl/remote

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

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

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

例如上面的代码。

原创粉丝点击