从Jboss5迁移到Jboss7

学习了解jboss7  1. 什么是J2EE? J2EE是Java 2enterprise edition,是Java的一种企业版,用于企业级的应用服务开发。 J2SE是Java 2standard edition,是Java的标准版,用于标准的应用开发。 J2ME是Java 2Micro Edition,是Java的微型版,常用于手机上的开发。 J2EE,J2SE,J2ME是java 阅读详情

1.        Jboss7新特性

1.1 构建在Modular Service Container上,充分地利用了多核处理器的能力,并发、按需启动服务,启动速度更快、占用内存更小。

1.2 全面兼容Java EE6

1.3 支持JDK6/7

1.4 统一的配置和管理

1.5 兼容OSGI 4.2,支持OSGI和Java EE组件模型集成。

1.6容易测试:利用Arquillian测试平台—一种集成测试组件模型,更易于测试,改变-编译-测试的周期更短。

1.7 两种模式

Standalone模式(使用standalone.bat启动)相当于以前的3、4、5、6版本。配置文件、发布内容等放在standalone目录下。

Domain模式(使用domain.bat启动)是Jboss7的一个新特征,可以在一个控制点管理多个服务器。

1.8 类加载

类加载基于Jboss Module,取代了层次类加载环境,避免了当类存在多个版本时,导致类加载错误。由于类加载是基于模块的,必须显示的定义模块依赖。部署也是模块化的,如果没有显示的定义类依赖则不能访问应用服务器jar中的类。

2.        迁移步骤

在Jboss7部署项目与在jboss5上有很大区别,最主要原因是由于类的加载模式改变了。Jboss5部署相对简单,只需将相应的包部署到lib和deploy目录即可,类加载器会按层次自动加载,不用配置依赖关系。而jboss7完全不一样,jboss7是按模块化加载,不同模块由不同类加载器加载,其他模块的jar包,对其是不可见的,这时需要手动配置包之间依赖关系,否则会报ClassNotFoundException等错误。另外对于数据源和JNDI的配置也发生了变化,所以把项目从Jboss5往Jboss7迁移时可以大概分为下述3个步骤:

2.1    依赖关系的配置

在Jboss7中,模块之间的依赖关系分为隐式依赖和显式依赖。

2.1.1隐式依赖

尽管Jboss7中模块默认是隔离的,在部署过程中,一些由应用服务器定义的模块依赖会自动装配。例如,如部署一个Java EE应用,将自动添加Java EE API依赖,这也称为隐式模块依赖。

2.1.2显式依赖

对于显式依赖,必须在MANIFEST.MF文件的“Dependencies:”或“Class-Path:”项或在Jboss7特有的部署文件jboss-deployment-structure.xml中显式定义。对于已有的项目,手动去查找各个模块之间的依赖关系是费时又费力的,可以通过Tattletale工具来分析,在分析报告的OUTPUT_DIRECTORY/index.html文件中点击"JBoss A7"则可以得到部分依赖关系,另外的依赖关系可以在“Depends On”中得到。

在Jboss7中类的加载优先级(从高到低):

(1)系统依赖 - 服务器自动加载的模块依赖,包括Java EE api。

(2)用户依赖 - 在jboss-deployment-structure.xml(在ear的META-INF内,war的META-INF或WEB-INF内)或Dependencies: 项内配置的依赖。

(3)本地资源 - 发布目录下的类文件,如war包下的WEB-INF/classes或WEB-INF/lib。

(4)部署间依赖 - 在ear内的其他部署依赖。包括ear lib 目录内的类,或其他ejb包内的类。

在部署时,War包被认为是一个单独的模块,WEB-INF/lib和WEB-INF/classes内的类是相同的,都由同一类加载器加载。Ear包是多模块的部署。这意味着不是ear内的所有类都能访问ear内所有其他类,除非指定明确的依赖。默认情况下,EAR/lib目录是一个单独的模块,每个WAR或EJB jar是一个单独的模块。子部署(war和ejb-jar)总是依赖父模块,可以访问EAR/lib内的类,然而它们彼此间不总是有自动依赖。可以通过修改如下配置控制这个行为:

<subsystem xmlns="urn:jboss:domain:ee:1.0" >

<ear-subdeployments-isolated>false</ear-subdeployments-isolated>

</subsystem>

ear-subdeployments-isolated默认值为false,允许子部署访问其他子部署的类。在一个Ear包中,war可以访问jar包里的类,jar包之间也可以相互访问,但是jar包不能访问war包中的类,不管ear-subdeployments-isolated的值为true还是false。

2.1.3全局模块

可以把一些模块设置为全局模块,则所有的部署都可以访问该模块,在做项目迁移时,可以使用这种方法来解决模块依赖问题。格式如下:

<subsystem xmlns="urn:jboss:domain:ee:1.0"/>

       <global-modules>

              <module name="org.apache.log4j"/>

       </global-modules>

2.2    数据源配置

在Jboss5中,数据源的配置文件为*-ds.xml文件,该文件放在服务器的deploy目录下,其相应的JDBC驱动则放在服务器的lib目录或应用程序的WEB-INF/lib目录下。而在Jboss7中这些都不需要,配置文件为Jboss7_home/standalone/configuration/standalone.xml或者是Jboss7_home/domain/configuration/domaion.xml。可以使用IronJacamar工具把原来的*-ds.xml文件转变为Jboss7中所需要的格式。

2.2.1          安装JDBC驱动

安装JDBC驱动分为两种方式:(1)作为一个部署(推荐的做法)(2)作为一个模块

2.2.1.1    作为一个部署

直接把JDBC驱动作为一个普通的jar包放在deployment目录下,该JDBC驱动应该是一个兼容JDBC4(Jdbc 4兼容的driver在jar包内含有META-INF/services/java.sql.Driver文件,其中指定了驱动类名称。)的驱动。若JDBC驱动包含不止一个jar包,则应作为一个模块来部署。

2.2.1.2    作为一个模块

需要在modules目录下创建一个目录结构,其内包含驱动jar包和module.xml文件。下面以安装mysql驱动为例,首先在modules目录下建立com/mysql/main文件夹,且把mysql驱动和module.xml文件放在main文件夹中。module.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.1" name="com.mysql">

<resources>

<resource-root path="mysql-connector-java-5.1.15.jar"/>

</resources>

<dependencies>

<module name="javax.api"/>

</dependencies>

</module>

需要注意的是name应与建立的文件夹同名且module.xml文件的开头不能有空格,否则会产生“New missing/unsatisfied dependencies”错误。

2.2.2          注册JDBC驱动

2.2.2.1    作为模块的JDBC驱动注册

<datasource jndi-name="java:/YourDatasourceName" pool-name="YourDatasourceName">

<connection-url>jdbc:mysql://localhost:3306/YourApplicationURL</connection-url>

<driver> mysql-connector-java-5.1.15.jar </driver>

<transaction-isolation> TRANSACTION_READ_COMMITTED </transaction-isolation>

<pool>

<min-pool-size>100</min-pool-size>

<max-pool-size>200</max-pool-size>

</pool>

<security>

<user-name> USERID </user-name>

<password> PASSWORD</password>

</security>

<statement>

<prepared-statement-cache-size>100</prepared-statement-cache-size>

<share-prepared-statements/>

</statement>

</datasource>

2.2.2.2    作为部署的JDBC驱动注册

<datasource jndi-name="java:/MySqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true">

<connection-url>jdbc:mysql://localhost:3306/gg</connection-url>

<driver>mysql</driver>

<pool>

   <min-pool-size>20</min-pool-size>

   <max-pool-size>20</max-pool-size>

   <prefill>true</prefill>

 </pool>

<security>

    <user-name>root</user-name>

     <password>111</password>

</security>

<driver name="mysql" module="com.mysql">

  <driver-class>com.mysql.jdbc.Driver</driver-class>

</driver>

</datasources>

2.3    JNDI

2.3.1 JNDI命名规则

jboss7使用了更为严格的JNDI命名规则,其基本规则如下:

(1)相对命名如“ExampleDS”或“jdbc/ExampleDS”应该修改为相对于具体环境,如“java:comp/env”,“java:jboss/env”,“java:module/env”等。

(2)绝对命名如“/jdbc/ExampleDS”应该修改为相对命名如“java:jboss/root”。

(3)如“java:/jdbc/ExampleDS”的绝对命名也应如(2)修改。

(4)“java:jboss”命名在整个jboss服务器中时共享的。

(5)任何以“java:”开头的命名必须结合“comp”,“module”,“app”,“global”,“jboss”中的一个,否则会报错。

2.3.2 Local JNDI

name

scope

properties

java:comp

current component

 

standard namespaces

java:module

current module

java:app

current application

java:global

application server

java:jboss

global

 

jboss7 提供的全局命名

java:/

global

java:jboss/exported

global

如在HelloWorldEar包中有HelloWorldEJB,在HelloWorldEJB中有HelloWorld bean实现了HelloWorldRemote接口,则部署时HelloWorld绑定的JNDI为以下几个:

java:global/HelloWorldEar/HelloWorldEJB/HelloWorld!com.ejb.HelloWorldRemote

java:app/HelloWorldEJB/HelloWorld!com.ejb.HelloWorldRemote

java:module/HelloWorld!com.ejb.HelloWorldRemote

java:jboss/exported/HelloWorldEar/HelloWorldEJB/HelloWorld!com.ejb.HelloWorldRemote

java:global/HelloWorldEar/HelloWorldEJB/HelloWorld

java:app/HelloWorldEJB/HelloWorld

java:module/HelloWorld

2.3.3 remote JNDI

在jboss5中默认ejb的JNDI名称为:

       本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local

       远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote

如果ejb只是在单独的jar包中,则不需要EAR-FILE-BASE-NAME。而在jboss7中remote ejb的JNDI命名规则如下:

       ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>,如果是有状态bean,则还需加上?stateful。

其中app-name指的是ear包的名称

       module-name指的是其所在的jar包的名称

       distinct-name指的是起的别名

       bean-name指的是该bean的名字

       fully-qualified-classname-of-the-remote-interface指的是其实现的接口的名字,要加上完整的包名。

2.3.4 绑定全局JNDI

直接修改standalone.xml或者domain.xml文件,格式如下所示:

<subsystem xmlns="urn:jboss:domain:naming:1.1"/>

<bindings>

           <lookup name="AdminEjb/local" lookup="ejb:/admin_ejb/AdminEjb!com.mipt.admin.ifc.AdminIfc"/>

</bindings>

3.        可能会遇到的问题

3.1ejb JNDI

由于jboss7与jboss5JNDI命名方式的差别很大,若在原有项目中大量使用了JNDI,则在迁移时要进行更改或绑定,将是一项庞大的工程。

3.2 配置文件无法解析

在添加数据源或其他需要修改standalone.xml或domain.xml配置文件后,重新启动服务器会报无法解析配置文件的错误,可以通过jboss-home/bin/jboss-cli.bat来修该配置文件。以下为添加一个数据源的格式:

[standalone@localhost:9999 /] /subsystem=datasources:installed-drivers-list

{

"outcome" => "success",

"result" => [{

"driver-name" => "h2",

"deployment-name" => undefined,

"driver-module-name" => "com.h2database.h2",

"module-slot" => "main",

"driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource",

"driver-class-name" => "org.h2.Driver",

"driver-major-version" => 1,

"driver-minor-version" => 2,

"jdbc-compliant" => true

}]

3.3 ClassNotFoundException  ClassCastException

出现上述问题则是模块之间缺少依赖关系,导致找不到相应的类。

总结

在把项目从jboss5迁移到jboss7上时,上述3个步骤能解决大部分的问题。对于日志依赖的配置以及使用了spring、hibernate、EJB2技术的项目迁移的更改还需做另外的探讨。以上为个人总结,欢迎大家拍砖。

原文:http://blog.youkuaiyun.com/liusai19/article/details/8486001

升级 JBoss:从旧版本到新版本的后端开发 在软件开发中,保持应用程序和框架的最新版本是至关重要的。对于使用 JBoss 作为后端框架的开发人员来说,升级 JBoss 到最新版本可以带来多种好处,包括性能改进、新功能和安全性增强。本文将详细介绍如何将 JBoss 从旧版本升级到新版本,并提供相应的源代码示例。 阅读详情

相关推荐

jboss热部署配置

NULL 博文链接:https://lionelf.iteye.com/blog/1532452

jboss热部署

测试环境中,经常要更新代码,需要重新加载工程,以前的办法都是重启jboss,但是这个浪费太多的时间,有一个办法可以解决这个问题,就是jboss的热部署 #vim /usr/local/jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer/context.xml org.jb...

qq2964047的博客 773

jboss 热部署必须jar

jboss热部署必须文件.更改jsp文件不用再频繁关闭、启动jboss.

Jboss的下载和安装

jboss有开源和商业两个版本,他们区别如下:JBoss AS 开源社区版本,发布比较频繁。JBoss 7 ,先后发布了 7.0.0, 7.0.1, 7.0.2, 7.1.0, 7.1.1, 7.1.2, 7.1.3, 7.2.0,其中 7.1.1 比较经典,7.2.0 是 JBoss EAP 6.1 的基础,但7.1.2, 7.1.3, 7.2.0 只是源代码打了 Tag,并没提供开放下载。JBoss EAP(Enterprise Application Platform) 在开源版本上构建的企业版本,目

大宇进阶之路的博客 5819

动手学Moveit2 | 运行配置好的机械臂功能demo

通过这个小demo你可以直观的感受moveit2的强大,但还有很多需要我们探索的,比如机械臂是如何规划的,规划的过程中如何结合环境信息,规划的时候机械臂如何求解,如何和真实的机械臂对接等等,这些都需要你来进一步探索,今天就到这里,明天给大家秀一下小仙女焊的fishbot运控板。

生活不止眼前的苟且 8879

GIS国土工具实战:从地类分析到坐标转换,一站式解决项目难题

本文详细介绍了GIS国土工具在国土整治项目中的高效应用,涵盖地类分析、坐标转换、影像加载等核心功能。通过实战案例展示如何利用该工具快速处理shp与txt文件转换、智能比对三调二调数据,以及优化影像加载策略,显著提升项目效率。特别适合需要处理复杂国土数据的专业人员使用。

weixin_28732953的博客 334

应用程序服务器迁移:从JBoss EE5到Wildfly EE7

几周前,我发布了一个有关从Java EE 5迁移到7的博客 。这主要是关于如何使用新的Java EE 7改进Java EE 5代码。 现在,在本文中,我将对应用程序服务器端的迁移路径进行一些研究。 如果您使用的是Java EE 5,则很有可能正在使用以下服务器之一: JBoss 4倍或5倍 玻璃鱼 2x Weblogic 10倍 Websphere 7倍 还有许多...

最佳 Java 编程 376

CMap与L1000技术解析:基因表达数据在药物发现中的应用

本文深入解析了CMap(连接图)与L1000技术在药物发现中的核心应用。CMap通过构建基因表达“关系网”,实现基于模式匹配的药物重定位;L1000技术则以低成本、高通量方式生成关键基因表达数据,支撑了LINCS超级数据库。文章以CLUE平台为例,手把手演示了如何利用疾病基因表达签名逆向筛选潜在治疗化合物,并拓展了其在解析药物机制、预测副作用等多场景下的价值。

weixin_29207533的博客 727

jboss4 迁移_应用程序服务器迁移:从JBoss EE5到Wildfly EE7

jboss4 迁移 几周前,我发布了一个有关从Java EE 5迁移到7的博客 。这主要是关于如何使用新的Java EE 7改进Java EE 5代码。 现在,在这篇文章中,我将对应用程序服务器端的迁移路径进行一些研究。 如果您使用的是Java EE 5,则很有可能正在使用以下服务器之一: JBoss 4倍或5倍 玻璃鱼 2x Weblogic 10倍 Websphere...

最佳 Java 编程 341

工业视觉实战:用摄像头+AI高精度测量钢板尺寸(附深度分析)

摘要: 钢铁制造业正加速采用基于摄像头与深度学习的视觉测量技术,以取代传统人工测量,实现钢板长、宽、高(厚)的非接触、高精度在线检测。核心方案包括单目视觉(低成本但受限于变形)、双目/多目立体视觉(可精确测量变形钢板)及3D激光扫描(微米级精度)。系统精度受硬件(相机分辨率、镜头)、算法(亚像素技术)及环境稳定性共同影响,综合精度可达±0.1mm。实战中需重点解决热膨胀(需红外测温实时补偿)和钢板变形(必须采用三维方案)两大挑战,并通过工程化设计(散热、防振)确保系统可靠运行。该技术需融合光学、机械与算法,

数字人生 390

YOLO11-Seg优化:注意力魔改 | 具有切片操作的SimAM注意力,魔改SimAM

问题点:SimAM计算整张特征图的像素差平均值时加权可能会忽略小目标的重要性,同时与整体平均值相比可能和背景信息相似,导致加权增强较弱;

会AI的学姐 457

jboss 4.5 迁移到 jboss 7 cookie 特殊字符 问题记录

一、背景:      公司最近将jboss的版本从4.5 升级到7,之后发现从cookie中,获取不到用户的信息了。经过debug发现,保存用户信息的cookie,在request.getCookie()之后就是被截断了。本来是 key=x_l=1&amp;x_locale=zh_CN&amp;no_popup_today=n&amp;user=xxx|xxx|xxx|xxx|xxx&am...

iteye_17060的博客 552

MIKE 21 教程 1.5 基于卫星影像绘制河道边界

上一节讲解了如何输入高程数据与绘制网格本节讲解如何根据卫星影像绘制河道边界。在实际项目中,经常遇到河道图纸缺少的情况,此时可以根据卫星影像进行勾勒绘制。常用的地理信息软件均可完成此功能,这里使用大家较为熟悉的ArcGis进行教学(本文默认大家有基础ArcGis操作知识,如有不懂可留言)。

Hello Word 3282

Jboss低版本项目热部署到Jboss7

低版本项目迁移到Jboss7     1.        Jboss7新特性 1.1 构建在Modular Service Container上,充分地利用了多核处理器的能力,并发、按需启动服务,启动速度更快、占用内存更小。 1.2 全面兼容Java EE6 1.3 支持JDK6/7 1.4 统一的配置和管理 1.5 兼容OSGI 4.2,支持OSGI和Java EE组件模型集成。

风云 2428

Python全栈入门到实战【基础篇 05】核心基础:Python的2种运行模式(交互式+命令行式)

Python代码运行模式详解:交互式与命令行式对比 摘要: Python提供两种核心运行模式:交互式(REPL)和命令行式(脚本式)。交互式模式适合快速测试语法,即时反馈结果,通过终端输入python启动,特点是无需保存、临时执行,适合验证小段代码逻辑。命令行式模式需将代码保存为.py文件后运行,适合开发完整程序,可重复执行和修改。两种模式各有优势:交互式便于学习调试,命令行式适合实际开发。掌握两种模式的使用场景和切换方法,是Python入门的关键技能,能显著提升学习效率。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4553

Wazuh部署记录

Wazuh是一个免费的开源安全平台,统一了XDR和SIEM功能。它可以保护内部部署、虚拟化、容器化和基于云的环境中的工作负载。Wazuh帮助组织和个人保护其数据资产免受安全威胁。它被全球数千个组织广泛使用,从小型企业到大型企业。443:仪表盘界面访问端口1515:探针连接服务器端口1514:探针回传信息端口以上3个端口必须打开防火墙。

墨痕诉清风的博客 1557

jboss7 java版本,jdk 1.7推荐使用什么社区版本的Jboss以及为什么

I need to migrate from Jboss 5.1.0 GA to any other that supports jdk 1.7.I'm currently using jboss 5.1 with seam 2, jdk 1.6 and sqlserver 2008 r2.What community version of Jboss is recommended for jdk...

weixin_26907201的博客 264

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jboss7静态变量由于不同的类加载器在两个模块中不相同

ecp.ear引用core.ear中的core.jar项目 MANIFEST.MF如下配置时,会发现两个模块调用core.jar中的类使用不同的类加载器 Manifest-Version: 1.0 Dependencies: deployment.core.ear.core-ejb.jar 必须要在显式配置依赖,并且依赖的是整个core.ear才会使用同一个加载器 如下:

dac55300424的专栏 2440

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

从Jboss EAP 6.4迁移到EAP 7.1

POM 升级JavaEE <dependency> <groupId>org.jboss.bom</groupId> <artifactId>jboss-eap-javaee7</artifactId> <version>7.1.1.GA</version> <type>pom</type&gt...

weixin_33937778的博客 530

应用部署到JBOSS上遇到的问题

原来应用在WAS7.0下,移植到JBOSS eap5.1.2下后,遇到了一些问题,特此记录: 1、数据源配置 在was中,datasource中获取数据源名称时,直接写was中配置的数据源名称即可。而在jboss下,jndi的名称需要以java:+数据源名称开始。was下可以通过console去配置数据源,jboss中,将数据库驱动复制到%JBOSS_HOME%/server/def...

weixin_30297281的博客 124

(转)Tomcat迁移JBoss杂症—不识别及不能解析web.xml

本文介绍了在将tomcat下的web工程迁移到jboss下面时遇到的问题 背景: Tomcat 7.0 JBoss AS 4.2.2 IED: Eclipse Java EE IDE for Web Developers.Version: Luna Release (4.4.0) 问题一:不能添加项目到JBoss里 1.原因及解决办法: 如果在tomcat下面创建的web项目...

weixin_30912051的博客 188

java的populate_JAVA BeanUtils.populate错误当离开空日期输入

今天我已经将我的应用程序从JBOSS 4.2迁移到JBOSS 7.1。服务器成功启动,没有任何错误消息。但是当我尝试那里是“日期从”的投入,并提交任何形式的“日期”我得到这个错误:JAVA BeanUtils.populate错误当离开空日期输入javax.servlet.ServletException: BeanUtils.populateorg.apache.struts.util.Requ...

weixin_29791447的博客 356

Mobicents SIP Servlets 2.0.0.Final 发布

Mobicents SIP Servlets 2.0.0.Final 发布,该版本通过了 SIP Servlet 1.1 规范认证,支持 Tomcat 7 和 JBoss AS 7. 采用 LGPL 授权协议。 2.0 版本主要改进: HTML5 WebRTC ClientSIP Over WebSocketsFull TCK Compliance for the JBoss AS7 versio...

weixin_33670713的博客 208
上一篇: JBOSS AS 7设置虚拟目录位置
下一篇: JBoss BRMS - 安裝BRMS 到 EAP 6.1
mmoooodd
博客等级 码龄18年 35粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值