ejb


开发无状态Bean

采用实例池技术管理Bean。单例

如果服务器端和客户端在不一个JBOSS内,客户端可以调用远程接口访问EJB
如果服务器端和客户端在同一个JBOSS内,客户端可以调用本地接口访问EJB
默认为本地接口

@Stateless(name="...修改名称...")//无状态EJB 或 @Stateful(name="...修改名称...")//有状态EJB
@Remote(HelloWorld.class) --- 在业务层的实现类中通过以下代码指定远程接口
@Local(HelloWorld.class) --- 在业务层的实现类中通过以下代码指定本地接口
public class HelloWorldBean implements HelloWord{
public String sayHello(String name){...}
}



开发有状态Bean

采用钝化与激活技术。多例:为每个访问的用户开放一个有状态Bean.(用有状态Bean开发购物车)

当这个有状态Bean在一段时间不被用户访问时,..把访问Bean产生的信息缓存在硬盘里同时删除内存中的数据。 钝化
当在缓存时间范围内这个Bean再次被访问,...会把硬盘里的数据还原为内存里的资源供用户访问。 激活

如果服务器端和客户端在不一个JBOSS内,客户端可以调用远程接口访问EJB
如果服务器端和客户端在同一个JBOSS内,客户端可以调用本地接口访问EJB


@Stateful
@Remote(HelloWorld.class) --- 在业务层的实现类中通过以下代码指定远程接口
@Local(HelloWorld.class) --- 在业务层的实现类中通过以下代码指定本地接口
public class HelloWorldBean implements HelloWord{
public String sayHello(String name){...}
}


通过EJB的注解可以从一个EJB内调用另一个EJB得方法:
public class HelloWorldBean implements HelloWorld,HelloWorldLocal{
@EJB(beanName = "...明确调用哪个名字的EJB...") Other other //Other为另一个EJB接口
public String sayHello(String name){
return name + "说,你好," + other.sayMe();
}
}

public class HelloWorldBean implements HelloWorld,HelloWorldLocal{
@EJB(beanName = "...明确调用哪个名字的EJB...") Other other //Other为另一个EJB接口
@Resource TimerServer timeserver; //定时器
@Resource(mappedName="...指定DataSource的JNDI名称...") DataSource dataSource;
public String sayHello(String name){
return name + "说,你好," + other.sayMe();
}
}


数据源通过减少数据库的连接数量来提升系统的性能


数据源的发布;
将驱动类与数据源的xml文件分别拷入到jboss下的\server\default\lib目录(不是根目录下的lib文件夹,拷完后重启JBOSS) 与 jboss\server\default\deploy目录下用来发布
(数据源以...-ds.xml结尾,在JBOSS中有自己的数据源规范)


EJB调用的JNDI名称:
EJB打包成jar文件,客户端调用EJB的JNDI名称为:简单实现类名 + local/remote
EJB打包成ear文件,客户端调用EJB的JNDI名称为:ear文件的名称 + 简单实现类名 + local/remote
例如:Hello.ear HelloWorld/HelloWorldBean/remote


如果将服务器端的实现类设置成为本地接口
那么将客户端打包成war文件,将该war文件放在于服务器端存放为之一样的的JBOSS部署的与 jboss\server\default\deploy目录下。
然后在客户端就可以调用本地接口了。(在浏览器中访问接口:http://localhost:8080//EJBClient/Test.jsp)


注入EntityManager对象:@PersistenceContext(unitName = "persistence.xml中指定的数据unit名称") EntityManager em;

JPA规范:
实体bean中必然要有一个无参数的构造函数

一条消息由头部,属性,和主体组成

JMS传递消息模型:
PTP(点对点) 一个消息只有一个接收方 采用javax.jms.Queue表示 Queue消息可以不在线接受
它们都扩展自javax.jms.Destination类
Pub/sub (点对多) 一个消息多个接收方 采用javax.jms.Topic表示 Topic消息只能即时接受


Queue类型消息:
步骤:
1:配置目标地址的xml文件并将其发布(例:itcast-service.xml)
2:拷入jndi.xml
3:发布消息:
IntialContext ctx = new IntialContext();
QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup("QueueConnectionFactory");
QueueConnection conn = factory.createQueueConnection();
QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
Destination destination = (Destination)ctx.lookup("queue/itcastQueue");
MessageProducer producer = session.createProductor(destination);
producer.send(session.createTextMessage("你好,我是新消息"));
session.close();
conn.close(0;

4.接收消息:
采用MessageDrivenBean(MDB)。MDB具有处理大量并发消息的能力,适合应用在一些消息网管产品。
@MessageDriven(activationConfig =
{
@ActivactionConfigProperty(propertyName="destinationType" propertyValue="javax.jms.Queue"),
@ActivactionConfigProperty(propertyName="destination" propertyValue="queue/itcastQueue "),
@ActivactionConfigProperty(propertyName="acknowledgeMode" propertyValue="Auto-acknowledge")
})
public class MessageDrivenBean implements MessageListener{
public void onMessage(Message message){
TextMessage msg = (TextMessage)message;
System.out.println(msg.getText());
}
}

5.将build.xml文件导入MessageDrivenBean这个类中并用ant发布



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值