`
fiercelf
  • 浏览: 24028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JBoss JBPM 实践系列(一)--- 安装配置(Tomcat 6.0 + MySQL 5.1)

阅读更多
jBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统。jBPM是公开源代码项目,遵循Apache License。jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它的名称也改成JBoss jBPM。



       jBPM有两大特色,使他成为市场的一大两点。其中最大的特色就是它的业务逻辑定义没有采用目前的一些规范,如WfMC´s XPDL, BPML, ebXML, BPEL4WS等,而是它自己定义的JBoss jBPM Process definition language (jPdl)。jPdl把一个业务逻辑流程看作是一个UML状态图,如果你不熟悉UML状态图,那初学计算机语言的流程图应该熟悉吧,表达的方式和意思大同小异。jPdl详细定义了这个状态图的每个部分,如起始、结束状态,状态之间的转换等;其另一大特色就是集成Hibernate,确切的说是绑定,使用Hibernate来管理数据库,这样jBPM只专注于他的业务流程控制。



       从上面可以看出,jBPM是一个业务流程管理引擎,是一个工作流引擎。除此之外,它同时实现了对jPDL和对BPEL的支持。它整合了Hibernate技术处理数据库,创建了一系列的数据库表,持久化工作流引擎所需的状态。因此,jBPM支持所有Hibernate支持的数据库,能够把Java对象持久化到数据库中,把Hibernate支持的Java类的对象保存到数据库中!

     

       你完全可以像用 Java 的类库一样使用JBoss jBPM,而且通过配置JBoss jBPM也可以被部署在其它J2EE应用服务器上和任何数据库上。



       在本文中,我们首先来创建我们的JBoss jBPM运行开发环境。在开始之前,请准备一下软件产品:

·JDK 1.5 或者更高版本, 这里使用JDK 6u10b

·Apache Tomcat 5.5.x或更高版本,这里使用Tomcat 6.0.16

·MySQL 5.1 ,也可以选择其它Hiberante 支持的数据库,没有太大差别,这里使用MySQL 5.1

·Apache Ant 1.7.0

·JBPM-3.2.3

·Eclipse Europa(Eclipse V3.3) for JavaEE Developers或更高, 这里使用Eclipse V3.4



说明:JBoss jBPM的发布包中已经配置好了一套服务环境,是基于JBoss的。因为我们习惯了Tomcat 的小巧灵活,而且我们也不希望jBPM依赖JBoss。



1. 下载安装JDK,Tomcat, Ant, MySQL, 并设置相应的环境变量

此步骤不再熬述,具体请查阅官方文档

  Jdk:http://java.sun.com/

  Ant:http://ant.apache.org/

Tomcat:http://tomcat.apache.org/

Eclipse:http://www.eclipse.org/



2. 下载JBoss jBPM

JBoss jBPM 官方(http://www.jboss.org/jbossjbpm/)当前发布的版本为 3.2.3, 只需要下载jPDL Suite,下载后得到jbpm-jpdl-suite-3.2.3.zip,这个套件包含了所有的内容和资源,包括eclipse插件,示例,和流程管理控制应用。

解压jbpm-jpdl-suite-3.2.3.zip,这里解压后得到D:\jbpm-jpdl-3.2.3,其主要目录结构如下:

D:\jbpm-jpdl-3.2.3

|--- db    这里都是些sql定义和数据文件,如果改用其它数据库,可以使用这些资源来创建,服务还是很周到的。顺便

|             罗嗦一句,jBPM 默认使用的是内存数据库 hsqldb ,这个数据库还没研究过(嘿嘿---)

|

|--- deploy  用来部署你的应用的包和资源

|

|--- designer  这里是Eclipse插件,这样你就可以在图形界面来定义你的业务流程,骨灰级人物没他也能过日子

|

|--- doc  这里是jBPM相关组件的API 文档

|

|--- examples  这里是些学习的例子

|

|--- lib  jBPM 的类库

|

|--- server  这里有一个JBoss 服务器,并且包含了本JBoss jBPM引擎,还部署了websale例子

|

|--- src  这里是JBoss jBPM的源代码





      3. 配置数据库

      jBPM需要把初始化数据和工作流定义存储到数据库中,它定义了一套数据结构来存储这些数据,这也是该容器本身的特点。



      在mysql 中创建一个数据库 jbpm ,(create database jbpm;),并创建用户jbossjbpm(密码:jbossjbpm)

      说明:如果你嫌麻烦可以使用root账号和其密码,不过下面的设置请做相应的更改



      在D:\jbpm-jpdl-3.2.3\db 找到jbpm.jpdl.mysql.sql, 该文件必须修改一下,以符合MySQL的语法结构。具体就是在每条语句的末尾增加一个分号";"你可以借助 UltrEdit, EditPlus等工具来做这些事情(注意替换时要注意匹配大小写,有写表的字段中包含CREATE字符),如果是第一次创建这些数据库表,要删除create语句上面的alter和drop(这些表还都不存在)。





      4. 准备jBPM包

      这是个jbpm-jpdl流程管理控制台,就像Tomcat有个单独的Administrator应用用来管理配置和部署一样的东东。有了他你可以在图形界面来操作控制你的应用。



      打开命令行控制台,切换到D:\jbpm-jpdl-3.2.3\deploy 目录,执行以下命令:

      ant customize.console.for.tomcat

  

    注意:请确保你的ant安装配置妥当,可以在命令行输入:ant -version 来检测ant 是否正确安装。命令执行后能看到ant的版本信息即OK



    ant customize.console.for.tomcat 执行成功后,会在D:\jbpm-jpdl-3.2.3\deploy 目录下生成customized和target目录,其中customized目录下的jbpm-console.war即是我们想要的war包。

       我们需要修改jbpm-console.war/WEB-INF/classes/hibernate.cfg.xml 文件,以适应我们的资源属性的需要。修改后的结果如下:

Xml代码
<hibernate-configuration> 
  <session-factory> 
 
    <!-- hibernate dialect --> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> 
 
    <!-- JDBC connection properties (begin) --> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm</property> 
    <property name="hibernate.connection.username">jbossjbpm</property> 
    <property name="hibernate.connection.password">jbossjbpm</property> 
     <!-- JDBC connection properties (end) --> 
      
    <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> 
      
    <!-- DataSource properties (begin) ==  
    <property name="hibernate.connection.datasource">java:/JbpmDS</property> 
    == DataSource properties (end) --> 
    <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
...  

<hibernate-configuration>
  <session-factory>

    <!-- hibernate dialect -->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

    <!-- JDBC connection properties (begin) -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm</property>
    <property name="hibernate.connection.username">jbossjbpm</property>
    <property name="hibernate.connection.password">jbossjbpm</property>
     <!-- JDBC connection properties (end) -->
   
    <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
   
    <!-- DataSource properties (begin) ==
    <property name="hibernate.connection.datasource">java:/JbpmDS</property>
    == DataSource properties (end) -->
    <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
...

       这里就是启用了 更换了默认的数据属性,JDBC connection properties ,还有自己定义的数据名字和帐号,另外需要注意的是用

Xml代码
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 

<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>


代替JTATransactionFactory和CMTTransactionFactory,想用JTATransactionFactory或CMTTransactionFactory配置也可以,不过还没有研究过,有知道的朋友可以一起学习一下。



   

       拷贝jboss-j2ee.jar包至jbpm-console.war/WEB-INF/lib 。发布包下(D:\jbpm-jpdl-3.2.3)很多地方都有这个包你可以找一下,比如 D:\jbpm-jpdl-3.2.3\server\client。

       这里主要是用到了Java Transaction Architecture, 所以你可以用J2EE中的jta.jar包还替换jboss-j2ee.jar。jta相关信息请参考:http://java.sun.com/javaee/technologies/jta/index.jsp



        拷贝commons-collections.jar 包至jbpm-console.war/WEB-INF/lib  。发布包下(D:\jbpm-jpdl-3.2.3)好几处都有这个包,比如 D:\jbpm-jpdl-3.2.3\server\server\jbpm\lib 。这个包是Apache Commons包,到处都找的的到。



        拷贝jsf-api.jar和jsf-impl.jar包至jbpm-console.war/WEB-INF/lib ,你可以在D:\jbpm-jpdl-3.2.3\server\server\jbpm\deploy\jboss-web.deployer\jsf-libs种找到这两个包。

        说明:因为jbpm-console是一个jsf应用,没这两个包,你访问时会报404或505错误。

 

        拷贝MySQL JDBC驱动程序包至%CATALINA_HOME%/lib (Tomcat 6)或%CATALINA_HOME%/common/lib(Tomcat 5.5)

       



        拷贝修改后的jbpm-console至%CATALINA_HOME%/webapps



        这样jBPM基本上配置完成,但是我们还不能访问他,还需要配置安全访问控制和初始的用户数据





        5. 配置Tomcat 安全域

        方法一:在%CATALINA_HOME%/conf/Catalina/localhost 创建一个jbpm-console.xml 文件,内容如下:

Xml代码
<Context> 
<Realm  className="org.apache.catalina.realm.JDBCRealm"   
    driverName="com.mysql.jdbc.Driver" 
    connectionURL="jdbc:mysql://localhost:3306/jbpm" 
    connectionName="jbossjbpm"   
    connectionPassword="jbossjbpm" 
    userTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"   
    userNameCol="g.TYPE_ = 'security-role' AND m.GROUP_ = g.ID_ AND m.USER_ = u.ID_ AND u.NAME_"   
    userCredCol="DISTINCT u.PASSWORD_" 
    userRoleTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"   
    roleNameCol="g.NAME_" /> 
</Context> 

<Context>
<Realm  className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/jbpm"
connectionName="jbossjbpm"
connectionPassword="jbossjbpm"
userTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"
userNameCol="g.TYPE_ = 'security-role' AND m.GROUP_ = g.ID_ AND m.USER_ = u.ID_ AND u.NAME_"
userCredCol="DISTINCT u.PASSWORD_"
userRoleTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"
roleNameCol="g.NAME_" />
</Context>

         方法二:修改 %CATALINA_HOME%/conf/tomcat-users.xml文件来设置安全域。为了不和tomcat已有的用户冲突,这里把 tomcat以前的登陆帐号username="admin" 修改为username="tadmin",修改后的文件如下:



Xml代码
<?xml version='1.0' encoding='utf-8'?> 
 
<tomcat-users> 
 
  <role rolename="user"/> 
 
  <role rolename="administrator"/> 
 
  <role rolename="manager"/> 
 
  <role rolename="sales"/> 
 
  <role rolename="hr"/> 
 
  <role rolename="admin"/> 
 
  <role rolename="participant"/> 
 
  <user username="user" password="user" roles="user,sales"/> 
 
  <user username="shipper" password="shipper" roles="user,hr"/> 
 
  <user username="manager" password="manager" roles="admin,hr,manager,user,sales"/> 
 
  <user username="tadmin" password="" roles="admin,manager"/> 
  <user username="admin" password="admin" roles="admin,user,hr"/> 
</tomcat-users> 

<?xml version='1.0' encoding='utf-8'?>

<tomcat-users>

  <role rolename="user"/>

  <role rolename="administrator"/>

  <role rolename="manager"/>

  <role rolename="sales"/>

  <role rolename="hr"/>

  <role rolename="admin"/>

  <role rolename="participant"/>

  <user username="user" password="user" roles="user,sales"/>

  <user username="shipper" password="shipper" roles="user,hr"/>

  <user username="manager" password="manager" roles="admin,hr,manager,user,sales"/>

  <user username="tadmin" password="" roles="admin,manager"/>
  <user username="admin" password="admin" roles="admin,user,hr"/>
</tomcat-users>

         6. 初始化数据

         在MySQL jbpm数据库中插入以下数据

Sql代码
INSERT INTO JBPM_ID_GROUP VALUES(1,'G','sales','organisation',NULL);  
 
INSERT INTO JBPM_ID_GROUP VALUES(2,'G','admin','security-role',NULL);  
 
INSERT INTO JBPM_ID_GROUP VALUES(3,'G','user','security-role',NULL);  
 
INSERT INTO JBPM_ID_GROUP VALUES(4,'G','hr','organisation',NULL);  
 
INSERT INTO JBPM_ID_GROUP VALUES(5,'G','manager','security-role',NULL);  
 
INSERT INTO JBPM_ID_USER VALUES(1,'U','user','user@sample.domain','user');  
 
INSERT INTO JBPM_ID_USER VALUES(2,'U','manager','manager@sample.domain','manager');  
 
INSERT INTO JBPM_ID_USER VALUES(3,'U','admin','admin@sample.domain','admin');  
 
INSERT INTO JBPM_ID_USER VALUES(4,'U','shipper','shipper@sample.domain','shipper');  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(1,'M',NULL,NULL,2,4);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(2,'M',NULL,NULL,3,4);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(3,'M',NULL,NULL,4,4);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(4,'M',NULL,NULL,4,3);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(5,'M',NULL,NULL,1,3);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(6,'M',NULL,NULL,2,3);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(7,'M',NULL,NULL,3,3);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(8,'M',NULL,NULL,3,2);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(9,'M',NULL,NULL,2,2);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(10,'M',NULL,NULL,2,5);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(11,'M',NULL,'boss',2,1);  
 
INSERT INTO JBPM_ID_MEMBERSHIP VALUES(12,'M',NULL,NULL,1,1); 

INSERT INTO JBPM_ID_GROUP VALUES(1,'G','sales','organisation',NULL);

INSERT INTO JBPM_ID_GROUP VALUES(2,'G','admin','security-role',NULL);

INSERT INTO JBPM_ID_GROUP VALUES(3,'G','user','security-role',NULL);

INSERT INTO JBPM_ID_GROUP VALUES(4,'G','hr','organisation',NULL);

INSERT INTO JBPM_ID_GROUP VALUES(5,'G','manager','security-role',NULL);

INSERT INTO JBPM_ID_USER VALUES(1,'U','user','user@sample.domain','user');

INSERT INTO JBPM_ID_USER VALUES(2,'U','manager','manager@sample.domain','manager');

INSERT INTO JBPM_ID_USER VALUES(3,'U','admin','admin@sample.domain','admin');

INSERT INTO JBPM_ID_USER VALUES(4,'U','shipper','shipper@sample.domain','shipper');

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(1,'M',NULL,NULL,2,4);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(2,'M',NULL,NULL,3,4);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(3,'M',NULL,NULL,4,4);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(4,'M',NULL,NULL,4,3);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(5,'M',NULL,NULL,1,3);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(6,'M',NULL,NULL,2,3);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(7,'M',NULL,NULL,3,3);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(8,'M',NULL,NULL,3,2);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(9,'M',NULL,NULL,2,2);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(10,'M',NULL,NULL,2,5);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(11,'M',NULL,'boss',2,1);

INSERT INTO JBPM_ID_MEMBERSHIP VALUES(12,'M',NULL,NULL,1,1);

      7. 启动Tomcat 服务,查看控制台的日志,排除错误,数据库错误和支持库不完整都可能导致错误。

      在浏览器中输入:http://localhost:8080/jbpm 能正常访问说明部署成功,你可以用页面上列出的用户和账号登陆进去体验一下。

分享到:
评论

相关推荐

    jbpm-jpdl-suite-3.2.3安装配置.doc

    - 配置Tomcat 6.0作为WEB服务器,它是运行jbpm应用的容器。 - 安装MySQL 5.0数据库,jbpm将在这里存储流程实例和相关数据。 2. **jbpm-jpdl-suite-3.2.3下载与解压**: - 从官方网址...

    linux 下 配置JBoss6.0+JDK7.0

    在Linux环境下配置JBoss6.0与JDK7.0是一项关键的任务,因为这两个组件是许多企业级Java应用的基础。JBoss是一个流行的开源应用服务器,它支持Java EE规范,而JDK则是运行Java应用程序和应用服务器所必需的开发工具包...

    jbpm-4.3-src.rar_bdf-jbpm4 src _jboss 4.3_jboss jbpm4.3_jbpm-4.3

    jbpm-4.3-src.rar_bdf-jbpm4 src _jboss 4.3_jboss jbpm4.3_jbpm-4.3 这个压缩包文件包含的是JBOSS jBPM4.3的源代码,这是一个用于业务流程管理(BPM)的开源框架。jBPM是一个强大的工具,它提供了流程定义、执行和...

    jbpm-jpdl-suite-3.2.3的安装配置

    自2004年10月18日成为JBoss企业中间件平台的一部分以来,jBPM一直在不断发展,其核心特性是使用了JBoss jBPM Process Definition Language (jPDL)来定义业务流程,而不是遵循传统的WfMC's XPDL、BPML、ebXML或BPEL4...

    apache-tomcat6.0

    Tomcat是Apache软件基金会Jakarta项目的一部分,它是轻量级的,相对其他如JBoss、WebLogic等商业应用服务器来说,更易于配置和管理。 **Java Servlet技术** Java Servlet是一种Java编程语言的接口,允许Java代码在...

    Jboss-Jbpm-Getting-Started.pdf

    《JBoss jBPM入门与实践》 一、引言:深入理解JBoss jBPM JBoss jBPM(jBusiness Process Management)是JBoss家族中的一个开源工作流引擎,用于实现业务流程管理(BPM)解决方案。它提供了一套完整的工具集,包括...

    Tomcat6.0

    "tomcat-6.0.10.exe"是Tomcat6.0的安装程序,其中".exe"是Windows操作系统中的可执行文件扩展名,表示这是一个用于在Windows环境下安装Tomcat6.0的程序。版本号"6.0.10"表示这是6.0系列中的第10个修订版。 **知识点...

    jboss-as-sprint-int-5.0.0.GA.jar 和 jboss-spring-int-vfs.jar

    在Java企业级应用开发中,常常会涉及到不同的服务器平台,比如Tomcat和JBoss。这两个都是非常流行的开源应用服务器,它们各自具有独特的特性和优势。在将应用从一个服务器平台迁移到另一个时,可能会遇到兼容性问题...

    jbpm 5.0 jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版

    jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版

    jboss-as-sprint-int-5.0.0.GA.jar jboss-spring-int-vfs.jar

    在IT行业中,尤其是在Java企业级应用开发中,JBoss是一个非常知名的开源应用服务器,它提供了对Java EE规范的实现,让开发者能够部署和管理Java应用程序。"jboss-as-sprint-int-5.0.0.GA.jar" 和 "jboss-spring-int-...

    JBoss jBPM

    JBoss jBPM 是一个复杂的可扩展的工作流管理系统. JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性...

    jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL

    总之,部署jBPM-JPDL v3.2到Tomcat + MySQL环境涉及多个步骤,包括系统环境的配置、相关软件的安装和设置,以及jBPM示例的运行。完成这些步骤后,你将拥有一个基础的jBPM工作流管理系统,能够进行流程的管理和监控。

    jboss --JBPM介绍及应用

    针对新手用户,JBoss jBPM还提供了一系列快速入门指南,帮助他们更快地上手。 - **更改默认核心JBoss jBPM安装**:指导用户如何自定义安装路径和配置。 - **配置任务节点**:详细介绍如何设置流程中的任务节点,...

    jboss-native-2.0.8-windows-ssl

    标题 "jboss-native-2.0.8-windows-ssl" 暗示了我们要讨论的是JBoss Native在Windows环境下的一个版本,特别是针对SSL(Secure Socket Layer)支持的实现。JBoss Native是Red Hat JBoss中间件的一部分,它提供了一个...

    tomcat 6.0

    与像JBoss、WebLogic、WebSphere这样的全功能应用服务器相比,Tomcat更轻量级,专注于Servlet和JSP的部署,对于小型或中型应用来说,它的配置和管理相对简单。然而,对于需要完整Java EE支持的大型企业应用,可能...

    tomcat6.0安装包

    "Tomcat6.0安装包"指的是Apache Tomcat的第6.0版本的安装程序,这是一个用于部署Java Servlet和JavaServer Pages(JSP)的应用服务器。Tomcat是Apache软件基金会Jakarta项目的一部分,它遵循Apache License开源协议...

    JBOSS5.1安装配置说明

    JBOSS5.1安装配置说明 JBOSS 是一个基于 Java 的开源应用服务器,可以运行在 Windows、Linux、Unix 等多种操作系统平台上。为了在 Windows 下安装和配置 JBOSS,我们需要按照以下步骤进行操作。 安装 JAVA 环境 ...

    jboss-servlet-3.0-api-1.0.1-9.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    ejb课程测试代码,eclipse+jboss5.1 ant编译等代码

    【ejb课程测试代码】是针对企业级Java Bean(Enterprise JavaBeans,简称EJB)技术的一系列测试案例,主要用于教学和实践。EJB是Java平台企业版(Java EE)的一部分,设计用于构建可扩展的、安全的、事务处理的...

Global site tag (gtag.js) - Google Analytics