您当前的位置: 首页 >  Java

cuiyaonan2000

暂无认证

  • 2浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java: Protocol Standard

cuiyaonan2000 发布时间:2022-06-08 10:56:47 ,浏览量:2

序言

返璞归真~,各种解决方案都是遵循的Java协议规范.针对同一个规范,提出了多种解决办法.变的是实现方式,不变的是协议.整理下一些常见的规范cuiyaonan2000@163.com

JPA

JPA,即Java Persistence API,JAVA持久化API。

JPA的创建目的是:是描述对象关系映射(ORM)和持久对象管理接口的规范,用于为ORM实现创建标准。

ORM(Object Relational Mapping)是对象关系映射,在操作数据库之前,先把数据表与实体类关联起来。然后通过实体类的对象操作(增删改查)数据库表;所以说,ORM是一种实现使用对象操作数据库的设计思想。

那为什么要有ORM呢? 是为了解决关系型数据库,面向对象操作的转变.即通过对象的操作替代传统关系型的数据操作的解决方案.cuiyaonan2000@163.com

背景如下:

Java应用程序传统上使用JDBC (Java数据库连接)等技术访问关系数据库,来持久存储数据。关系型数据操作: JDBC API要求开发人员手工编写SQL中最基本的CRUD(创建、读取、更新和删除)操作,而这些操作缺乏可移植性。代码完全依赖于SQL,当从一个数据库转换到另一个数据库时会更加困难。 因为关系技术关注的是数据及其关系,而面向对象不仅强调数据,而且还强调在数据上执行的操作。这导致了面向对象与面向关系不适配。

所以诞生了ORM 用于以操作对象的方式来操作数据库cuiyaonan2000@163.com

JTA

JTA,即Java Transaction API,JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据。

JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。

Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分布式事务服务(distributed transaction)。 

JTA 是基于XA规范来实现分布式事务的(一个规范基于另一个规范cuiyaonan2000@163.com) JTA事务管理由JTA容器实现,一个JTA事务可以有多个参与者,只是提供了一个接口.并没有提供具体的实现,而是由 j2ee服务提供商 根据JTS(Java Transaction Service:Java 事务服务)规范提供的。(这里有个问题就是JTA会基于容器里提供资源管理,这样就限制了一个跨事务实现基于同一个容器内的工程间,同理Atomikos不是容器的解决方案,但是也是要求在同一个工程内的实现分布式事务的缺陷cuiyaonan2000@163.com)

XA是什么?

XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。XA协议包括两套函数,以xa_开头的及以ax_开头的。

根据如上的内容我们得知: XA划分了2个角色

  • 事务管理器(Transaction Manager) 
  • 资源管理器(Local Resource Manager)

所以JTA的分为2部分

  • 事务管理器(Transaction Manager):所有事务参与单元的协调与控制,提供面向开发人员的使用接口(事务管理器),开发接口的主要部分即为 UserTransaction 对象,开发人员通过此接口在信息系统中实现分布式事务.
  • 一个或多个支持 XA 协议的资源管理器 ( Resource Manager ) :任意类型的持久化数据存储,提供面向服务提供商的实现接口(资源管理器),实现接口则用来规范提供商(如数据库连接提供商)所提供的事务服务,它约定了事务的资源管理功能,使得 JTA 可以在异构事务资源之间执行协同沟通。

JTA本身并不承担实际的事务处理功能,它更多的是充当用户接口和实现接口之间的桥梁。实际实现事务的是 需要数据库支持XA协议cuiyaonan2000@163.com

JNI

JNI是Java Native Interface的缩写,它的设计目的是:

The standard Java class library may not support the platform-dependent features needed by your application。

You may already have a library or application written in another programming language and you wish to make it accessible to Java applications

You may want to implement a small portion of time-critical code in a lower-level programming language, such as assembly, and then have your Java application call these functions

通过小学一年级的翻译大致意思是:当你想在java中调用其它语言的方法,以解决自己的问题的时候可以使用JNI(注意JNI区别于Runtime 和 ProcessBuilder cuiyaonan2000@163.com)

大致思路就是

  1. java 类中需要调用外部语言包方法,首先提供一个native修饰的方法,该方法没有方法体,像抽象方法
  2. java的环境变量中添加其他语言的包.这个包在windows平台上对应了“名字.dll”,而在类UNIX平台上对应了“名字.so”。
  3. 使用其它语言编写对应的方法体,并生成相应的方法库
  4. 具体可以参考:Java JNI(Java Native Interface)介绍_吴小锤的博客-CSDN博客_java jni

JMX

JMX是Java Management Extensions(Java管理扩展)的缩写,翻译过来就是Java管理扩展.

同时JMX也是 Java 管理系统的一个标准,一个规范,也是一个接口,一个框架(首先JMX是个标准,然后JDK按照JMX标准实现了一个框架,这个框架已经实现了对JVM的一些监控cuiyaonan2000@163.com)

中间件软件WebLogic的管理页面就是基于JMX开发的,而JBoss则整个系统都基于JMX构架。 JConsole、VisualVM 也用到了 JMX。

JMX主要目的是让程序有被管理的功能,那么怎么理解所谓的“被管理”呢?试想你开发了一个软件(如WEB网站),它是在24小时不间断运行的,那么你可能会想要“监控”这个软件的运行情况,比如收到了多少数据,有多少人登录等等。或者你又想“配置”这个软件,比如现在访问人数比较多,你想把数据连接池设置得大一些。

所以我们按照JMX的规范也可以修改自己的Java应用,来实现对我们程序的监控,同时也能动态的修改我们Java应用的一些环境变量cuiyaonan2000@163.com

JMX的架构如下所示:

ProbeLevel(资源层,被监控层)

资源或者被监控对象的实现主要有如下几种

类型描述standard MBean这种类型的MBean最简单,它能管理的资源(包括属性,方法,时间)必须定义在接口中,然后MBean必须实现这个接口。它的命名也必须遵循一定的规范,例如我们的MBean为Hello,则接口必须为HelloMBean。dynamic MBean必须实现javax.management.DynamicMBean接口,所有的属性,方法都在运行时定义model MBean与标准和动态MBean相比,你可以不用写MBean类,只需使用javax.management.modelmbean.RequiredModelMBean即可。RequiredModelMBean实现了ModelMBean接口,而ModelMBean扩展了DynamicMBean接口,因此与DynamicMBean相似,Model MBean的管理资源也是在运行时定义的。与DynamicMBean不同的是,DynamicMBean管理的资源一般定义在DynamicMBean中(运行时才决定管理那些资源),而model MBean管理的资源并不在MBean中,而是在外部(通常是一个类),只有在运行时,才通过set方法将其加入到model MBean中。 AgentLevel(适配层)

MbeanServer管理资源和被监控对象

RemoteManagementLevel

提供远程访问的入口,从MbeanServer  获取信息

JMS

Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持JAVA应用程序开发。在J2EE中,当两个应用程序使用JMS进行通信时,它们之间并不是直接相连的,而是通过一个共同的消息收发服务连接起来,可以达到解耦的效果。

JMS天生就是异步的,客户端获取消息的时候,不需要主动发送请求,消息会自动发送给可用的客户端。

关注
打赏
1638267374
查看更多评论
立即登录/注册

微信扫码登录

0.0380s