- 浏览: 7960305 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
1 注意同时声明remote.local的问题
我发现在jboss 4.2.2.gA上,如果这样的话,会出错
@Stateless
@Remote
@local
是JOBSS报错的
javax.ejb.EJBException: Local and Remote Interfaces cannot have duplicate interface for bean PhysicalFileManagerBean
不知为啥,后来查了一下,要这样改才行,具体指明是哪一个接口
@Stateless
@Remote(UserManager.class)
@Local(UserManager.class)
2 注意序列化问题
比如有个user对象要保存,则必须要序列化,如
public class User implements Serializable{ ...}
public void saveUser(User user) {xxx.save(user)}
3 local/remote的区别
组件接口类型影响组件方法被客户端调用时的参数传递方式。
远程调用中的参数是按值传递的,传递的是对象的拷贝,但本地调用中参数的传递则是按引用传递的,与Java编程语言中的正常的方法调用相同。
远程调用中,客户端与组件相对比较独立。因为客户端与组件操作不同的参数对象拷贝,任何一方对数据的修改,不会影响另一方的数据。
在本地调用中,客户端和组件修改的是同一个对象。在编写Enterprise Bean时,应避免使用由这种传递方式带来的副作用,因为,当应用规模增长,客户端被分布到不同的物理服务器,参数的传递方式亦随之改变。
决定一个组件应该提供远程访问还是本地访问,一般有以下一些因素。
-
容器管理关系
如果某Entity Bean被其他Entity Bean所关联,则此Entity Bean必须提供本地访问接口。
-
相关Bean之间的耦合程度
耦合程度高的Bean之间存在互相依存的关系。因此,这一类Bean一般需要提供本地访问接口,以形成一个逻辑上的单元,同时提供整个单元内交互的效率。
-
客户端类型
如Bean将被JavaEE应用客户端所访问,则应该提供远程访问接口。如果客户端是Web组件或其他Bean,提供何种类型的访问接口决定于这些组件的分布状况。
-
组件分布
JavaEE应用可以分布在多个计算机,为提供这种分布上的可伸缩性,将被分布到不同位置的组件所访问的Bean,应该提供远程访问接口。
尽管一般Bean只提供一种类型的客户访问接口,但事实上,有一些Bean仍需要同时提供两种类型的接口
一个很好的例子,比如
public void saveUser(User user) {
System.out.println("User[name="+user.getName()+"]已被保存");
user.setId(1);
}
如果是remote调用的话:
UserManager ejb = (UserManager)ctx.lookup("UserManagerBean/remote");
User user = new User();
user.setName("张三");
ejb.saveUser(user);
System.out.println("用户【name="+user.getName()+",id="+user.getId()+"】已被成功保存!");
输出的id依然为0,因为EJB改变了值,不会传给客户端的,
如果用local的话,则可以输出id=1
4 标注的问题
如果ejb实现了多个接口,可以这样声明
/**
* 定义方式1:
* @Remote(value={Ejb04Interface01.class,Ejb04Interface02.class,Ejb04Interface03.class})
* @Local(Ejb04Interface04.class)
*/
@Stateless(name="Ejb04")
public class Ejb04Bean implements Ejb04Interface01, Ejb04Interface02,
Ejb04Interface03, Ejb04Interface04 {
当然,也可以在各自的接口里加上@remote或@Local
5 webservice问题
直接加@webservice,详细的以后再小结之
6 简单的JMS小结
P2P 和发布/订阅者模式,和EJB2的一样,这里就不列出来了.例子
p2p的:
mdb端:
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination",propertyValue="queue/myqueue")
}
)
public class MyMDBBean implements MessageListener {
public void onMessage(Message msg) {
try {
TextMessage textMessage = (TextMessage)msg;
System.out.println("MyMDBBean被调用了!【"+textMessage.getText()+"】");
} catch (JMSException e) {
e.printStackTrace();
}
}
}
客户端消费:
public static void main(String[] args) throws Exception{
InitialContext ctx = new InitialContext();
//获取ConnectionFactory对象
QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup("ConnectionFactory");
//创建QueueConnection对象
QueueConnection connection = factory.createQueueConnection();
//创建QueueSession对象,第一个参数表示事务自动提交,第二个参数标识一旦消息被正确送达,将自动发回响应
QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
//获得Destination对象
Queue queue = (Queue)ctx.lookup("queue/myqueue");
//创建文本消息
TextMessage msg = session.createTextMessage("世界,你好");
//创建发送者
QueueSender sender = session.createSender(queue);
//发送消息
sender.send(msg);
//关闭会话
session.close();
System.out.println("消息已发送!");
}
}
发布订阅者的话,其实就是把上面的queue改成TOPIC
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Topic"),
@ActivationConfigProperty(propertyName="destination",propertyValue="topic/mytopic")
}
)
public class MyTopicMDBBean implements MessageListener {
public void onMessage(Message msg) {
try {
TextMessage textMessage = (TextMessage)msg;
System.out.println("MyTopicMDBBean被调用了!【"+textMessage.getText()+"】");
} catch (JMSException e) {
e.printStackTrace();
}
}
}
消费端:
public static void main(String[] args) throws Exception{
InitialContext ctx = new InitialContext();
//获取ConnectionFactory对象
TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("ConnectionFactory");
//创建TopicConnection对象
TopicConnection connection = factory.createTopicConnection();
//创建TopicSession对象,第一个参数表示事务自动提交,第二个参数标识一旦消息被正确送达,将自动发回响应
TopicSession session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
//获得Destination对象
Topic topic = (Topic)ctx.lookup("topic/mytopic");
//创建文本消息
TextMessage msg = session.createTextMessage("世界,你好");
//创建发布者
TopicPublisher publisher = session.createPublisher(topic);
//发送消息
publisher.publish(msg);
//关闭会话
session.close();
System.out.println("消息已发送!");
}
评论
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1602方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2027前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3484info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2248import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 501https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 700public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 626https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 679https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 445https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5571 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3114微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 628https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1851什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 974本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1384原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 874public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 680在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 948-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 778一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1915介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
总结,ejb3进阶案例涵盖了ejb3的核心组件,通过实践可以在理解ejb3特性的基础上,提升在JBoss 5上的应用开发和部署能力。通过深入学习和实践这些案例,开发者能够更好地掌握ejb3的精髓,从而构建出高效、稳定的企业...
总结,ejb3-persistence是Java EE中用于处理对象持久化的标准,它的出现简化了数据库操作,并且能够与Spring等框架良好集成。ejb3-persistence.jar提供了核心的API,而Hibernate等第三方库则提供了更丰富的功能和...
2. **EJB生命周期**: - **创建(Creation)**:由EJB容器实例化Bean。 - **初始化(Initialization)**:调用`@PostConstruct`注解的方法,执行Bean的初始化操作。 - **激活(Activation)**:对于有状态会话...
### EJB 3.0 学习心得及关键技术解析 #### EJB 3.0 概述 EJB (Enterprise JavaBeans) 是一种基于 Java 的企业级应用开发模型,它为构建可伸缩、可移植且健壮的企业级应用程序提供了一种标准化的方法。随着技术的...
WebLogic EJB学习笔记主要涵盖了企业级Java Bean(Enterprise JavaBeans,简称EJB)在Oracle WebLogic Server中的应用和管理。EJB是Java EE(Java Platform, Enterprise Edition)平台的核心组件,用于构建可扩展、...
学习EJB3过程中自己总结的一些关于学习EJB3的技术点,以及可能遇到的问题
总结来说,使用Eclipse和JBoss开发EJB 3.x应用是一种高效且灵活的方式,它结合了IDE的强大功能和EJB的高级服务。通过注解驱动的编程模型和强大的依赖注入机制,开发者可以专注于业务逻辑,而不是繁琐的基础设施代码...
总结来说,"Struts + Spring + EJB3 demo"是一个展示如何在Java EE环境中整合这三个框架的实例。通过这样的整合,开发者可以构建出高效、可维护的大型企业系统,同时充分利用每个框架的优势,如Struts的MVC结构、...
EJB3相对于EJB2的主要改进在于简化了API,减少了XML配置,引入了注解(Annotations),使得开发更直观,降低了学习曲线。EJB3的实体bean(Entity Beans)通过JPA(Java Persistence API)与数据库交互,会话bean...
JSF1.2是这个框架的一个早期版本,尽管现在已经有更新的JSF2.x版本,但在本实例中使用JSF1.2是为了演示如何在旧环境中集成EJB3。 **EJB3简介** EJB3是EJB(Enterprise JavaBeans)规范的第三个主要版本,显著简化了...
### JavaEE5学习笔记05-EJB之会话Bean总结 #### EJB(Enterprise JavaBeans)简介 EJB(Enterprise JavaBeans)是Java EE平台的一部分,用于开发和部署可重用的服务组件。EJB规范定义了如何编写、部署以及管理企业...
**企业级JavaBeans(EJB)3实例程序...总结来说,EJB3实例程序是学习和掌握EJB3核心概念的宝贵资源。通过阅读教程,结合源代码分析和实践,初学者能够快速理解和应用EJB3,为以后的大型企业级项目开发打下坚实的基础。
在EJB3 中,实体Bean 采用了更为简洁的编程模型,这得益于对Hibernate设计理念的学习和借鉴。EJB3 中的实体Bean 可以直接映射到数据库表,简化了开发过程。 #### 持久化单元的定义及作用 持久化单元是一个重要的...
### Eclipse + JBoss 5 + EJB3 开发指南 #### 概述 《Eclipse + JBoss 5 + EJB3开发指南》是一本针对初学者和中级开发者设计的实用指南,它提供了如何在Eclipse环境下利用JBoss 5进行EJB3应用开发的详细步骤。本书...
例如,可以使用POJO(Plain Old Java Object)风格的EJB,这降低了学习曲线并提高了生产力。 - **EJB 3.0**:增强了消息驱动Bean的功能,使其能够更灵活地处理异步消息传递。 - **EJB 3.0**:引入了新的注解,如`@...
总结来说,JDK动态代理在EJB3和Web服务中扮演了重要角色,它使得开发者能够灵活地添加额外功能,而不必侵入核心业务逻辑。这种能力在大型、复杂的企业级系统中尤其宝贵,因为它提高了代码的可维护性和可扩展性。通过...
通过本文的介绍,我们不仅了解了EJB3的学习背景及其与Hibernate的关系,还深入探讨了持久化单元的配置细节,这对于理解EJB3的核心概念和技术实现至关重要。希望这些知识点能帮助读者更好地掌握EJB3的应用实践。
### EJB 3 开发指南2008版 #### 一、EJB 3 概述 **标题**:“EJB 3 开发指南2008版”明确指出本书是关于EJB 3(Enterprise JavaBeans)的开发指南,并且是...希望读者能够通过本书的学习,在EJB 3 的世界里游刃有余。
2. **会话Bean(Session Beans)**:EJB3简化了会话Bean的使用,通过引入无状态会话Bean和有状态会话Bean。无状态会话Bean不保存客户端的状态,而有状态会话Bean可以跟踪客户端状态。@Stateless和@Stateful分别表示...