1、EJB中的3种bean
1、会话bean
负责与客户端交互,在编写业务逻辑的地方,会话bean可以通过jdbc直接操作数据库
分为:
无状态会话bean:我们使用最多的是无状态会话bean,因为它的bean实例可以被多个用户使用,性能比有状态会话bean高,但是无法保存某个用户设置的值
有状态会话bean:它的一个bean实例只供一个用户使用,所以它的性能开销比较大
2、实体bean
属性java持久化规范(JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束Hibernate和TopLink等ORM各自为营的局面
3、消息驱动bean
专门用于异步处理java消息的组件,并具有大量发消息的能力
2、开发工具
1、开发工具:Eclipse IDE for Java EE
2、开发EJB依赖的jar文件:在jboss4.2.3安装路径的client目录下,通常把里面的所有jar添加到类路径下
3、开发接口、实现类
写接口
写实现类,加@Stateless--->无会话 @Remote(HelloWorld.class)---->远程 注释
导出jar包
发布目录jboss-4.2.3.GA\server\default\deploy
4、java类作为客户端试验
public class EJBClient {
public static void main(String[] args) {
Properties props=new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");//JNDI连接工厂
props.setProperty("java.naming.provider.url","localhost:1099");//JNDI连接应用服务器的地址和端口
try {
InitialContext ctx=new InitialContext(props);
HelloWorld helloWorld=(HelloWorld)ctx.lookup("HelloWorldBean/remote");
System.out.println(helloWorld.getClass().getName());//这里的helloWorld对象实例不是我们在服务器端编写的HelloworldBean,而是一个代理对象
System.out.println(helloWorld.sayHello("天空"));
} catch (NamingException e) {
System.out.println(e.getMessage());
}
}
}
5、Jboss默认生成的JNDI名称
如果把EJB作为模块打包进后缀名为*.ear的JAVAEE企业应用文件,默认全局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非限定类名
如果把EJB应用打包成*.jar的模块文件,默认全局JNDI的名称是:
本地接口:EJB-CLASS-NAME/local
远程接口:EJB-CLASS-NAME/remote