微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EJB3学习笔记_EJB纵览和webService

  • 1、EJB是为了构建企业级的、分层的、分布式的应用标准,降低开发的复杂性。(包含以下一些问题)
  • Remote Method Invocations(远程方法调用)
  • Load Balancing(负载平衡)
  • Transparent Fail-over(错误感知、容错性,将一台有问题主机的服务或用户会话状态迁移到另一台)
  • Back-end Integration(后端系统集成,如数据库)
  • Transactions(事务)
  • Clustering(集群)
  • Dynamic Redeployment(动态部署)
  • Clean Shutdown(平稳关机,在最后一个用户退出后关机,保持当前用户用完退出新用户不再进入)
  • Logging and Auditing
  • Systems Management
  • Threading
  • Message-oriented and Middleware
  • Component Life Cycle
  • Resource pooling
  • Security
  • Caching
  • ...

2、远程方法调用实现方式

  • 定义公共接口
  • 本地方法从命名服务器中获得存根对象(命名服务器初始化时需要:a、命名服务器的驱动. b、网络信息)
  • 存根对象调用方法,远程拦截器通过代理在方法前后插入中间件服务(事务安全等),再调用远程方法。(拦截器也实现了接口)
  • 在同一个JVM中的调用为本地调用,在不同JVM中的未远程调用(用物理主机是否分隔无关)。

3、中间件服务分显示和隐式两中

  • 显示的,比如自己声明事务边界,自己open,commit。
  • 隐式的,同步部署描述符或标注,定制服务。

4、SOA与EJB

  • SOA抽象服务,功能的对外接口,一些列组件提供,抽象为数据交互,做到一般适用化。
  • SOA不关心是用什么语言实现,不关心用了多少组件,适用公共接口和互操作协议,达到异构平台的互操作。
  • EJB通过Web service来实现SOA。(corba也是一种SOA实现,但比较复杂)

5、Web Service的主要技术

  • SOAP:Simple Object Access Protocol.互操作协议。(必须)
  • WSDL:Web Service Description Language.类似于适用说明。(非必须)
  • 都是通过XML文件来描述

6、常用Java EE技术列表

  • Enterprise JavaBeans(EJB)
  • Java API for Web Services(JAX-WS)提供Web服务的简单支持
  • The Web Services Metadata for the Java Platform
  • Java Remote Method Invocation(RMI) (远程方法调用)and RMI-IIOP(远程方法调用的互操作协议,EJB用这个,WebService用SOAP)
  • Java Naming and Directory Interface(JNDI)(适用命名协议的统一API)
  • Java Database Connectivity(JDBC)
  • Java Transaction API(JTA) and Java Transaction Service(JTS)(事务支持的服务)
  • Java Messaging Service(JMS)(异步应用,参考手机短信,由消息服务器提供,用户通过统一API调用)
  • Java Servlets
  • Java Server Pages(JSP)
  • Java Server Faces(JSF)
  • Java EE Connector Architecture(JCA)(与后端系统集成,规定后端系统需要实现的接口)
  • Java API for XML Parsing(JAXP)
  • Java Architecture for XML Binding(JAXB)
  • Java Authentication and Authorization(JAAS)(Java认证和授权服务)

7、开发EJB的环境

  • Java SE (basic libraries)
  • Java EE (Add-on libraries to support JSP/Servlets and EJB,Deploy tool,Java EE serever)

8、列子

 

 

9、查看Jboss上的EJB服务

  • http://localhost:8080/ -> JMS Console -> jboss-service=JNDIView -> java.lang.String list() - invoke -> 查找全局JNDI名字(Global JNDI Namespace)
  • 一些JNDI是本地的,只供JBOSS内部访问

10、EJB的类型

 

1)、Session bean : model business process,

  • Stateful Session Bean

           Maintains state whici is encapsulated within the bean instance

           Across multiple client requests

  • Stateless Session Bean

 

2)、Message-driven bean :similar to session bean,asynchronoous programming model.

   

 

3)、Entity bean: model business data.(已经用JPA代替)

  • Has not been enhanced in EJB3.0
  • Will not be included in course
  • Uses Entity API instead

 

11、Session Bean Subtypes

 

Stateless Session Beans

  • Represent single request conversation
  • Need not to keep states across method invocations
  • Can be shared by multiple clients
  • 单线程,共享的,容器会维护一个bean池。

Stateful Session Beans

  • Represent business process drawn-out conversations over several request
  • Designated to service business processes that span multip method request or transactions
  • Retain state on behalf of an individual client

12、Stateless Session Bean声明周期

创建:

销毁

  • @PreDestroy 销毁前的回调方法

13、Stateful Session Bean 交换策略和生命周期

 

交换策略:当心的请求来临,当前stateful session bean已达到服务器的最大限制,就将不活动的bean钝化,序列化到磁盘上。

               当刚才不活动的用户活动时,再从容器中将刚才钝化的信息拿回来重新去找个不活动的bean相应请求。

               (就是拆东墙补西墙)。

 

@PerPassivate:钝化前的回调方法。 

@PostActivate: 反钝化后的回调方法

 

钝化时序列化对象:(以下对象容器维护)

  • 非transient的原始类型
  • 非transient的java对象
  • 对其他bean的引用
  • SessionContext(EJB上下文),The UserTransaction(事务),EntityManager or EntityManagerFactory,or a Timer object(容器维护)
  • JNDI naming contexts

不被序列化的对象:比如JDBC的连接connector等等,需要自己处理。

 

生命周期:

创建:

钝化和反钝化

  • @PrePassivate
  • @PostActivate

销毁

  • @PreDestroy

14、使用@Interceptors({xxx.class}) 定义生命周期回调的监听器

  • 定义4个回调方法
  • 执行顺序:从外到内(优先实现类本身的),从左到右(定义的监听器)

15、使用部署描述符 XML

 

部署描述符 可以覆盖 标注。(便于修改,而不用重新编译源代码

 

16、 @Remove标注

      标注业务方法,客户自己调用,告诉容器,已经完成调用,可以移除此bean,而不是等会话超时。

 

17、通过System.setProterty()设置系统环境变量, 可以完成进程间通讯

或也可以再JVM启动时使用 -D设置环境变量。

 

18、编写Web Service 的两种方式

  1. 先写java类,用容器生成wsdl
  2. 写wsdl,通过工具生成java类

例子:

  • 在web.xml中作为servlet 标注映射关系,部署在容器中(如jboss)

          jboss/bin/wsconsume.bat http://tarena-teacher:8080/sd10702-web/Converter?wsdl -o F:/

      -o : 指明生成文件存放位置

      -k : 同时保存JAVA文件

  • 编写客户类,运行时需要包含Jboss相关jar包.

 

 

19、EJB2.1之后 Stateless Session Bean也能发布为webService

扩展了用户接口:这样用户可以通过RMII-IIOP类型的客户端,也可以用webService的类型访问。

 

20、以上调用WebService都是静态的方式,就是指服务端都是固定的,如果服务端的IP变更之类,就会调用失败。

 

   可以通过查看源码,找到对应的URL和server定位变量,通过参数的形式输入URL等信息,来显示得定义服务地址,完成动态调用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐