大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
注意:在EJB中对Bean的定位是通过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
如果把EJB应用打包成后缀为*.jar的模块文件,默认的全局JNDI名称是
本地接口:EJB-CLASS-NAME/local
远程接口:EJB-CLASS-NAME/remote
二:通过远程接口调用EJB的过程
首先客户端需要和EJB服务器建立Socket通信,在通信管道上他们需要来回发送IIOP协议消息。
因为数据要在网络进行传输,存放数据的JAVA对象必须要序列化。
三:通过本地接口调用EJB的过程
通过本地接口调用EJB,直接在内存中进行交互,这样可以避免网络开销、协议解析的开销和对象序列化的开销。
但是大家必须要注意,只有客户端与EJB应用在同一个JVM内运行的时候,我们才能调用本地接口 。
四:如何通过使用注解方式注入并使用其他的EJB和服务
注入和使用其他EJB的方式如下:
@EJB EJB的接口 EJB的变量
通过注解”@EJB”可以注入并使用其他的EJB,如果有多个EJB的类实现了同一个接口,那么在使用”@EJB”的时候
需要明确指定是注入和使用哪一个EJB的Bean。指定方式如下:
@EJB(beanName=”EJB类的名称”) EJB的接口 EJB的变量
注入和使用其他服务的方式如下:
@Resource 服务名称 服务变量
注意在指定数据源的使用需要配置mappedName的属性值,例如:
@Resource(mappedName=”数据库的JNDI名称”) DataSource dataSource
五:JMS中的消息
消息传递系统的中心是消息,一条消息有三部分组成
头(Header),属性(property),主体(body)
消息有以下几种类型,他们都是派生自Message接口
StreamMessage:一种主体中包含JAVA基原值流的消息,如填充和读取均按顺序进行。
MapMessage:一种主体中包含一组名-值对的消息,没有定义条目顺序
TextMessage:一种主体中包含JAVA字符串的消息(例如:XML消息)
ObjectMessage:一种主体中包含序列化的JAVA对象的消息
BytesMessage:一种主体中包含连续字节流的消息
消息的传递模型为以下两种:
点对点(point-to-point:PTP):该消息传递模型规定,一条消息只能传递给一个接收方,可以接受过时的消息。采用javax.jms.Queue表示。
发布/订阅(publish/subscribe):该消息传递模型规定,一条消息可以传递给多个接收方,只能接受实时的消息。采用javax.jms.Topic表示。
六:如何发送消息(以Queue为例,如果是Topic则应把所有的Queue改为Topic)
1.得到一个JNDI的初始化上下文(Context)
InitialContext ctx = new InitialContext();
2.根据上下文查找一个连接工厂QueueConnectionFactory。该连接工厂是用JMS提供的,不需要我们自己创建,
每个工厂都绑定一个全局的JNDI,我们通过全局的JNDI来获取它
QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup(“QueueConnectionFactory”);
3.通过连接工厂得到一个连接QueueConnection
QueueConnection conn = factory.createQueueConnection();
4.通过连接来建立一个会话(Session)
QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
建立一个不需要事物的并且能启动确认消息已接受的会话
5.查找目标地址
Destination destination = (Destination)ctx.lookup(配置文件的JNDI名称);
6.根据会话和目标地址来建立消息生产者MessageProducer
MessageProducer producer = session.createProducer(destination);
TextMessage msg = session.createTextMessage(“hello world”);
producer.send(msg);
七:建立一个Message Driver Bean(以Queue为例,如果是Topic则应把所有的Queue改为Topic)
1.实现javax.jms.MessageListener
2.通过注解指定监听设置
@MessageDriven(activationConfig ={
@ActivationConfigProperty(propertyName=”destinationType”,propertyValue=”javax.jms.Queue”),//监听消息传递的类型
@ActivationConfigProperty(propertyName=”destination”,propertyValue=”queue/studiozeroQueue”),//设置消息接收方
@ActivationConfigProperty(propertyName=”acknowledgeMode”,propertyValue=”Auto-acknowledge”) //设置传递模型
})
八:WEB服务
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187708.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...