加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

EJB3学习笔记_EJB纵览和webService

发布时间:2020-12-17 02:04:04 所属栏目:安全 来源:网络整理
导读:1、EJB是为了构建企业级的、分层的、分布式的应用标准,降低开发的复杂性。(包含以下一些问题) Remote Method Invocations(远程方法调用) Load Balancing(负载平衡) Transparent Fail-over(错误感知、容错性,将一台有问题主机的服务或用户会话状态迁移到另
  • 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)

  • 使用工具生成JAVA类。在JBOSS中http://localhost:8080/jbossws/?-> View a list of deployed services -> 找到服务端点地址(http://tarena-teacher:8080/sd10702-web/Converter?wsdl)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读