EJB3.0学习笔记

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

EJB学习笔记名词定义JNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的APIPOJO(PlainOldJavaObjects),简单的java对象,实际上就是普通的JavaBeansPOpo(persisentobject)就是在Object/RelationMapping框架中的Entiry,po的每个属性基本上都对应数据库表里面的某个字段。完全是一个符合JavaBean规范的纯Java对象,没有增加别的属性和方法。持久对象是由insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。远程客户端客户端与其调用的EJB对象不在同一个JVM进程之中客户端与服务器之间通信的时候,数据需序列化之后用传值的方式传输本地客户端客户端与其调用的EJB对象不在同一个JVM进程之中客户端与服务器之间通信的时候,数据直接用传址的方式进行传输.一个企业bean可以被同时定义为@Remote和@local(注意:此时需要注明接口类@Remote(xxxx.class))Webservice客户端支持异构平台.可以访问无状态会话bean的接口,只有在业务逻辑方法被标识为@WebMethod的时候,webservice客户端才能访问到HttpSession交互过程客户动作服务器响应1、打开浏览器2、访问购物网站3、创建HttpSession对象4、返回sessionId5、将sessionId写入cookie中6、向购物车中添加商品7、向系统提交商品信息,以及session的值8、服务器根据sessionId找到相对应的HttpSession对象,同时创建购物车对象,与有状态的会话Bean即EJB能够为同一客户端在多次请求(方法调用)之间保持状态信息比如:基于某些原因(可能是因为系统需要支持多种不同类型的客户端),购物车功能做为系统的核心业务,需要EJB对象来担当(而不是HttpSession对象)。那么EJB必须能够区分不同的客户端,并分别为不同的客户端保持与其对应的状态信息即,从某个客户端角度来看,似乎EJB对象正被它独占了一样,不会因为有任何其它的客户端同时对同一个EJB对象访问而影响其最终的计算结果Stub为屏蔽客户调用远程主机上的对象,必须提供某种方式来模拟本地对象,这种本地对象称为存根(stub),存根负责接收本地方法调用,并将它们委派给各自的具体实现对象SessionBean新建EjbProject编写接口编写实现类利用注解配置EJBsession绑定9、继续添加商品或删除商品10、每次向服务器提交数据的时候,都会带着一个sesssionId的信息11、服务器通过sessionId得以辨认不同的客户端,以及维护这些客户端的状态信息部署到jboss并运行jboss将EJB项目的接口打包(客户端只需要EJB接口即可),并把这个jar包加入到客户端项目的类路径下将jboss安装目录下的client目录里面所有jar加入到客户端项目中编写客户端代码在客户端源代码目录下添加jndi.properties运行客户端代码如果本地客户端访问ejb,要修改jboss_home/server/default/deploy/jboss-web.deployer/META-INF/jboss-service.xml文件中,由false改为trueJMS(JAVAMESSAGESERVICE):JAVA消息服务定义:一个客户端向另一个客户端发送消息,如QQ,EMAIL等分类:JMS支持两种消息模型:POINT-TO-POINT(P2P)和PUBLISH/SUBSCRIBE(PUB/SUB),即点对点的发布订阅模型P2P图示:概念:消息队列(Queue)、发送者(Sender)、接收者(Receiver).每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。(如果你希望每个消息都被处理成功就使用P2P)每个消息只有一个消费者(Consumer):即一旦被消费,消息就不在消息队列中发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列接收者在成功接收消息之后需向队列应答成功PUB/SUB图示:概念:主题(Topic)、发布者(Publisher)、订阅者(Subscriber)。客户端将消息发送到主题,多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。每个消息可以有多个消费者发布者和订阅者之间有时间上的依赖性,针对某个主题的订阅者,它必须创建一个订阅之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态为了缓和这种严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅,这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息消息的消费在JMS中,消息的产生和消费是异步的。对于消费来说,JMS是消费者可以通过两种方式来消费消息同步---订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞异步---订阅者或接收者可以注册一个消息监听器。当消息达到后,系统自动调用监听器的onMessage方法JMS编程模型ConnectionFactoryConnectionCreatesCreatesCreatesSessionMsgCreatesDestinationSendsToDestinationReceivesFrom创建Connection对象的工厂,针对两种不同的JMS消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种,可以通过JNDI来查找ConnectionFactory对象DestinationDestination的意思是消息生产者的消息发送目标或者说是消息消费者的消息来源,对于消息生产者来说,它的Destination是某个队列(Queue)或者某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题。所以Destination实际上就是两种类型的对象:Queue,Topic。可以通过JNDI来查找ConnectionConnection表示在客户端和JMS系统之间建立的链接(对TCP/IPsocket的包装)。Connection可以产生一个或多个Session,跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnectionSessionSession是我们操作消息的接口,可以通过session创建生产者、消费者、消息等。Session提供了事务的功能,当我们需要使用session发送或接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession消息的生产者消息生产者由Session创建,并用于将消息发送到Destination。同样,消息的生产者分为两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish)方法发送消息消息的消费者消息的消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceier(Queue)或者createSubcriber(Topic)来创建。当然也可以通过session的createDurableSubscriber方法来创建持久化的订阅者。MessageListener消息监听器,如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法,EJB中的MDB就是一种MessageListenerMessageDrivenBean对客户端来说,message-drivenbean就是异步消息的消费者,当消息到达之后,由容器负责调用MDB。客户端发送消息到destionation,MDB作为一个MessageListener接收消息。编写消息驱动Bean编写测试类引用Joss中的jar包(jboss_home/lib目录下)在类路径下面加入jndi.properties编写测试类再编写一个MDB类重新部署,观察运行结果,服务器端只会有一个MDB被调用编写一个TOPIC形式的MDB编写TOPIC测试类观察运行结果,所有的TopicMDB都被调用了怎么让EJB支持WEBSERVICE客户端简介把EJb发布为WebService,不同有编程语言所编写的WebService客户端都能够访问到它。前提EJB必须是无状态的EJB。如果在一个EJB上面没有定义此EJB是远程的还是本地的或是WebService的,默认的为本地客户端。通过本地访问方式来访问此EJB使用@WebService注解,在其对应的方法上使用@WebMethod注解编写BEAN新建一个EJBproject,编写三个类分别如下:User类UserManager类UserManagerBean类:为UserManager的实现类部署到JBOSS服务器上打开浏览器输入:可以访问.编写测试类进行测试使用AXIS包中现在的测试类进行测试:AXIS_HOME/samples/client/DynamicInvoker.java类使用方法参见:AXIS_HOME/samples/client/readme文件新建一个java工程,新建package:samples/client;将上述java文件copy到此package中,点击runconfigruations..,新建一个JavaApplication,name:DynamicInvoker,MainClass:samples.client.DynamicInvoker。在Arguments中输入wsdl的网络地址+空格+方法名+空格+方法参数注:运行时可能会报错,当前使用的Jboss版本为jboss-4.2.2.GA,错误提示为:NoContent-typeintheheader!解决方法:在Jboss_HOME/client目录下jboss-jaxrpc.jar,jboss-jaxws.jar,jboss-saaj.jar三个jar包copy到Jboss_home/lib/endorsed/下面,重启jboss服务器即可。根据WSDL编写测试类使用jdk自带的wsimport工具。在命令行中将wsdl编译成java类。使用如下命令将e:/aaa/01/下面或者子目录下面的User,UserManagerBean,UserManagerBeanService三个文件copy到测试工程中,然后创建一个Client类,如下运行后可以在控制台看到如下画面根据开发工具Eclipse等自动生成webservice客户端拦截器的使用持久化的BEAN基本要求一个实体类,即普通的POJO,并将其标识为@Entity实体类必须要有主键,一般用@Id将其标识在META-INF/目录下,有persistance.xml文件,其主要作用是定义实体类映射的相关配置信息:比如数据源,都有哪些实体类,以及持久化相关的其它一些属性开发配置JBOSS数据源Copy数据库驱动到JBOSS_HOME/server/default/lib下Copy安装路径下docs/examples/jca/mysql-ds.xml到/server/default/deploy目录下,并修改数据库用户名和密码

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功