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声明周期

创建:

  • newInstance()
  • dependency injection 依赖注入
  • 调用@PostConstruct,类似初始化方法

销毁

  • @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等等,需要自己处理。

 

生命周期:

创建:

  • newInstanse()
  • Dependency injection
  • @PostConstruct

钝化和反钝化

  • @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类

例子:

  • 编写一个java类,使用@WebService标注类

  • 在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等信息,来显示得定义服务地址,完成动态调用。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值