RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南ForUsewithRedHatJBossEnterpriseApplicationPlatform7.
0LastUpdated:2018-01-12RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南ForUsewithRedHatJBossEnterpriseApplicationPlatform7.
0法律通告法律通告Copyright2018RedHat,Inc.
ThetextofandillustrationsinthisdocumentarelicensedbyRedHatunderaCreativeCommonsAttribution–ShareAlike3.
0Unportedlicense("CC-BY-SA").
AnexplanationofCC-BY-SAisavailableathttp://creativecommons.
org/licenses/by-sa/3.
0/.
InaccordancewithCC-BY-SA,ifyoudistributethisdocumentoranadaptationofit,youmustprovidetheURLfortheoriginalversion.
RedHat,asthelicensorofthisdocument,waivestherighttoenforce,andagreesnottoassert,Section4dofCC-BY-SAtothefullestextentpermittedbyapplicablelaw.
RedHat,RedHatEnterpriseLinux,theShadowmanlogo,JBoss,OpenShift,Fedora,theInfinitylogo,andRHCEaretrademarksofRedHat,Inc.
,registeredintheUnitedStatesandothercountries.
LinuxistheregisteredtrademarkofLinusTorvaldsintheUnitedStatesandothercountries.
JavaisaregisteredtrademarkofOracleand/oritsaffiliates.
XFSisatrademarkofSiliconGraphicsInternationalCorp.
oritssubsidiariesintheUnitedStatesand/orothercountries.
MySQLisaregisteredtrademarkofMySQLABintheUnitedStates,theEuropeanUnionandothercountries.
Node.
jsisanofficialtrademarkofJoyent.
RedHatSoftwareCollectionsisnotformallyrelatedtoorendorsedbytheofficialJoyentNode.
jsopensourceorcommercialproject.
TheOpenStackWordMarkandOpenStacklogoareeitherregisteredtrademarks/servicemarksortrademarks/servicemarksoftheOpenStackFoundation,intheUnitedStatesandothercountriesandareusedwiththeOpenStackFoundation'spermission.
Wearenotaffiliatedwith,endorsedorsponsoredbytheOpenStackFoundation,ortheOpenStackcommunity.
Allothertrademarksarethepropertyoftheirrespectiveowners.
摘要摘要本指南提供了关于如何从以前的RedHatJBossEnterpriseApplicationPlatform迁移应用程序的信息.
目目录录第第1章章介介绍绍1.
1.
关于REDHATJBOSSEAP71.
2.
关于迁移指南1.
3.
关于迁移和升级1.
4.
关于本文档里EAP_HOME的使用第第2章章准准备备迁移迁移2.
1.
准备工作概述2.
2.
查看JAVAEE7的功能2.
3.
查看JBOSSEAP7里的新功能2.
4.
查看已舍弃和不被支持的功能的列表2.
5.
浏览《JBOSSEAP7起步指南》的内容2.
6.
迁移分析和规划2.
7.
备份重要数据并复查服务器状态.
2.
8.
迁移和RPM安装2.
9.
迁移作为服务运行的JBOSSEAP第第3章章可可协协助迁移的工具助迁移的工具3.
1.
使用WINDUP来分析要迁移的应用程序3.
2.
使用JBOSS服务器迁移工具来迁移服务器配置第第4章章服服务务器配置的修改器配置的修改4.
1.
服务器配置迁移选项JBossServerMigrationTool管理CLI的migrate操作4.
2.
管理CLI的迁移操作StarttheServerandtheManagementCLIMigratetheJacORB,Messaging,andWebSubsystems4.
3.
日志消息前缀的修改4.
4.
WEB服务器配置的修改4.
4.
1.
用Undertow替换Web子系统4.
4.
2.
迁移JBossWeb重写条件4.
4.
3.
MigrateJBossWebSystemProperties4.
4.
4.
MigrateJBossWebjboss-web.
xmlOverlay4.
4.
5.
迁移全局阀(GlobalValve)迁移JBossWeb阀JDBCAccessLogValve的手动迁移过程4.
5.
JGROUPS服务器配置的修改4.
5.
1.
JGroups默认使用私有网络接口4.
5.
2.
JGroups频道的修改4.
6.
INFINISPAN服务器配置的修改4.
6.
1.
Infinispan的默认缓存配置的修改4.
6.
2.
Infinispan缓存策略的修改4.
7.
EJBSERVERCONFIGURATIONCHANGESDuplicateServiceException4.
8.
消息服务器配置的修改4.
8.
1.
消息子系统的服务器配置修改管理模型消息子系统的迁移和向前兼容性ChangeinBehaviorofforward-when-no-consumersAttribute消息子系统的XML配置4.
8.
2.
迁移消息数据666678888991011111213131314141414141516191919202323242425262626262626262727272828292929目目录录14.
8.
2.
1.
用导出和导入迁移消息数据从之前版本导出消息数据导入XML格式的消息数据4.
8.
2.
2.
用JMS桥迁移消息数据配置JBossEAP6服务器配置JBossEAP7服务器迁移数据4.
8.
2.
3.
映射消息文件夹位置4.
8.
3.
迁移JMS目的地4.
8.
4.
迁移消息拦截器4.
8.
5.
替代NettyServlet配置4.
9.
JMXMANAGEMENTCHANGES4.
10.
ORB服务器配置的修改4.
11.
迁移THREADS子系统配置4.
12.
迁移REMOTING子系统配置4.
13.
WEBSOCKET服务器配置的修改4.
14.
单点登录服务器的修改4.
15.
数据源配置的修改4.
15.
1.
JDBC数据源驱动名称包含单个类的驱动包含多个类的驱动4.
16.
安全服务器配置的修改4.
17.
TRANSACTIONS子系统的修改RemovedTransactionsSubsystemAttributes已舍弃的Transactions子系统属性4.
18.
MOD_CLUSTER配置的修改第第5章章应应用程序迁移的修改用程序迁移的修改5.
1.
WEBSERVICE的应用程序修改5.
1.
1.
JAX-RPC支持的修改5.
1.
2.
ApacheCXFSpringWebServices的修改ApacheCXF拦截器ApacheCXF功能ApacheCXF的HTTP传输5.
1.
3.
WS-Security修改5.
1.
4.
JBoss模块结构的修改5.
1.
5.
BouncyCastle的要求和修改5.
1.
6.
ApacheCXF总线选择策略5.
1.
7.
WebServiceRef对JAX-WS2.
2的要求5.
1.
8.
忽略HttpsHostCN检查5.
1.
9.
服务器端的配置和类加载5.
1.
10.
舍弃JavaEndorsedStandardsOverrideMechanism5.
1.
11.
EAR归档里的描述符规格5.
2.
更新远程URL连接器和端口5.
3.
消息应用程序的修改5.
3.
1.
替换或更新JMS部署描述符5.
3.
2.
更新外部的JMS客户5.
3.
3.
替代HornetQAPI5.
4.
JAX-RS和RESTEASY应用程序的修改5.
4.
1.
RESTEasy已舍弃的类Interceptor和MessageBody类ClientAPIStringConverter29293031313134343435353537394040414141414142424242424444444445454646474747474747474848484849495050505253RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南25.
4.
2.
已删除或变成protected权限的RESTEasy类ResteasyProviderFactory的Add系列方法RESTEasy3里删除的其他类5.
4.
3.
其他RESTEasy修改SignedInput和SignedOuput安全过滤器客户端过滤器对异步HTTP的支持服务器端的缓存5.
4.
4.
对RESTEasySPI的修改SPI异常InjectorFactory和Registry5.
4.
5.
Jackson提供者的变动5.
4.
6.
SpringRESTEasy集成的修改5.
4.
7.
RESTEasyJettisonJSON提供者的修改5.
5.
CDI1.
2应用程序的修改Bean归档会话解析(ConversationResolution)的说明Observer解析5.
6.
迁移显性模块依赖关系复查依赖关系的可用性要求注解扫描的依赖关系5.
7.
HIBERNATE和JPA迁移的修改5.
7.
1.
HibernateORM3.
05.
7.
2.
HibernateORM4.
0-4.
35.
7.
3.
HibernateORM55.
7.
4.
MigratingtoHibernateORM5RemovedandDeprecatedClassesOtherChangestoClassesandPackagesTypeHandlingTransactionManagementOtherHibernateORM5Changes5.
8.
HIBERNATESEARCH的修改HibernateSearchMapping的修改内嵌关系的ID字段的索引数字和日期索引格式的修改其他的HibernateSearch修改HibernateSearch重命名和重打包的类Lucene-重命名和重打包的类HibernateSearch已舍弃的APIHibernateSearch已舍弃的接口HibernateSearch已舍弃的类HibernateSearch已舍弃的枚举HibernateSearch已舍弃的注解HibernateSearch已舍弃的方法HibernateSearch已舍弃的构造器影响高级集成器的修改5.
9.
迁移ENTITYBEAN至JPA5.
10.
JPA持久化属性的修改5.
11.
迁移EJB客户代码5.
11.
1.
更新默认的远程连接端口5.
11.
2.
更新默认的连接器5.
11.
3.
迁移远程命名客户代码5353535353545454545454545455555555565657575757575758585858585960606161616162636363636363646464656767676868目目录录35.
12.
迁移部署计划配置5.
13.
迁移自定义应用程序阀迁移部署里配置的阀迁移自定义验证器阀5.
14.
安全性应用程序的修改5.
14.
1.
迁移5.
14.
2.
PicketLink的修改5.
14.
3.
其他安全性应用程序的修改5.
15.
JBOSSLOGGING的修改5.
16.
JAVASERVERFACES(JSF)代码的修改取消对JSF1.
2的支持JSF2.
1和JSF2.
2间的兼容性问题5.
17.
模块类加载的修改5.
18.
应用程序群集的修改5.
18.
1.
新的群集功能概述5.
18.
2.
Web会话群集的修改5.
18.
3.
StatefulSessionEJB群集的修改5.
18.
4.
群集服务的修改5.
18.
5.
迁移群集HA单点登录第第6章章其他修改其他修改6.
1.
修改JBOSSEAPNATIVES和APACHEHTTP服务器的提供方式6.
2.
在AMAZONEC2上部署的修改6.
3.
CHANGESTOJBOSSEAPSCRIPTS6.
4.
REMOVALOFOSGISUPPORT第第7章章MIGRATINGFROMOLDERRELEASESOFJBOSSEAP7.
1.
MIGRATINGFROMJBOSSEAP5TOJBOSSEAP77.
2.
SUMMARYOFCHANGESMADETOEACHRELEASE7.
3.
REVIEWTHECONTENTINTHEMIGRATIONGUIDES7.
4.
JBOSSEAP5COMPONENTUPGRADEREFERENCE附附录录A.
参考参考资资料料A.
1.
JACORB子系统迁移操作警告A.
2.
MESSAGING子系统迁移操作警告替换已舍弃的broadcast-group或discovery-group属性A.
3.
WEB子系统迁移操作警告WebSubsystemMigrationOperationAttributeWarningsWebSSLConnectorAttributesWebStaticResourceAttributesWebSSOResourceAttributesWebAccessLogAttributesWebConnectorAttributesA.
4.
MIGRATEJBOSSWEBSYSTEMPROPERTIESREFERENCEA.
5.
版本间的兼容性和互用性使用IIOP的EJBRemoting使用JNDI的EJBRemoting使用@WebService的EJBRemoting消息独立客户MessagingMDBJMS桥6869696969697070707171717172727274757576767777777878787979868687899193949495959596104105105105105106106RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南4目目录录5第1章介绍1.
1.
关于REDHATJBOSSEAP7RedHatJBossEnterpriseApplicationPlatform7(JBossEAP7)是一个构建在开放标准上并和JavaEE7规格兼容的中间件平台.
它集成了WildFlyApplicationServer10和高可用性的群集、消息系统以及其他技术.
JBossEAP使用了模块化结构,允许在有需要时才启用服务,从而提高了启动速度.
管理控制台和管理命令行界面(Command-lineInterface,CLI)使您不需要再编辑XML配置文件并增添了使用脚本和自动化任务的能力.
JBossEAP提供了两种操作模式:独立服务器和受管域.
独立服务器操作模式代表JBossEAP作为单个服务器实例运行.
受管域模式则允许通过单个控制点管理多个JBossEAP实例.
此外,JBossEAP包含了API和开放框架以用于快速开发安全和可扩充的JavaEE应用程序.
1.
2.
关于迁移指南ThepurposeofthisguideistodocumentthechangesthatarerequiredtosuccessfullyrunanddeployRedHatJBossEnterpriseApplicationPlatform6applicationsonRedHatJBossEnterpriseApplicationPlatform7.
Itprovidesinformationaboutthenewfeaturesavailableinthisrelease,thedeprecatedandunsupportedfeatures,andanyapplicationandserverconfigurationupdatesthatmightberequiredtopreventchangesinapplicationbehavior.
Italsoprovidesinformationabouttoolsthatcanhelpwiththemigration,suchasWindup,whichsimplifiesmigrationofJavaapplications,andtheJBossServerMigrationTool,whichupdatestheserverconfiguration.
Oncetheapplicationissuccessfullydeployedandrunning,planscanbemadetoupgradeindividualcomponentstousethenewfunctionsandfeaturesofJBossEAP7.
IfyouplantomigrateyourJBossEAP5applicationsdirectlytoJBossEAP7,seeMigratingfromOlderReleasesofJBossEAP.
1.
3.
关于迁移和升级主要的升主要的升级级Amajorupgradeormigrationisrequiredwhenanapplicationismovedfromonemajorreleasetoanother,forexample,fromJBossEAP6toJBossEAP7.
Thisisthetypeofmigrationaddressedinthisguide.
IfanapplicationfollowstheJavaEEspecifications,doesnotaccessdeprecatedAPIs,anddoesnotcontainproprietarycode,itmightbepossibletoruntheapplicationinJBossEAP7withoutanyapplicationcodechanges.
However,serverconfigurationhaschangedinJBossEAP7andanyserverconfigurationsettingsrequiremigration.
次要的升次要的升级级JBossEAPperiodicallyprovidespointreleases,whichareminorupdatesthatincludebugfixes,securityfixes,andnewfeatures.
TheJBossEAPPatchingandUpgradingGuidedescribeshowtoupgradefromonepointreleasetoanother,forexamplefromJBossEAP7.
0toJBossEAP7.
1.
累累积补积补丁丁RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南6JBossEAPalsoperiodicallyprovidescumulativepatchesthatcontainbugandsecurityfixes.
Cumulativepatchesincrementthereleasebythelastdigit,forexamplefrom7.
0.
0to7.
0.
1.
PatchinstallationiscoveredindetailintheJBossEAPPatchingandUpgradingGuide.
1.
4.
关于本文档里EAP_HOME的使用在本文档里,我们使用变量EAP_HOME来表示JBossEAP的安装位置.
请用实际的安装位置替换这个变量.
如果您用ZIP方式安装JBossEAP,安装目录就是您解压ZIP归档文件的目录jboss-eap-7.
0.
如果您用RPM方式安装JBossEAP,安装目录是/opt/rh/eap7/root/usr/share/wildfly/.
如果您使用安装程序来安装JBossEAP,默认的EAP_HOME路径是${user.
home}/EAP-7.
0.
0.
对于RedHatEnterpriseLinux,Solaris和HP-UX:/home/USER_NAME/EAP-7.
0.
0/对于MicrosoftWindows:C:\Users\USER_NAME\EAP-7.
0.
0\如果您使用JBossDeveloperStudio安装程序来安装和配置JBossEAP服务器,默认的EAP_HOME路径是${user.
home}/jbdevstudio/runtimes/jboss-eap.
对于RedHatEnterpriseLinux:/home/USER_NAME/jbdevstudio/runtimes/jboss-eap/对于MicrosoftWindows:C:\Users\USER_NAME\jbdevstudio\runtimes\jboss-eap或C:\DocumentsandSettings\USER_NAME\jbdevstudio\runtimes\jboss-eap\注意注意EAP_HOME不是一个环境变量.
脚本里使用的环境变量是JBOSS_HOME.
第第1章章介介绍绍7第2章准备迁移2.
1.
准备工作概述InJBossEAP7,aneffortwasmadetoprovidebackwardcompatibilityforJBossEAP6applications.
However,ifyourapplicationusesfeaturesthatweredeprecatedorfunctionalitythatwasremovedfromJBossEAP7,youmightneedtomakechangestoyourapplicationcode.
Inaddition,anumberofthingshavechangedinthisreleasethatmightimpactdeploymentofJBossEAP7applications.
Itisrecommendedthatyoudosomeresearchandplanningbeforeyouattempttomigrateyourapplication.
熟悉JavaEE7的功能.
复查JBossEAP7的新功能.
复查已舍弃和不受支持的功能的列表.
ReviewthematerialintheJBossEAP7GettingStartedGuide.
查看有助于迁移任务的工具.
一旦您了解了这些功能的变化、开发内容及可以协助您迁移的工具,您就可以开始评估应用程序和服务器配置来确定在JBossEAP7里运行所需的修改.
2.
2.
查看JAVAEE7的功能JavaEE7包含了许多使得在私有和公共云上开发和运行功能丰富的应用程序更容易的改进.
它合并了新的功能及最新的标准,如HTML5、WebSocket、JSON、Batch和ConcurrencyUtilities.
更新还包含了JPA2.
1、JAX-RS2.
0、Servlet3.
1、ExpressionLanguage3.
0、JMS2.
0.
JSF2.
2、EJB3.
2、CDI1.
2和BeanValidation1.
1.
您可以在Oracle的网站找到关于JavaEE的更多信息,其中包括教程:JavaEEataGlance.
2.
3.
查看JBOSSEAP7里的新功能与之前的版本相比,JBossEAP7包含了显著的升级和改进.
JavaEE7JBossEAP7是一个已认证的JavaEE7Full和Web配置规格的实现.
它也包括对最新的CDI1.
2和WebSockets1.
1的支持.
UndertowUndertow是JBossEAP7里包含的新的轻量级的、高性能的Web服务器.
它是用Java编写的,专门为高吞吐量和扩充性而设计的.
它支持最新的Web技术,如新的HTTP/2标准.
ApacheActiveMQArtemisApacheActiveMQArtemis是JBossEAP7的新的内置消息供应商.
基于HornetQ代码的捐献,这个Apache子项目提供了基于非阻塞式架构的突出性能.
IronJacamar1.
2最新的IronJacamar提供了对JCA和数据源的稳定的、功能丰富的支持.
JBossWS5RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南8ThefifthgenerationofJBossWSisamajorleapforward,bringingnewfeaturesandperformanceimprovementstoJBossEAP7webservices.
RESTEasy3JBossEAP7包含了最新的RESTEasy.
通过提供大量的有用扩展,如JSONWebEncryption、Jackson、YAML、JSON-P和Jettison,它超出了标准的JavaEERESTAPI(JAX-RS2.
0).
OpenJDKORBJBossEAP7用OpenJDKORB的一个下游分支替换了JacORBIIOP,从而实现了与JVMORB和JavaEERI的更好的互用性.
功能丰富的群集功能丰富的群集JBossEAP7很大程度地重构了对群集的支持,它包含了应用程序可以访问的几个公用API.
端口的端口的减减少少利用HTTP升级,JBossEAP7对几乎所有的协议都使用两个端口的多路复用:管理端口(9990)和应用程序端口(8080):日志的增日志的增强强管理API现在支持列出和查看服务器上的可用日志文件,甚至定义默认模式格式器之外的自定义格式器.
部署的日志设置也大大地增强了.
Foracompletelistofnewfeatures,seeNewFeaturesandEnhancementsintheJBossEAP7ReleaseNotes.
2.
4.
查看已舍弃和不被支持的功能的列表Beforeyoumigrateyourapplication,beawarethatsomefeaturesthatwereavailableinpreviousreleasesofJBossEAPmightbedeprecatedornolongersupported.
由于维护成本高、社区不感兴趣以及更好的替代方案的出现,我们取消了对一些技术的支持.
下面是对不再支持的功能的概述.
EJBEntityBean我们不再支持EJBEntityBean.
如果您的应用程序使用了EJBEntityBean,您应该迁移至提供灵活的API及更好性能的JPA.
JAX-RPC因为JAX-WS提供了更正确和完整的解决方案,根据JAX-RPC编写的代码应该迁移至JAX-WS.
JSR-88JavaEE应用程序部署API规格(JSR-88)定义了启用多个提供者的工具在任何JavaEE平台产品上配置和部署应用程序的合约.
您必须使用另外一个JBossEAP支持的选项进行应用程序部署,如管理控制台、管理CLI、部署扫描器或Maven.
通用的通用的JMS资资源适配器源适配器JBossEAP7不再支持配置通用的JMS资源适配器来连接JMS供应商.
Foracomprehensivelistofdeprecatedandunsupportedfeatures,seeUnsupportedandDeprecatedFunctionalityintheJBossEAP7ReleaseNotes.
2.
5.
浏览《JBOSSEAP7起步指南》的内容BesuretoreviewtheJBossEAPGettingStartedGuide.
Itcontainsthefollowingimportantinformation:如何下载和安装JBossEAP7第第2章章准准备备迁移迁移9如何下载和安装RedHatJBossDeveloperStudio如何为您的开发环境配置Maven,管理项目依赖关系和配置项目使用JBossEAPBillofMaterial(BOM)购件.
如何下载和运行产品附带的Quickstart例程.
2.
6.
迁移分析和规划Eachapplicationandserverconfigurationisuniqueandyoumustthoroughlyunderstandthecomponentsandarchitectureoftheexistingapplicationandserverplatformbeforeyouattemptthemigration.
Yourmigrationplanshouldincludeadetailedroadmapfortestingandrollouttoproductionthattakesintoaccountthefollowinginformation.
确定确定负责负责迁移的人迁移的人员员确定利益关系人、项目经理、开发人员、管理员和其他负责迁移的人员.
复复查应查应用服用服务务器平台配置和硬件器平台配置和硬件检查现有的应用服务器和平台配置来确定JBossEAP7里的功能变动如何影响它们.
这种检查应该包含下列项目.
操作系统和版本应用程序使用的数据库Web服务器安全架构处理器的数量和类型内存数量物理磁盘空间的大小数据库或消息数据的迁移Othercomponentsthatmightbeimpactedbythemigration复复查查当前的当前的产产品品环环境境您应该计划为测试和模拟迁移过程创建和产品环境尽可能相同的环境.
Takeintoaccountanyclusteringconfigurations.
SeeUpgradingaClusterintheJBossEAPPatchingandUpgradingGuideformoreinformationabouthowtomigrateclusters.
如果您目前运行的是大型的受管域,请考虑渐进式迁移方法.
确定您是否需要迁移任何数据库或消息数据.
检查检查和了解和了解现现有的有的应应用程序用程序彻底检查现有的JBossEAP6应用程序.
充分熟悉它的架构、功能、特点和组件,其中包括:JVM版本与其他RedHat应用服务器中间件组件的集成RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南10与第三方私有软件的集成需要替换的已舍弃的功能应用程序配置,包括部署描述符文件、JNDI、持久化、JDBC配置和池、JMS主题和队列和日志.
确认在迁移至JBossEAP7的过程中需要修改的任何代码或配置的不兼容性.
创创建建详细详细的的测试计测试计划划这个计划应该包括回归测试和验收标准要求.
它也应该包含性能测试.
在产品环境试运行之前,设置和产品环境尽量相同的模拟环境以测试迁移过程.
请确保创建了备份和回滚计划!
查查看迁移看迁移过过程中的可用程中的可用资资源源评估开发团队的技能并规划培训或其他的咨询协助.
请意识到在迁移过程中进行模拟和测试可能要求额外的硬件和其他资源.
确定是否需要任何正式的培训.
如果是,将其添加至时间表里.
执执行行计计划划收集必要的资源并实施迁移计划.
重要重要在修改应用程序之前,请确保已进行了备份.
2.
7.
备份重要数据并复查服务器状态.
在您迁移应用程序前,您应该意识到下列一些潜在的问题.
Themigrationmightremovetemporaryfolders.
Anydeploymentsstoredinthedata/content/directorymustbebackeduppriortothemigrationandrestoredafteritcompletes.
Otherwise,theserverwillfailtostartduetothemissingcontent.
在迁移之前,处理任何打开的事务并删除data/tx-object-store/事务目录.
您必须检查data/timer-service-data里的持久性定时器数据来确定是否兼容.
在迁移之前,复查该目录里的deployment-*文件以确定哪些定时器仍在使用.
在您开始前请确保也备份当前服务器配置和应用程序.
2.
8.
迁移和RPM安装第第2章章准准备备迁移迁移11重要重要单个RedHatEnterpriseLinux服务器上不支持多个以RPM方式安装的JBossEAP实例.
因此,我们推荐您在迁移至JBossEAP7时将JBossEAP安装迁移到新的主机.
在将JBossEAPRPM安装从JBossEAP6迁移至JBossEAP7时,请确保JBossEAP7安装在没有现存JBossEAPRPM安装的主机上.
ToinstallJBossEAP7usingRPMs,seetheJBossEAPInstallationGuide.
ThemigrationadviceinthisguidealsoappliestomigratingRPMinstallationsofJBossEAP,butyoumightneedtoaltersomesteps(suchashowtostartJBossEAP)tosuitanRPMinstallationcomparedtoaZIPorinstallerinstallation.
2.
9.
迁移作为服务运行的JBOSSEAPIfyourunJBossEAP6asaservice,besuretoreviewConfiguringJBossEAPtoRunasaServiceintheJBossEAPInstallationGuideforupdatedconfigurationinstructionsforJBossEAP7.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南12第3章可协助迁移的工具3.
1.
使用WINDUP来分析要迁移的应用程序Windup是RedHatJBossMigrationToolkit的一部分,它是一个可扩展和定制的基于规则的工具,它有助于简化Java应用程序的迁移.
它分析要迁移的应用程序使用的API、技术和架构,并提供详细的迁移报告.
这些报告提供了下列信息.
所需的迁移修改的详细解释报告的修改是强制的还是可选的报告的修改是复杂的还是不重要的到需要迁移修改的代码的链接关于如何进行所需的修改的信息的提示和链接对发现的每个迁移问题的工作级别以及迁移应用程序所需的总共工作的估计在迁移至JBossEAP7之前,您可以用Windup来分析JBossEAP6应用程序的代码和架构.
Windup在XML描述符里设置从JBossEAP6迁移到JBossEAP7的规则以及当迁移至JBossEAP7时需要替换配置的专有应用程序代码和参数.
FormoreinformationabouthowtouseWinduptoanalyzeyourJBossEAP6applications,seetheWindupUserGuide.
3.
2.
使用JBOSS服务器迁移工具来迁移服务器配置目前正开发的JBossServerMigrationTool将是更新您的配置以包含JBossEAP7里新的功能和设置且保持现有配置的首选方法.
JBossServerMigrationTool读取现有的JBossEAP6服务器配置文件并添加配置至新的子系统、用新的功能更新现有的子系统配置并删除过时的子系统配置.
JBossServerMigrationTool的最新预发布版本可以在https://github.
com/wildfly/wildfly-server-migration/releases下载.
这个版本支持从JBossEAP6.
4独立服务器迁移至JBossEAP7.
0.
关于运行这个工具的常用信息,请参考《JBossServerMigrationTool用户指南》.
注意注意JBossServerMigrationTool的预发布版本仍不被支持.
第第3章章可可协协助迁移的工具助迁移的工具13第4章服务器配置的修改4.
1.
服务器配置迁移选项要将你的服务器配置从JBossEAP6到JBossEAP7,您可以使用JBossServerMigrationTool或用管理CLI的migrate操作进行手动迁移.
JBossServerMigrationTool目前正开发的JBossServerMigrationTool将是更新您的配置以包含JBossEAP7里新的功能和设置且保持现有配置的首选方法.
管理管理CLI的的migrate操作操作您可以使用管理CLI的migrate操作来更新JBossEAP6服务器配置文件里的jacorb、messaging和web子系统,允许它们运行在新版本上,但请注意其结果并非完整的JBossEAP7配置.
例如:这个操作不会更新原来的remote协议和端口设置为JBossEAP7现在使用的新的http-remoting协议和端口设置.
配置不包括新的JavaEAP子系统或功能,如群集单点登录部署、优雅关闭等.
配置不包括新的JavaEE7功能,如批处理.
Themigrateoperationdoesnotmigratetheejb3subsystemconfiguration.
ForinformationaboutpossibleEJBmigrationissues,seeEJBServerConfigurationChanges.
关于使用migrate操作来迁移服务器配置的更多信息,请参考管理CLI的migration操作.
4.
2.
管理CLI的迁移操作您可以使用管理CLI来更新您的JBossEAP6服务器配置文件以运行在JBossEAP7上.
管理CLI提供了migrate操作来自动更新之前版本的jacorb、messaging和web子系统到新配置里.
在进行迁移前,您也可以对jacorb、messaging和web子系统执行describe-migration操作来复核配置的改动.
目前没有cmp、jaxr或threads的替代选项,您必须从服务器配置里删除它们.
重要重要关于migrate操作的限制,请参考服务器配置迁移选项.
目前正开发的JBossServerMigrationTool将是更新您的配置以包含JBossEAP7里新的功能和设置且保持现有配置的首选方法.
表表4.
1.
子系子系统统迁移和管理迁移和管理CLI操作操作JBossEAP6子系子系统统JBossEAP7子系子系统统管理管理CLI操作操作cmpnoreplacementremovejacorbiiop-openjdkmigratejaxrnoreplacementremovemessagingmessaging-activemqmigrateRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南14threadsnoreplacementremovewebundertowmigrateJBossEAP6子系子系统统JBossEAP7子系子系统统管理管理CLI操作操作StarttheServerandtheManagementCLI按照下列步骤更新您的JBossEAP6服务器配置使其运行在JBossEAP7里.
1.
在开始之前,请参考备份重要数据并复查服务器状态.
它包含关于确保服务器处于良好状态且已备份合适的文件的重要信息.
2.
用JBossEAP6服务器配置启动JBossEAP7服务器.
a.
备份JBossEAP7的服务器配置文件.
b.
将配置文件从之前版本里复制到JBossEAP7目录里.
$cpEAP6_HOME/standalone/configuration/standalone-full.
xmlEAP7_HOME/standalone/configurationc.
进入JBossEAP7的安装目录并用--admin-only参数启动服务器.
$bin/standalone.
sh-cstandalone-full.
xml--admin-only第第4章章服服务务器配置的修改器配置的修改15注意注意在您启动服务器时,您将在服务器日志里看到下列org.
jboss.
as.
controller.
management-operation错误.
这是预料中的错误,表示旧的子系统配置必须删除并迁移至JBossEAP7.
WFLYCTL0402:Subsystems[cmp]providedbylegacyextension'org.
jboss.
as.
cmp'arenotsupportedonserversrunningthisversion.
Boththesubsystemandtheextensionmustberemovedormigratedbeforetheserverwillfunction.
WFLYCTL0402:Subsystems[jacorb]providedbylegacyextension'org.
jboss.
as.
jacorb'arenotsupportedonserversrunningthisversion.
Boththesubsystemandtheextensionmustberemovedormigratedbeforetheserverwillfunction.
WFLYCTL0402:Subsystems[jaxr]providedbylegacyextension'org.
jboss.
as.
jaxr'arenotsupportedonserversrunningthisversion.
Boththesubsystemandtheextensionmustberemovedormigratedbeforetheserverwillfunction.
WFLYCTL0402:Subsystems[messaging]providedbylegacyextension'org.
jboss.
as.
messaging'arenotsupportedonserversrunningthisversion.
Boththesubsystemandtheextensionmustberemovedormigratedbeforetheserverwillfunction.
WFLYCTL0402:Subsystems[threads]providedbylegacyextension'org.
jboss.
as.
threads'arenotsupportedonserversrunningthisversion.
Boththesubsystemandtheextensionmustberemovedormigratedbeforetheserverwillfunction.
WFLYCTL0402:Subsystems[web]providedbylegacyextension'org.
jboss.
as.
web'arenotsupportedonserversrunningthisversion.
Boththesubsystemandtheextensionmustberemovedormigratedbeforetheserverwillfunction.
3.
打开新的终端窗口,进入JBossEAP7安装目录,然后用--controller=remote://localhost:9999参数启动管理CLI.
$bin/jboss-cli.
sh--connect--controller=remote://localhost:9999MigratetheJacORB,Messaging,andWebSubsystems1.
要在执行迁移前复核对子系统做的配置修改,请执行describe-migration操作.
describe-migration操作使用下列语法.
/subsystem=SUBSYSTEM_NAME:describe-migration下面的例子描述了在迁移到JBossESP7时对JBossEAP6.
4standalone-full.
xml配置文件的修改.
我们在输出里删除了条目以增强可读性和节省空间.
describe-migration操作的示例操作的示例[standalone@localhost:9999/]/subsystem=messaging:describe-migrationRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南16{"outcome"=>"success","result"=>{"migration-warnings"=>[],"migration-operations"=>[{"operation"=>"add","address"=>[("extension"=>"org.
wildfly.
extension.
messaging-activemq")],"module"=>"org.
wildfly.
extension.
messaging-activemq"},{"operation"=>"add","address"=>[("subsystem"=>"messaging-activemq")]},Entriesremovedforreadability***-->{"operation"=>"remove","address"=>[("subsystem"=>"messaging")]},{"operation"=>"remove","address"=>[("extension"=>"org.
jboss.
as.
messaging")]}]}}2.
执行migrate操作以迁移子系统配置.
这个操作使用下列语法.
/subsystem=SUBSYSTEM_NAME:migrate注意注意messaging子系统及describe-migration和migrate操作允许您传入参数以配置旧客户的访问.
关于命令行语法的更多信息,请参考MessagingSubsystemMigrationandForwardCompatibility.
3.
查看命令的输出和结果.
请确保操作成功地完成且没有"migration-warning"信息.
这意味着子系统配置的迁移已完成.
成功的成功的migrate操作示例(没有警告信息)操作示例(没有警告信息)[standalone@localhost:9999/]/subsystem=messaging:migrate{"outcome"=>"success","result"=>{"migration-warnings"=>[]}}第第4章章服服务务器配置的修改器配置的修改17如果您在日志里看到"migration-warnings"信息,这表示服务器配置的迁移已成功完成,但它无法迁移所有的元素和属性.
您必须根据"migration-warnings"提供的建议运行其他管理CLI命令来修改这些配置.
下面是一个返回"migration-warnings"信息的migrate操作示例.
带带有警告信息的有警告信息的migrate操作示例操作示例[standalone@localhost:9999/]/subsystem=messaging:migrate{"outcome"=>"success","result"=>{"migration-warnings"=>["WFLYMSG0080:Couldnotmigrateattributegroup-addressfromresource[(\"subsystem\"=>\"messaging-activemq\"),(\"server\"=>\"default\"),(\"broadcast-group\"=>\"groupB\")].
Useinsteadthesocket-bindingattributetoconfigurethisbroadcast-group.
","WFLYMSG0080:Couldnotmigrateattributegroup-portfromresource[(\"subsystem\"=>\"messaging-activemq\"),(\"server\"=>\"default\"),(\"broadcast-group\"=>\"groupB\")].
Useinsteadthesocket-bindingattributetoconfigurethisbroadcast-group.
","WFLYMSG0080:Couldnotmigrateattributelocal-bind-addressfromresource[(\"subsystem\"=>\"messaging-activemq\"),(\"server\"=>\"default\"),(\"broadcast-group\"=>\"groupA\")].
Useinsteadthesocket-bindingattributetoconfigurethisbroadcast-group.
","WFLYMSG0080:Couldnotmigrateattributelocal-bind-portfromresource[(\"subsystem\"=>\"messaging-activemq\"),(\"server\"=>\"default\"),(\"broadcast-group\"=>\"groupA\")].
Useinsteadthesocket-bindingattributetoconfigurethisbroadcast-group.
","WFLYMSG0080:Couldnotmigrateattributegroup-addressfromresource[(\"subsystem\"=>\"messaging-activemq\"),(\"server\"=>\"default\"),(\"broadcast-group\"=>\"groupA\")].
Useinsteadthesocket-bindingattributetoconfigurethisbroadcast-group.
","WFLYMSG0080:Couldnotmigrateattributegroup-portfromresource[(\"subsystem\"=>\"messaging-activemq\"),(\"server\"=>\"default\"),(\"broadcast-group\"=>\"groupA\")].
Useinsteadthesocket-bindingattributetoconfigurethisbroadcast-group.
"]}}RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南18注意注意每个子系统的migrate和describe-migration警告列表位于本指南结尾的『参考资料』.
JacorbSubsystemMigrationOperationWarningsMessagingSubsystemMigrationOperationWarningsWebSubsystemMigrationOperationWarnings4.
查看服务器配置文件以验证扩展、子系统和命名空间都已更新且现有的子系统配置已迁移至JBossEAP7.
注意注意您必须通过下列命令为jacorb、messaging和web子系统重复这个过程.
/subsystem=jacorb:migrate/subsystem=messaging:migrate/subsystem=web:migrate5.
从服务器配置里删除cmp、jaxr和threads子系统和扩展.
在管理CLI提示下,执行下列命令删除过时的cmp、jaxr和threads子系统.
/subsystem=cmp:remove/extension=org.
jboss.
as.
cmp:remove/subsystem=jaxr:remove/extension=org.
jboss.
as.
jaxr:remove/subsystem=threads:remove/extension=org.
jboss.
as.
threads:remove重要重要您必须迁移messaging、jacorb和web子系统并在重启服务器进行正常操作前删除cmp、jaxr和threads扩展和子系统.
如果在完成这个过程前您需要重启服务器,请确保在服务器启动命令里包含--admin-only参数.
这允许您继续修改配置.
4.
3.
日志消息前缀的修改日志消息用报告该消息的子系统的项目代码作为前缀.
JBossEAP7已修改了所有日志消息的前缀.
ForacompletelistofthenewlogmessageprojectcodeprefixesusedinJBossEAP7,seeProjectCodesUsedinJBossEAPintheJBossEAPDevelopmentGuide.
4.
4.
WEB服务器配置的修改4.
4.
1.
用Undertow替换Web子系统在JBossEAP7里Undertow替换了JBossWeb.
这意味着旧的web子系统配置必须迁移到新的JBossEAP7的undertow子系统配置.
第第4章章服服务务器配置的修改器配置的修改19服务器配置文件里的urn:jboss:domain:web:2.
2子系统配置命名空间已被urn:jboss:domain:undertow:3.
1命名空间替代.
位于EAP_HOME/modules/system/layers/base/里的org.
jboss.
as.
web扩展模块,已被org.
wildfly.
extension.
undertow扩展模块所替代.
您可以使用管理CLI的migrate操作将服务器配置文件里的web子系统迁移到undertow.
然而,请注意这个操作不能迁移所有的JBossWeb子系统配置.
如果您看到"migration-warning"条目,您必须运行其他的管理CLI命令来迁移这些配置到Undertow.
关于管理CLI的migrate操作的更多信息,请参考ManagementCLIMigrationOperation.
下面是JBossEAP6里默认的web子系统配置示例.
下面是JBossEAP6里默认的undertow子系统配置示例.
4.
4.
2.
迁移JBossWeb重写条件RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南20管理CLI的migrate操作无法自动迁移重写条件,它们被报告为"migration-warnings",您必须手动迁移它们.
在JBossEAP7里,您可以用UndertowPredicatesAttributesandHandlers创建同等的配置.
下面是JBossEAP6里包含rewrite配置的默认web子系统配置示例.
按照ManagementCLIMigrationOperation说明启动服务器和管理CLI,然后用下列命令迁移web子系统配置文件.
/subsystem=web:migrate当您对上述配置运行migrate操作时会出现下面的"migration-warnings"信息.
/subsystem=web:migrate{"outcome"=>"success","result"=>{"migration-warnings"=>["WFLYWEB0002:Couldnotmigrateresource{\"pattern\\"substitution\\"flags\"=>\"F\",\"operation\"=>\"add\",\"address\"=>[(\"subsystem\"=>\"web\"),(\"virtual-server\"=>\"default-host\"),(\"rewrite\"=>\"test2\")]}","WFLYWEB0002:Couldnotmigrateresource{\"test\REQUEST_METHOD}\",\"pattern\"=>\"GET\",\"flags\"=>undefined,\"operation\"=>\"add\",\"address\"=>[(\"subsystem\"=>\"web\"),(\"virtual-server\"=>\"default-host\"),(\"rewrite\"=>\"test2\"),(\"condition\"=>\"get\")]}","WFLYWEB0002:Couldnotmigrateresource{第第4章章服服务务器配置的修改器配置的修改21\"test\REQUEST_URI}\",\"pattern\index.
html\",\"flags\"=>\"NC\",\"operation\"=>\"add\",\"address\"=>[(\"subsystem\"=>\"web\"),(\"virtual-server\"=>\"default-host\"),(\"rewrite\"=>\"test2\"),(\"condition\"=>\"andCond\")]}"]}}复查服务器配置文件,您会看到undertow子系统的下列配置.
注意注意重写(Rewrite)配置已被舍弃.
使用管理CLI创建过滤器来替换undertow子系统里的重写配置.
每个命令您都应该看到"{"outcome""success"}"信息.
#Createthefilters/subsystem=undertow/configuration=filter/expression-filter="test1":add(expression="path('(.
*)/toberewritten/rewrite('$1/rewritten/$2')")/subsystem=undertow/configuration=filter/expression-filter="test2":add(expression="method('GET')andpath('.
*index.
html')->response-code(403)")#Addthefilterstothedefaultserver/subsystem=undertow/server=default-server/host=default-host/filter-ref="test1":add/subsystem=undertow/server=default-server/host=default-host/filter-ref="test2":addRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南22复查已更新的服务器配置文件.
JBossWeb子系统现在已完全迁移且已配置了undertow子系统.
FormoreinformationabouthowtoconfigurefiltersandhandlersusingthemanagementCLI,seeConfiguringtheWebServerintheJBossEAP7ConfigurationGuide.
4.
4.
3.
MigrateJBossWebSystemPropertiesInthepreviousreleaseofJBossEAP,systempropertiescouldbeusedtomodifythedefaultJBossWebbehavior.
ForinformationabouthowtoconfigurethesamebehaviorinUndertow,seeJBossWebSystemPropertiesMigrationReference4.
4.
4.
MigrateJBossWebjboss-web.
xmlOverlayInJBossEAP6,JBossWebsupportedtheabilitytospecifyadditionalstaticfilesforawebapplicationusingtheoverlayelementinthejboss-web.
xmlfile.
Thisfeaturedidnotactuallyoverlayexistingfiles,butinsteadaddedstaticfilestoadeploymentoutsideoftheWARarchive.
Inthefollowingjboss-web.
xmlfileexample,/tmp/mycontents/test.
htmlwasreturnedbytheJBossEAP6serverwhenyouaccessedtheURLhttp://localhost:8080/example/test.
html.
Undertow,whichreplacesJBossWebinJBossEAP7,doesnotsupportthejboss-web.
xmlfileoverlayfeature.
response-code(403)"/>/example/tmp/mycontents/第第4章章服服务务器配置的修改器配置的修改234.
4.
5.
迁移全局阀(GlobalValve)以前的JBossEAP版本支持阀(Valve).
阀是在Servlet过滤器修改请求或执行其他处理前插入到应用程序的请求处理管道的自定义类.
全局阀(GlobalValve)插入到所有应用程序的请求处理管道且在服务器配置文件进行配置.
验证阀(Authenticatorvalve)验证请求的凭证.
自定义应用程序阀是通过继承org.
apache.
catalina.
valves.
ValveBase类并配置jboss-web.
xml描述符文件里的元素来创建的.
您必须手动迁移这些阀.
本节描述了如何迁移全局阀.
本指南的『MigrateCustomApplicationValves』章节涵盖了自定义和验证阀的迁移.
在JBossEAP7里替换了JBossWeb的Undertow不支持全局Valve.
然而,通过使用Undertow处理程序,您应该能够实现类似的功能.
Undertow包含了大量的提供常用功能的内嵌处理程序.
它也提供创建自定义处理程序的能力,它们可用来替代自定义Valve的功能.
如果您的应用程序使用了阀,在迁移至JBossEAP7时,您必须用合适的Undertow处理程序代码替代它们来实现相同功能.
Formoreinformationabouthowtoconfigurehandlers,seeConfiguringHandlersintheJBossEAP7ConfigurationGuide.
Formoreinformationabouthowtoconfigurefilters,seeConfiguringFiltersintheJBossEAP7ConfigurationGuide.
迁移迁移JBossWeb阀阀下表列出之前版本的JBossEAP和对应的Undertow内置处理程序提供的阀.
JBossWeb阀位于org.
apache.
catalina.
valves软件包里.
表表4.
2.
阀阀和和处处理程序的映射理程序的映射阀阀处处理程序理程序AccessLogValveio.
undertow.
server.
handlers.
accesslog.
AccessLogHandlerCrawlerSessionManagerValveio.
undertow.
servlet.
handlers.
CrawlerSessionManagerHandlerExtendedAccessLogValveio.
undertow.
server.
handlers.
accesslog.
AccessLogHandlerJDBCAccessLogValve相关说明请参考下面的『JDBCAccessLogValve手动迁移过程』.
RemoteAddrValveio.
undertow.
server.
handlers.
IPAddressAccessControlHandlerRemoteHostValveio.
undertow.
server.
handlers.
AccessControlListHandlerRemoteIpValveio.
undertow.
server.
handlers.
ProxyPeerAddressHandlerRequestDumperValveio.
undertow.
server.
handlers.
RequestDumpingHandlerRewriteValve关于手动迁移这些阀的说明,请参考『迁移JBossWeb重写条件』.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南24StuckThreadDetectionValveio.
undertow.
server.
handlers.
StuckThreadDetectionHandler阀阀处处理程序理程序您可以使用管理CLI的migrate操作自动迁移满足下列标准的全局阀.
它们必须是之前表里列出的不需要手动处理的阀.
它们必须在服务器配置文件的web子系统里进行定义.
关于管理CLI的migrate操作的更多信息,请参考ManagementCLIMigrationOperation.
JDBCAccessLogValve的手的手动动迁移迁移过过程程org.
apache.
catalina.
valves.
JDBCAccessLogValve阀是规则的一个例外,它不能自动迁移到io.
undertow.
server.
handlers.
JDBCLogHandler.
请遵循下面的步骤来迁移示例阀.
1.
创建一个用于存储日志条目的数据库的驱动模块.
2.
配置这个数据库的数据源并添加驱动到datasources子系统里的可用驱动列表.
3.
用下列表达式配置undertow子系统里的expression-filter:jdbc-access-log(datasource=DATASOURCE_JNDI_NAME).
jdbc:mysql://localhost:3306/wildflyzeroDateTimeBehavior=convertToNullmysqlrootPassword1!
.
.
.
com.
mysql.
jdbc.
Driver.
.
.
第第4章章服服务务器配置的修改器配置的修改254.
5.
JGROUPS服务器配置的修改4.
5.
1.
JGroups默认使用私有网络接口在JBossEAP6默认配置里,JGroups使用了服务器配置文件的部分定义的public接口.
因为使用专有的网络接口是我们的推荐做法,在默认情况下,JGroups使用JBossEAP7里服务器配置文件的部分定义的新的private接口.
4.
5.
2.
JGroups频道的修改JGroups以JGroups频道的形式提供对HA服务的组通讯支持.
JBossEAP7在服务器配置文件的jgroups子系统里引入了元素.
您可以用管理CLI添加、删除或修改JGroups频道的配置.
FormoreinformationabouthowtoconfigureJGroups,seeClusterCommunicationwithJGroupsintheJBossEAPConfigurationGuide.
4.
6.
INFINISPAN服务器配置的修改4.
6.
1.
Infinispan的默认缓存配置的修改InJBossEAP6,thedefaultclusteredcachesforwebsessionreplicationandEJBreplicationwerereplicatedASYNCcaches.
ThishaschangedinJBossEAP7.
ThedefaultclusteredcachesarenowdistributedASYNCcaches.
Thereplicatedcachesarenolongerevenconfiguredbydefault.
SeeConfiguretheCacheModeintheJBossEAPConfigurationGuideforinformationabouthowtoaddareplicatedcacheandmakeitthedefault.
这只适用于新的JBossEAP7默认配置.
如果您从JBossEAP6迁移配置,那infinispan子系统的配置将被保留.
4.
6.
2.
Infinispan缓存策略的修改JBossEAP7已修改了ASYNC缓存策略的行为.
在JBossEAP6里,ASYNC缓存的读操作是与锁无关的.
虽然它们永不会阻塞,但很容易导致过时数据的脏读(DirtyRead),例如发生失效切换的时候.
这是因为它会允许相同用户之后的请求在之前请求还未完成前开始.
在使用分布式模式时,这种随意性是不能接受的,群集拓扑结构的修改可能影响到会话关联性且容易导致数据过时.
在JBossEAP7里,ASYNC缓存读操作需要锁.
既然它们现在会阻塞相同用户的新请求直至之前的复制完成,这可以防止脏读(DirtyRead).
4.
7.
EJBSERVERCONFIGURATIONCHANGES.
.
.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南26IfyouusethemanagementCLImigrateoperationtoupgradeyourexistingconfiguration,youmightseeexceptionsintheserverlogwhenyoudeployyourEJBapplications.
重要重要IfyouusetheJBossServerMigrationTooltoupdateyourserverconfiguration,theejb3subsystemshouldbeconfiguredcorrectlyandyoushouldnotseeanyissueswhenyoudeployyourEJBapplications.
DuplicateServiceExceptionThefollowingDuplicateServiceExceptioniscausedbycachingchangesinJBossEAP7.
DuplicateServiceExceptioninServerLogERROR[org.
jboss.
msc.
service.
fail](MSCservicethread1-3)MSC000001:Failedtostartservicejboss.
deployment.
unit.
"mdb-1.
0-SNAPSHOT.
jar".
cache-dependencies-installer:org.
jboss.
msc.
service.
StartExceptioninservicejboss.
deployment.
unit.
"mdb-1.
0-SNAPSHOT.
jar".
cache-dependencies-installer:Failedtostartservice.
.
.
Causedby:org.
jboss.
msc.
service.
DuplicateServiceException:Servicejboss.
infinispan.
ejb.
"mdb-1.
0-SNAPSHOT.
jar".
configisalreadyregisteredYoumustreconfigurethecachetoresolvethiserror.
1.
FollowtheinstructionstoStarttheServerandtheManagementCLI.
2.
Issuethefollowingcommandstoreconfigurecachingintheejb3subsystem.
/subsystem=ejb3/file-passivation-store=file:remove/subsystem=ejb3/cluster-passivation-store=infinispan:remove/subsystem=ejb3/passivation-store=infinispan:add(cache-container=ejb,max-size=10000)/subsystem=ejb3/cache=passivating:remove/subsystem=ejb3/cache=clustered:remove/subsystem=ejb3/cache=distributable:add(passivation-store=infinispan,aliases=[passivating,clustered])4.
8.
消息服务器配置的修改在JBossEAP7里,ActiveMQArtemis作为JMS支持提供者替代了HornetQ.
本节描述了如何迁移配置和相关的消息数据.
4.
8.
1.
消息子系统的服务器配置修改位于EAP_HOME/modules/system/layers/base/的org.
jboss.
as.
messaging模块扩展,已被EAP_HOME/modules/system/layers/base/扩展模块替代.
urn:jboss:domain:messaging:3.
0子系统配置命名空间已被urn:jboss:domain:messaging-activemq:1.
0命名空间替代.
第第4章章服服务务器配置的修改器配置的修改27管理模型管理模型多数情况下,我们会尽可能地将元素和属性名称和之前版本保持一致.
下表列出了其中一些修改.
表表4.
3.
映射消息属性映射消息属性HornetQNameActiveMQNamehornetq-serverserverhornetq-serverTypeserverTypeconnectorsconnectordiscovery-group-namediscovery-group新的messaging-activemq子系统上调用的管理操作已从/subsystem=messaging/hornetq-server=改为/subsystem=messaging-activemq/server=.
您可以调用migrate操作迁移现有的JBossEAP6messaging子系统配置至JBossEAP7服务器上的messaging-activemq子系统.
/subsystem=messaging:migrateBeforeyouexecutethemigrateoperation,youcaninvokethedescribe-migrationoperationtoreviewthelistofmanagementoperationsthatwillbeperformedtomigratefromtheexistingJBossEAP6messagingsubsystemconfigurationtothemessaging-activemqsubsystemontheJBossEAP7server.
/subsystem=messaging:describe-migration对于无法自动迁移的资源或属性,migrate和describe-migration也会显示一个migration-warnings列表.
消息子系消息子系统统的迁移和向前兼容性的迁移和向前兼容性用于messaging子系统的describe-migration和migrate操作提供了额外的配置参数.
如果您想配置消息系统以允许旧的JBossEAP6客户链接JBossEAP7服务器,您可以像下面这样添加布尔型add-legacy-entries参数至describe-migration或migrate操作.
/subsystem=messaging:describe-migration(add-legacy-entries=true)/subsystem=messaging:migrate(add-legacy-entries=true)如果布尔型参数add-legacy-entries被设置为true,messaging-activemq子系统将创建legacy-connection-factory资源并添加legacy-entries至jms-queue和jms-topic资源.
如果布尔型参数add-legacy-entries被设置为false,messaging-activemq子系统里不会创建旧的资源,且旧的JMS客户不能与JBossEAP7服务器通讯.
这是默认值.
FormoreinformationaboutforwardandbackwardcompatibilityseetheBackwardandForwardCompatibilityinConfiguringMessagingforJBossEAP.
关于管理CLImigrate和describe-migration操作的更多信息,请参考ManagementCLIMigrationOperation.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南28ChangeinBehaviorofforward-when-no-consumersAttributeThebehavioroftheforward-when-no-consumersattributehaschangedinJBossEAP7.
InJBossEAP6,whenforward-when-no-consumerswassettofalseandtherewerenoconsumersinacluster,messageswereredistributedtoallnodesinacluster.
ThisbehaviorhaschangedinJBossEAP7.
Whenforward-when-no-consumersissettofalseandtherearenoconsumersinacluster,messagesarenotredistributed.
Instead,theyarekeptontheoriginalnodetowhichtheyweresent.
消息子系消息子系统统的的XML配置配置XML配置已根据新的messaging-activemq进行了极大的修改以提供和其他JBossEAP子系统更一致的XML模式.
ItisstronglyadvisedthatyoudonotattempttomodifytheJBossEAPmessagingsubsystemXMLconfigurationtoconformtothenewmessaging-activemqsubsystem.
Instead,invokethelegacysubsystemmigrateoperation.
ThisoperationwillwritetheXMLconfigurationofthenewmessaging-activemqsubsystemasapartofitsexecution.
4.
8.
2.
迁移消息数据JBossEAP7里由于JMS支持供应商从HornetQ变成了ActiveMQArtemis,消息数据的格式和位置都发生了变化.
您可以使用下列方式之一来迁移数据:你可以用管理CLIimport-journal操作从之前的版本导出HornetQ消息数据并进行导入.
详情请参考通过导出和导入迁移消息数据.
您可以配置JMS桥从之前的版本迁移数据.
用JMS桥迁移消息数据描述了这个过程.
关于不同版本间消息数据文件夹名称的改动的细节,请参考映射消息文件夹名称.
4.
8.
2.
1.
用用导导出和出和导导入迁移消息数据入迁移消息数据通过这个方法,您可以用HornetQexporter工具从之前的版本导出数据.
然后您可以用import-journal操作来导入XML格式的输出文件.
警告警告这个方法目前还有一个问题.
要查看这个问题的最新情况,请参考JBEAP-4407-从导入的日志读取大型消息时消费者会崩溃并抛出异常IndexOutOfBoundsException从之前版本从之前版本导导出消息数据出消息数据重要重要在您导出消息数据前必须先停止JBossEAP6服务器.
第第4章章服服务务器配置的修改器配置的修改29HornetQ的exporter工具从JBossEAP6生成和导出消息数据到一个XML格式的文件.
这个命令要求您指定附带JBossEAP6的HornetQJAR的路径,并将路径作为参数传入之前版本的messagingbindings/、messagingjournal/、messagingpaging/和messaginglargemessages/文件夹,然后指定写入导出的XML数据的输出文件.
下面是HornetQexporter工具要求的语法.
创建自定义模块来确保HornetQJAR的正确版本,包括打补丁或升级时安装的任何JAR文件,被加载并对exporter工具可用.
用您喜欢的编辑器在EAP6_HOME/modules/org/hornetq/exporter/main/目录里创建一个新的module.
xml文件并复制下列内容:注意注意这个自定义模块在modules/而不是modules/system/layers/base/目录里创建.
按照下列步骤来导出数据.
1.
停止JBossEAP6服务器.
2.
按上述步骤创建自定义模块.
3.
运行下列命令来导出数据.
$java-jarjboss-modules.
jar-mpmodules/org.
hornetq.
exporterstandalone/data/messagingbindings/standalone/data/messagingjournal/standalone/data/messagingpagingstandalone/data/messaginglargemessages/>OUTPUT_DIRECTORY/OldMessagingData.
xml4.
确保执行完命令后在日志里没有错误或警告信息.
5.
使用您的操作系统里可用的工具来检验生成的输出文件里的XML.
导导入入XML格式的消息数据格式的消息数据然后您可以用import-journal操作来导入XML格式的输出文件.
/subsystem=messaging-activemq/server=default:import-java-jar-mpMODULE_PATHorg.
hornetq.
exporterMESSAGING_BINDINGS_DIRECTORYMESSAGING_JOURNAL_DIRECTORYMESSAGING_PAGING_DIRECTORYMESSAGING_LARGE_MESSAGES_DIRECTORY>OUTPUT_DATA.
xmlRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南30journal(file=OUTPUT_DIRECTORY/OldMessagingData.
xml)4.
8.
2.
2.
用用JMS桥桥迁移消息数据迁移消息数据通过这个方法,您可以配置和部署JMS桥将消息从JBossEAP6HornetQ队列迁移到JBossEAP7ActiveMQArtemis队列.
JMS桥消费源JMS队列或主题里的消息并发送到目标JMS队列或主题(通常位于不同的服务器上).
它可以用于桥接任何JMS服务器间的消息,只要这些消息是兼容JMS1.
1的.
源和目的JMS资源通过JNDI查找,用于JNDI查找的客户类必须捆绑在模块里.
然后在JMS桥配置里声明模块名.
本节描述了如何配置服务器和部署JMS桥来将消息数据从JBossEAP6迁移到JBossEAP7.
配置配置JBossEAP6服服务务器器1.
停止JBossEAP6服务器.
2.
备份HornetQ日志和配置文件在默认情况下,HornetQ日志位于EAP6_HOME/standalone/data/目录里.
关于不同版本的默认消息文件夹,请参考映射消息文件夹名称.
3.
确保在JBossEAP6服务器上定义了包含JMS消息的InQueueJMS队列.
4.
确保messaging子系统配置包含用于RemoteConnectionFactory的条目,类似于:如果它没有包含这个条目,请用下列管理CLI命令创建:/subsystem=messaging/hornetq-server=default/connection-factory=RemoteConnectionFactory:add(factory-type=XA_GENERIC,connector=[netty],entries=[java:jboss/exported/jms/RemoteConnectionFactory],ha=true,block-on-acknowledge=true,retry-interval=1000,retry-interval-multiplier=1.
0,reconnect-attempts=-1)配置配置JBossEAP7服服务务器器1.
在以前的版本里,JMS桥配置需要org.
hornetq模块来连接HornetQ服务器.
JBossEAP7里这个模块和直接依赖关系已不再出现,所以您必须从之前的版本复制下列模块.
复制org.
hornetq模块至JBossEAP7EAP_HOME/modules/org/目录.
Ifyoudidnotapplypatchestothismodule,copythisfolderfromtheJBossEAP6.
4server:EAP6_HOME/modules/system/layers/base/org/hornetq/.
.
.
第第4章章服服务务器配置的修改器配置的修改31Ifyoudidapplypatchestothismodule,copythisfolderfromtheJBossEAP6.
4server:EAP6_HOME/modules/system/layers/base/.
overlays/layer-base-jboss-eap-6.
4.
x.
CP/org/hornetq/RemovethefortheHornetQlibpathfromtheJBossEAP7EAP_HOME/modules/org/hornetq/main/module.
xmlfile.
IfyoudidnotapplypatchestotheJBossEAP6.
4org.
hornetqmodule,removethefollowinglinefromthefile:IfyoudidapplypatchestotheJBossEAP6.
4org.
hornetqmodule,removethefollowinglinesfromthefile:警告警告FailuretoremovetheHornetQlibpathresource-rootwillcausethebridgetofailwiththefollowingerrorinthelogfile.
2016-07-1509:32:25,660ERROR[org.
jboss.
as.
controller.
management-operation](management-handler-thread-2)WFLYCTL0013:Operation("add")failed-address:([("subsystem"=>"messaging-activemq"),("jms-bridge"=>"myBridge")])-failuredescription:"WFLYMSGAMQ0086:Unabletoloadmoduleorg.
hornetq"Copytheorg.
jboss.
nettymoduleintotheJBossEAP7EAP_HOME/modules/org/jboss/directory.
Ifyoudidnotapplypatchestothismodule,copythisfolderfromtheJBossEAP6.
4server:EAP6_HOME/modules/system/layers/base/org/jboss/netty/Ifyoudidapplypatchestothismodule,copythisfolderfromtheJBossEAP6.
4server:EAP6_HOME/modules/system/layers/base/.
overlays/layer-base-jboss-eap-6.
4.
x.
CP/org/jboss/netty2.
创建JMS队列以包含从JBossEAP6服务器接收的消息.
下面是创建MigratedMessagesQueueJMS队列以接收消息的管理CLI命令的示例.
jms-queueadd--queue-address=MigratedMessagesQueue--entries=[jms/queue/MigratedMessagesQueuejava:jboss/exported/jms/queue/MigratedMessagesQueue]RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南32这会为JBossEAP7服务器的messaging-activemq子系统的默认服务器创建下列jms-queue配置.
3.
确保messaging-activemq子系统的default服务器包含用于InVmConnectionFactoryconnection-factory的配置,类似于:如果它没有包含这个条目,请用下列管理CLI命令创建:/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:add(factory-type=XA_GENERIC,connectors=[in-vm],entries=[java:/ConnectionFactory])4.
创建和部署从JBossEAP6服务器上配置的InQueueJMS队列读取消息的JMS桥并将其转换为JBossEAP7上的MigratedMessagesQueue.
/subsystem=messaging-activemq/jms-bridge=myBridge:add(add-messageID-in-header=true,max-batch-time=100,max-batch-size=10,max-retries=-1,failure-retry-interval=1000,quality-of-service=AT_MOST_ONCE,module=org.
hornetq,source-destination=jms/queue/InQueue,source-connection-factory=jms/RemoteConnectionFactory,source-context=[("java.
naming.
factory.
initial"=>"org.
jboss.
naming.
remote.
client.
InitialContextFactory"),("java.
naming.
provider.
url"=>"remote://127.
0.
0.
1:4447")],target-destination=jms/queue/MigratedMessagesQueue,target-connection-factory=java:/ConnectionFactory)这会在JBossEAP7服务器上的messaging-activemq子系统里创建下列jms-bridge配置.
第第4章章服服务务器配置的修改器配置的修改335.
如果为JBossEAP6配置了安全性,你也必须配置JMS桥配置元素,使其包含指定正确用户名和密码的source-context,从而在创建连接时用于JNDI查找.
迁移数据迁移数据1.
检验您为下列配置提供的信息是否正确.
任何的队列和主题名称用于JNDI查找的java.
naming.
provider.
url2.
确保您已部署了目标JMS目的地至JBossEAP7服务器.
3.
启动JBossEAP6及JBossEAP7服务器.
4.
8.
2.
3.
映射消息文件映射消息文件夹夹位置位置下表展示了之前版本使用的消息目录名和本版本里对应的名称.
这些目录是相对于jboss.
server.
data.
dir的,如果没有指定,它的默认值是EAP_HOME/standalone/data/.
JBossEAP6的目的目录录名称名称JBossEAP7的目的目录录名称名称messagingbindings/activemq/bindings/messagingjournal/activemq/journal/messaginglargemessages/activemq/largemessages/messagingpaging/activemq/paging/注意注意Themessaginglargemessages/andmessagingpaging/directoriesmightnotbepresentiftherearenolargemessagesorifpagingisdisabled.
4.
8.
3.
迁移JMS目的地在以前的JBossEAP版本里,JMS目的地队列是在messaging子系统的元素下的里配置的.
.
.
.
.
.
.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南34在JBossEAP7里,JMS目的地队列是在messaging-activemq子系统的默认元素里配置的.
4.
8.
4.
迁移消息拦截器JBossEAP7里消息拦截器已发生了重大改变,JMS消息提供者由HornetQ替换为ActiveMQArtemis.
之前版本里的HornetQ的messaging子系统要求您将HornetQ拦截器添加至JAR并修改module.
xml文件来安装HornetQ拦截器.
Themessaging-activemqsubsystemincludedinJBossEAP7doesnotrequiremodificationofamodule.
xmlfile.
Userinterceptorclasses,whichnowimplementtheApacheActiveMQArtemisInterceptorinterface,cannowbeloadedfromanyservermodule.
Youspecifythemodulefromwhichtheinterceptorshouldbeloadedinthemessaging-activemqsubsystemoftheserverconfigurationfile.
拦拦截器配置示例截器配置示例4.
8.
5.
替代NettyServlet配置在JBossEAP6里,你可以配置一个Servlet引擎与NettyServlet传输一起使用.
因为在JBossEAP7里内置的消息供应商由ActiveMQArtemis替代了HornetQ,这样的配置不再可用.
您必须替换Servlet配置以使用新的内置消息HTTP连接器和HTTP接收器.
4.
9.
JMXMANAGEMENTCHANGESTheHornetQcomponentinJBossEAP6provideditsownJMXmanagement;however,itwasnotrecommendedandisnowdeprecatedandnolongersupported.
IfyoureliedonthisfeatureinJBossEAP6,youmustmigrateyourmanagementtoolingtouseeithertheJBossEAPmanagementCLIorthe.
.
.
.
.
.
.
.
.
第第4章章服服务务器配置的修改器配置的修改35JMXmanagementprovidedwithJBossEAP7.
Youmustalsoupgradeyourclientlibrariestousethejboss-client.
jarthatshipswithJBossEAP7.
ThefollowingisanexampleofHornetQJMXmanagementcodethatwasusedinJBossEAP6.
ThefollowingisanexampleoftheequivalentcodeneededforActiveMQArtemisinJBossEAP7.
JMXConnectorconnector=null;try{HashMapenvironment=newHashMap();String[]credentials=newString[]{"admin","Password123!
"};environment.
put(JMXConnector.
CREDENTIALS,credentials);//HornetQusedtheprotocol"remoting-jmx"andport"9999"JMXServiceURLbeanServerUrl=newJMXServiceURL("service:jmx:remoting-jmx://127.
0.
0.
1:9999");connector=JMXConnectorFactory.
connect(beanServerUrl,environment);MBeanServerConnectionmbeanServer=connector.
getMBeanServerConnection();//TheJMXobjectnamepointedtotheHornetQJMXmanagementObjectNameobjectName=newObjectName("org.
hornetq:type=Server,module=JMS");//Theinvokedmethodnamewas"listConnectionIDs"String[]connections=(String[])mbeanServer.
invoke(objectName,"listConnectionIDs",newObject[]{},newString[]{});for(Stringconnection:connections){System.
out.
println(connection);}}finally{if(connector!
=null){connector.
close();}}JMXConnectorconnector=null;try{HashMapenvironment=newHashMap();String[]credentials=newString[]{"admin","Password123!
"};environment.
put(JMXConnector.
CREDENTIALS,credentials);//ActiveMQArtemisusestheprotocol"remote+http"andport"9990"JMXServiceURLbeanServerUrl=newJMXServiceURL("service:jmx:remote+http://127.
0.
0.
1:9990");connector=JMXConnectorFactory.
connect(beanServerUrl,environment);MBeanServerConnectionmbeanServer=connector.
getMBeanServerConnection();//TheJMXobjectnamepointstothenewJMXmanagementinthe`messaging-activemq`subsystemObjectNameobjectName=newObjectName("jboss.
as:subsystem=messaging-RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南36Noticethatthemethodnamesandparametershavechangedinthenewimplementation.
YoucanfindthenewmethodnamesintheJConsolebyfollowingthesesteps.
1.
ConnecttotheJConsoleusingthefollowingcommand.
EAP_HOME/bin/jconsole.
sh2.
ConnecttoJBossEAPlocalprocess.
Notethatitshouldstartwith"jboss-modules.
jar".
3.
IntheMBeanstab,choosejboss.
as→messaging-activemq→default→Operationstodisplaythelistofmethodnamesandattributes.
4.
10.
ORB服务器配置的修改在JBossEAP7里JacORB实现已用OpenJDKORB的一个下游分支代替.
位于EAP_HOME/modules/system/layers/base/里的org.
jboss.
as.
jacorb扩展模块,已被org.
wildfly.
iiop-openjdk扩展模块所替代.
服务器配置文件里的urn:jboss:domain:jacorb:1.
4子系统配置命名空间已被urn:jboss:domain:iiop-openjdk:1.
0命名空间替代.
下面是JBossEAP6里默认的jacorb系统配置示例.
下面是JBossEAP7里默认的iiop-openjdk子系统配置示例.
新的iiop-openjdk子系统配置只接受旧的元素和属性的一个子集.
下面是之前JBossEAP版本里的jacorb子系统配置,它包含所有的有效元素和属性:activemq,server=default");//Theinvokedmethodnameisnow"listConnectionIds"String[]connections=(String[])mbeanServer.
invoke(objectName,"listConnectionIds",newObject[]{},newString[]{});for(Stringconnection:connections){System.
out.
println(connection);}}finally{if(connector!
=null){connector.
close();}}第第4章章服服务务器配置的修改器配置的修改37下面的元素和属性不再被支持且必须删除.
表表4.
4.
要要删删除的属性除的属性Element不支持的属性不支持的属性client-timeoutmax-managed-buf-sizemax-server-connectionsoutbuf-cache-timeoutoutbuf-sizeconnectionretriesretry-intervalnameserver-timeoutRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南38queue-minqueue-maxpool-sizemax-threadsElement不支持的属性不支持的属性下面的on/off属性不再被支持,在运行管理CLImigrate操作迁移时也不会被迁移.
如果它们被设置为on,您将看到迁移警告.
这个表里提及的其他on/off属性(如)仍被支持且可以成功迁移.
唯一的区别是它们的值将从on/off改为true/false.
表表4.
5.
要关要关闭闭或或删删除的属性除的属性Element要要设设置置为为off的属性的属性cache-poa-namescache-typecodesprint-versionuse-bomuse-imr(allexceptsun)cometionachunk-custom-rmi-valuetypesindirection-encoding-disablelax-boolean-encodingstrict-check-on-tc-creationmonitoringqueue-wait4.
11.
迁移THREADS子系统配置JBossEAP6服务器配置包含了一个threads子系统,它用来管理服务器里不同子系统的线程池.
JBossEAP7里不再有threads子系统,相反,每个子系统都负责管理自己的线程池.
第第4章章服服务务器配置的修改器配置的修改39Forinformationabouthowtoconfigurethreadpoolsfortheinfinispansubsystem,seeConfigureInfinispanThreadPoolsintheJBossEAPConfigurationGuide.
Forinformationabouthowtoconfigurethreadpoolsforthejgroupssubsystem,seeConfigureJGroupsThreadPoolsintheJBossEAPConfigurationGuide.
InJBossEAP6,youconfiguredthreadpoolsforconnectorsandlistenersforthewebsubsystembyreferencinganexecutorthatwasdefinedinthethreadssubsystem.
InJBossEAP7,younowconfigurethreadpoolsfortheundertowsubsystembyreferencingaworkerthatisdefinedintheiosubsystem.
Formoreinformation,seeConfiguringtheIOSubsystemintheJBossEAPConfigurationGuide.
Forinformationaboutaboutchangestothreadpoolconfigurationintheremotingsubsystem,seeMigratetheRemotingSubsystemConfigurationinthisguide,andConfiguringtheEndpointintheJBossEAPConfigurationGuide.
4.
12.
迁移REMOTING子系统配置在JBossEAP6里,您通过设置worker-*属性为remoting子系统配置线程池.
而JBossEAP7不再在remoting子系统里配置工作节点线程池,如果您试图修改现有的配置,你会看到下面的信息.
WFLYRMT0022:Workerconfigurationisnolongerused,pleaseuseendpointworkerconfiguration在JBossEAP7里,工作节点线程池被引用io子系统里定义的worker的端点配置所替代.
Forinformationabouthowtoconfiguretheendpoint,seeConfiguringtheEndpointintheJBossEAPConfigurationGuide.
4.
13.
WEBSOCKET服务器配置的修改要在JBossEAP里使用WebSocket,您需要通过下面的命令行为JBossEAP服务器配置文件里web子系统的http连接器启用非阻塞式的JAVANIO2连接器协议.
/subsystem=web/connector=http/:write-attribute(name=protocol,value=org.
apache.
coyote.
http11.
Http11NioProtocol)要在应用程序里使用WebSockets,您也需要在应用程序的WEB-INF/jboss-web.
xml文件里创建一个元素并设置其为true.
在JBossEAP7里,您不再需要配置服务器默认支持WebSocket或配置应用程序使用它.
WebSocket是JavaEE7规格所要求的,也是默认配置的必需协议.
多数复杂的WebSocket配置都是在undertow子系统的servlet-container里完成的.
您可以用下列命令查看可用的设置.
/subsystem=undertow/servlet-container=default/setting=websockets:read-resource(recursive=true){"outcome"=>"success","result"=>{"buffer-pool"=>"default","dispatch-to-worker"=>true,RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南40"worker"=>"default"}}JBossEAP附带的quickstarts里也有关于WebSocket的代码示例.
4.
14.
单点登录服务器的修改TheinfinispansubsystemstillprovidesdistributedcachingsupportforHAservicesintheformofInfinispancachesinJBossEAP7;howeverthecachinganddistributionofauthenticationinformationishandleddifferentlythaninpreviousreleases.
在JBossEAP6里,如果Infinispan缓存没有提供单点登录(SSO),那么这个缓存不能是分布式的.
而在JBossEAP7里,当您选择HA配置集时,SSO是自动分布的.
当用HA配置集运行时,每台主机都有自己的基于Web缓存容器默认缓存的Infinispan缓存.
这个缓存存储相关的会话和主机的SSOcookie信息.
JBossEAP处理单独的缓存信息向所有主机的传播.
在JBossEAP7里无法专门分配某个Infinispan缓存给SSO.
在JBossEAP7里,SSO是在服务器配置的undertow子系统里进行配置的.
SSO迁移到JBossEAP7时不需要修改代码.
4.
15.
数据源配置的修改4.
15.
1.
JDBC数据源驱动名称当您在以前的JBossEAP版本里配置数据源时,为驱动名指定的值取决于JDBC驱动JAR里包含的META-INF/services/java.
sql.
Driver文件里列出的类的数量.
包含包含单单个个类类的的驱动驱动如果META-INF/services/java.
sql.
Driver文件只指定了一个类,驱动名将是JDBC驱动JAR的名称.
JBossEAP7没有改变这一点.
包含多个包含多个类类的的驱动驱动在JBossEAP6里,如果META-INF/services/java.
sql.
Driver文件列出了多个类,您可以指定哪个类将其名称附加到JAR名称,之后是主要和次要版本号.
例如:JAR_NAME+DRIVER_CLASS_NAME+"_"+MAJOR_VERSION+"_"+MINOR_VERSION而JBossEAP7里的命名有所不同,现在您用下列格式指定驱动名称.
JAR_NAME+"_"+DRIVER_CLASS_NAME+"_"+MAJOR_VERSION+"_"+MINOR_VERSION注意注意JAR_NAME和DRIVER_CLASS_NAME之间多了一个下划线.
MySQL5.
1.
31JDBC驱动是一个包含两个类的例子.
其驱动类名是com.
mysql.
jdbc.
Driver.
下面的例子展示了之前版本和当前版本的JBossEAP指定驱动名的不同之处.
JBossEAP6驱动驱动名称示例名称示例第第4章章服服务务器配置的修改器配置的修改41mysql-connector-java-5.
1.
31-bin.
jarcom.
mysql.
jdbc.
Driver_5_1JBossEAP7驱动驱动名称示例名称示例mysql-connector-java-5.
1.
31-bin.
jar_com.
mysql.
jdbc.
Driver_5_14.
16.
安全服务器配置的修改ForinformationaboutJavaSecurityManagerserverconfigurationchanges,seeConsiderationsMovingfromPreviousVersionsinHowToConfigureServerSecurityforJBossEAP.
4.
17.
TRANSACTIONS子系统的修改JBossEAP6的transactions子系统里的一些事务管理者配置属性在JBossEAP7里进行了修改.
RemovedTransactionsSubsystemAttributes下表列出了JBossEAP7里删除的JBossEAP6transactions子系统属性及其替代属性.
JBossEAP6里的属性里的属性JBossEAP7里的接替者里的接替者pathobject-store-pathrelative-toobject-store-relative-to已舍弃的已舍弃的Transactions子系子系统统属性属性ThefollowingattributesthatwereavailableinthetransactionssubsysteminJBossEAP6aredeprecatedinJBossEAP7.
Thedeprecatedattributesmightberemovedinafuturereleaseoftheproduct.
Thefollowingtableliststheequivalentreplacementattributes.
JBossEAP6里的属性里的属性JBossEAP7里的接替者里的接替者use-hornetq-storeuse-journal-storehornetq-store-enable-async-io-tojournal-store-enable-async-ioenable-statisticsstatistics-enabled4.
18.
MOD_CLUSTER配置的修改JBossEAP7已修改了mod_cluster里的静态代理列表的配置.
在JBossEAP6里,您会配置proxy-list属性,它是一个用逗号隔开的格式为hostname:port的HTTPS代理地址列表.
JBossEAP7里已舍弃了proxy-list属性.
它被作为转出套接字绑定名称列表的proxies属性替代.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南42Thischangeimpactshowyoudefineastaticproxylist,forexample,whendisablingadvertisingformod_cluster.
Forinformationabouthowtodisableadvertisingformod_cluster,seeDisableAdvertisingformod_clusterintheJBossEAPConfigurationGuide.
Formoreinformationaboutmod_clusterattributes,seeModClusterSubsystemAttributesintheJBossEAPConfigurationGuide.
第第4章章服服务务器配置的修改器配置的修改43第5章应用程序迁移的修改5.
1.
WEBSERVICE的应用程序修改JBossWS5为JBossEAP7WebServices带来了新的功能和性能改进,这主要是通过升级ApacheCXF、ApacheWSS4J和ApacheSantuario完成的.
5.
1.
1.
JAX-RPC支持的修改基于XML的RPC(JAX-RPC)的JavaAPI在JavaEE6已被舍弃,在JavaEE7里是可选的.
在JBossEAP7里它不再可用也不被支持.
使用JAX-RPC的应用程序必须迁移以使用目前JavaEE的标准WebService框架JAX-WS.
JAX-RPCWebService可以用下列途径确认:使用JAX-RPC映射文件,它是一个XML文件,其根元素是.
使用包含元素(包含子元素)的webservices.
xmlXML描述符文件.
下面是一个定义JAX-RPCwebservice的webservices.
xml描述符文件示例.
使用ejb-jar.
xml文件,它包含引用JAX-RPC映射文件的元素.
5.
1.
2.
ApacheCXFSpringWebServices的修改在以前的JBossEAP版本里,您可以通过在端点部署归档里包含jbossws-cxf.
xml配置文件来自定义JBossWS和ApacheCXF集成.
其中已一个例子是为ApacheCXF总线上的WebService客户和服务器端点配置连接器链.
这个集成要求在JBossEAP服务器里部署Spring.
JBossEAP7不再支持Spring集成.
任何包含jbossws-cxf.
xml描述符配置文件的应用程序必须进行修改,替换该文件里定义的自定义配置.
虽然您仍可以直接访问ApacheCXFAPI,请注意应用程序将会是不可迁移的.
HelloServiceWEB-INF/wsdl/HelloService.
wsdlWEB-INF/mapping.
xmlHelloHelloPortorg.
jboss.
chap12.
hello.
HelloHelloWorldServletRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南44我们建议的方法是尽量用新的JBossWS描述符配置选项替换Spring自定义配置.
基于JBossWS描述符的方法提供了类似的功能而无需修改客户端点代码.
在某些情况下,您可以用ContextDependencyInjection(CDI)替代Spring.
ApacheCXF拦拦截器截器JBossWS描述符提供了新的配置选项,允许您声明拦截器而无需修改客户端点代码.
通过指定cxf.
interceptors.
in和cxf.
interceptors.
out属性的拦截器类名,您可以在预定义的客户和端点配置里声明拦截器.
下面是一个jaxws-endpoint-config.
xml文件示例,它用这些属性声明拦截器.
ApacheCXF功能功能JBossWS描述符允许您通过指定cxf.
features属性的功能类名列表,在预定义的客户和端点配置里声明功能.
下面是一个jaxws-endpoint-config.
xml文件示例,它用这些属性声明了一个功能.
org.
jboss.
test.
ws.
jaxws.
cxf.
interceptors.
EndpointImplcxf.
interceptors.
inorg.
jboss.
test.
ws.
jaxws.
cxf.
interceptors.
EndpointInterceptor,org.
jboss.
test.
ws.
jaxws.
cxf.
interceptors.
FooInterceptorcxf.
interceptors.
outorg.
jboss.
test.
ws.
jaxws.
cxf.
interceptors.
EndpointCounterInterceptorCustomFIConfigcxf.
featuresorg.
apache.
cxf.
feature.
FastInfosetFeature第第5章章应应用程序迁移的修改用程序迁移的修改45ApacheCXF的的HTTP传输传输在ApacheCXF里,HTTP传输配置是通过org.
apache.
cxf.
transport.
http.
HTTPConduit属性实现的.
JBossWS集成允许在程序里使用ApacheCXFAPI修改Conduit.
您也通过设置系统属性来控制和覆盖ApacheCXFHTTPConduit的默认值.
属性属性类类型型描述描述cxf.
client.
allowChunking布尔值指定是否用分块发送请求.
cxf.
client.
chunkingThreshold整数设置从非分块切模式切换至分块模式时的极限值.
cxf.
client.
connectionTimeout长整数设置连接超时(毫秒).
cxf.
client.
receiveTimeout长整数设置接收超时(毫秒).
cxf.
client.
connection字符串指定是否使用Keep-Alive或close连接类型.
cxf.
tls-client.
disableCNCheck布尔值指定是否禁用CN主机名称检查.
5.
1.
3.
WS-Security修改如果您的应用程序包含了自定义的访问org.
apache.
ws.
security.
WSPasswordCallback类的回调处理程序,请注意这个类已经移至org.
apache.
wss4j.
common.
ext软件包.
org.
apache.
ws.
security.
saml.
ext软件包里大多数SAMLbean对象已经移至org.
apache.
wss4j.
common.
samlpackage.
使用RSAv1.
5关键字传输并默认禁用所有相关的算法.
安全令牌服务(SecurityTokenService,STS)之前只检验onBehalfOf令牌.
它现在可以检验ActAs令牌.
因此,您必须在为ActAs令牌提供的UsernameToken里指定有效的用户名和密码.
SAMLBearer令牌现在要求具有内部签名.
org.
apache.
wss4j.
dom.
validate.
SamlAssertionValidator类现在有一个setRequireBearerSignature()方法来启用或禁用签名验证.
importorg.
apache.
cxf.
frontend.
ClientProxy;importorg.
apache.
cxf.
transport.
http.
HTTPConduit;importorg.
apache.
cxf.
transports.
http.
configuration.
HTTPClientPolicy;//SetchunkingthresholdbeforeusingaJAX-WSportclient.
.
.
HTTPConduitconduit=(HTTPConduit)ClientProxy.
getClient(port).
getConduit();HTTPClientPolicyclient=conduit.
getClient();client.
setChunkingThreshold(8192);.
.
.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南465.
1.
4.
JBoss模块结构的修改cxf-api和cxf-rt-coreJAR已合并到一个cxf-coreJAR.
因此,JBossEAP里的org.
apache.
cxf模块现在包含了cxf-coreJAR并较之以前的版本开放了更多的类.
5.
1.
5.
BouncyCastle的要求和修改如果您想对XML/WS-Security里的对称加密使用AES加密和Galois/CounterMode(GCM),您需要BouncyCastle安全提供者.
JBossEAP7附带了org.
bouncycastle模块,JBossWS现在能够依赖自己的类加载来获取和使用BouncyCastle安全提供者.
因此不再需要再当前JMV里静态地安装BouncyCastle.
对于运行在容器外而要访问安全提供者的应用程序,你可以添加BouncyCastle库到classpath里.
您可以通过设置jaxws-endpoint-config.
xml(服务器)或jaxws-client-config.
xml(客户)里的org.
jboss.
ws.
cxf.
noLocalBC属性值为true来禁用这个行为.
如果您不想使用JBossEAP附带的版本,您仍可以将BouncyCastle静态地安装到JVM里.
在这种情况下,静态安装的BouncyCastle将优先于classpth的安全提供者.
要避免这种情况,您必须使用BouncyCastle1.
49、1.
51或更高的版本.
5.
1.
6.
ApacheCXF总线选择策略容器里运行的客户的默认总线选择策略已从THREAD_BUS改为TCCL_BUS.
对于在容器外运行的客户,默认的策略仍是THREAD_BUS.
您可以用下列方法来恢复之前版本里的设置.
将系统属性org.
jboss.
ws.
cxf.
jaxws-client.
bus.
strategy设置为THREAD_BUS来引导JBossEAP服务器.
显性地在客户代码里设置选择策略.
5.
1.
7.
WebServiceRef对JAX-WS2.
2的要求容器必须使用JAX-WS2.
2风格的构造器,它使用WebServiceFeature类来构建注入到Webservice引用里的客户.
这意味着用户提供的服务类(由容器注入)必须实现JAX-WS2.
2或更高规格.
5.
1.
8.
忽略HttpsHostCN检查在以前的版本里,通过设置系统属性org.
jboss.
security.
ignoreHttpsHost为true,您可以禁用对证书里服务器的公共名称(CommonName,CN)的HTTPSURL主机名检查.
这个系统属性名称已被cxf.
tls-client.
disableCNCheck所替代.
5.
1.
9.
服务器端的配置和类加载Asaconsequenceofenablinginjectionsintoserviceendpointandserviceclienthandlers,itisnolongerpossibletoautomaticallyloadhandlerclassesfromtheorg.
jboss.
as.
webservices.
server.
integrationJBossmodule.
Ifyourapplicationdependsonagivenpredefinedconfiguration,youmightneedtoexplicitlydefinenewmoduledependenciesforyourdeployment.
Formoreinformation,seeMigrateExplicitModuleDependencies5.
1.
10.
舍弃JavaEndorsedStandardsOverrideMechanismJDK1.
8_40已舍弃JavaEndorsedStandardsOverrideMechanism而JDK9将删除它.
这个机制允许开发人员将JAR放入JRE里支持的目录,从而使这些库为所有部署的应用程序所用.
第第5章章应应用程序迁移的修改用程序迁移的修改47如果您的应用程序使用了ApacheCXF的JBossWS实现,JBossEAP7会确保以正确的顺序添加所需的依赖关系,所以您不会受这些改动的影响.
如果您的应用程序直接访问ApacheCXF,作为应用程序部署的一部分,在JBossWS依赖关系之后您现在必须提供ApacheCXF依赖关系.
5.
1.
11.
EAR归档里的描述符规格在以前的JBossEAP版本里,您可以为JAR归档的META-INF/里的EJBWebService部署或WEB-INF/里的POJOWebService部署及WAR归档捆绑的EJBWebService端点配置jboss-webservices.
xml部署描述符文件.
在JBossEAP7里,您现在可以在EAR归档的META-INF/目录里配置jboss-webservices.
xml部署描述符文件.
如果EAR归档和JAR或WAR归档里都有jboss-webservices.
xml文件,JAR或WAR的jboss-webservices.
xml里的配置数据会覆盖EAR描述符文件里对应的数据.
5.
2.
更新远程URL连接器和端口在JBossEAP7里,默认的连接器已从remote改为http-remoting,且默认的远程连接端口已从4447改为8080.
默认配置的JNDI供应商URL已从remote://localhost:4447改为http-remoting://localhost:8080.
IfyouusetheJBossEAP7migrateoperationtoupdateyourconfiguration,youdonotneedtomodifytheremoteconnector,remoteport,orJNDIproviderURLsbecausethemigrationoperationpreservestheJBossEAP6remotingconnectorand4447portconfigurationsettingsinthesubsystemconfiguration.
Formoreinformationaboutthemigrateoperation,seeManagementCLIMigrationOperation.
如果您没有使用migrate操作而用新的JBossEAP7默认配置来运行,你必须修改远程连接、远程端口以及JNDI供应商URL来使用上述新的设置.
5.
3.
消息应用程序的修改5.
3.
1.
替换或更新JMS部署描述符JBossEAP7舍弃了用命名模式-jms.
xml标识的私有JMS资源部署描述符文件.
下面是一个JBossEAP6的JMS资源部署描述符示例.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南48在以前的版本里,如果您的应用程序使用了-jms.
xmlJMS部署描述符,您可以按照JavaEE7规格的EE.
5.
18章节转成使用标准JavaEE7部署描述符,或者升级部署描述符来使用JBossEAP7里的messaging-activemq子系统.
如果您选择更新描述符,您需要进行下列修改.
修改命名空间"urn:jboss:messaging-deployment:1.
0"为"urn:jboss:messaging-activemq-deployment:1.
0".
修改元素名为.
修改后的文件应该类似于下面的例子.
关于和消息相同相关的服务器配置修改,请参考MessagingServerConfigurationChanges.
5.
3.
2.
更新外部的JMS客户JBossEAP7仍支持JMS1.
1API,所以您不需要修改您的代码.
JBossEAP7修改了默认的远程连接器和端口.
关于这种改动的细节,请参考更新远程URL连接器和端口.
如果您用migrate操作移您的服务器配置,旧的设置将被保留,您不需要更新PROVIDER_URL.
然而,如果您用新的JBossEAP7的默认配置来运行,您必须在客户代码里修改PROVIDER_URL并使用新的http-remoting://localhost:8080设置.
更多信息请参考迁移远程命名客户代码.
如果您计划将您的代码迁移至JMS2.
0API,请参考helloworld-jmsquickstart里的用法.
5.
3.
3.
替代HornetQAPIJBossEAP6包含org.
hornetq模块,它允许您在代码里使用HornetQAPI.
JBossEAP7里ApacheActiveMQArtemis替代了HornetQ,所以您必须迁移任何使用HornetQAPI的代码,使其使用ApacheActiveMQArtemisAPI.
这个API库包含在org.
apache.
activemq.
artemis模块里.
ActiveMQArtemis是HornetQ的演化版本,所以许多概念仍然适用.
第第5章章应应用程序迁移的修改用程序迁移的修改495.
4.
JAX-RS和RESTEASY应用程序的修改之前的JBossEAP版本捆绑了实现JAX-RS1.
x的RESTEasy2.
JBossEAP7附带实现JAX-RS2.
0(由JSR339:JAX-RS2.
0:TheJavaAPIforRESTfulWebServices规格定义)的RESTEasy3.
关于用于RESTfulWebService的JavaAPI的更多信息,请参考JAX-RS2.
0API规格.
JBossEAP7里包含的Jackson版本已有改变.
之前的JBossEAP包含的是Jackson1.
9.
9,而JBossEAP7现在包含Jackson2.
6.
3或更高的版本.
ThissectiondescribeshowthesechangesmightimpactapplicationsthatuseRESTEasyorJAX-RS.
5.
4.
1.
RESTEasy已舍弃的类Interceptor和和MessageBody类类JSR311:JAX-RS:TheJavaAPIforRESTfulWebServicesdidnotincludeaninterceptorframework,soRESTEasy2providedone.
JSR339:JAX-RS2.
0:TheJavaAPIforRESTfulWebServicesintroducedanofficialinterceptorandfilterframework,sotheinterceptorframeworkincludedinRESTEasy2isnowdeprecated,andisreplacedbytheJAX-RS2.
0compliantinterceptorfacilityinRESTEasy3.
x.
Therelevantinterfacesaredefinedinthejavax.
ws.
rs.
extpackageofthejaxrs-apimodule.
RESTEasy3.
x里舍弃了下列拦截器接口.
org.
jboss.
resteasy.
spi.
interception.
PreProcessInterceptororg.
jboss.
resteasy.
spi.
interception.
PostProcessInterceptororg.
jboss.
resteasy.
spi.
interception.
ClientExecutionInterceptororg.
jboss.
resteasy.
spi.
interception.
ClientExecutionContextorg.
jboss.
resteasy.
spi.
interception.
AcceptedByMethod在RESTEasy3.
x里org.
jboss.
resteasy.
spi.
interception.
PreProcessInterceptor接口被javax.
ws.
rs.
container.
ContainerRequestFilter接口所替代.
RESTEasy3.
x里也舍弃了下列接口和类.
org.
jboss.
resteasy.
spi.
interception.
MessageBodyReaderInterceptororg.
jboss.
resteasy.
spi.
interception.
MessageBodyWriterInterceptororg.
jboss.
resteasy.
spi.
interception.
MessageBodyWriterContextorg.
jboss.
resteasy.
spi.
interception.
MessageBodyReaderContextorg.
jboss.
resteasy.
core.
interception.
InterceptorRegistryorg.
jboss.
resteasy.
core.
interception.
InterceptorRegistryListenerorg.
jboss.
resteasy.
core.
interception.
ClientExecutionContextImplorg.
jboss.
resteasy.
spi.
interception.
MessageBodyWriterInterceptor接口已被javax.
ws.
rs.
ext.
WriterInterceptor接口替代.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南50Inaddition,somechangestothejavax.
ws.
rs.
ext.
MessageBodyWriterinterfacemightnotbebackwardcompatiblewithrespecttoJAX-RS1.
x.
IfyourapplicationusedJAX-RS1.
x,reviewyourapplicationcodetomakesureyoudefine@Producesor@Consumesforyourendpoints.
Failuretodosomightresultinanerrorsimilartothefollowing.
org.
jboss.
resteasy.
core.
NoMessageBodyWriterFoundFailure:CouldnotfindMessageBodyWriterforresponseobjectoftype:ofmediatype:下面是可能导致这个错误的REST端点示例.
要修复这个问题,请添加对javax.
ws.
rs.
Produces和@Produces注解的导入.
@Path("dates")publicclassDateService{@GET@Path("daysuntil/{targetdate}")publiclongshowDaysUntil(@PathParam("targetdate")StringtargetDate){DateLogger.
LOGGER.
logDaysUntilRequest(targetDate);finallongdays;try{finalLocalDatedate=LocalDate.
parse(targetDate,DateTimeFormatter.
ISO_DATE);days=ChronoUnit.
DAYS.
between(LocalDate.
now(),date);}catch(DateTimeParseExceptionex){//**DISCLAIMER**.
Thisexampleiscontrived.
thrownewWebApplicationException(Response.
status(400).
entity(ex.
getLocalizedMessage()).
type(MediaType.
TEXT_PLAIN).
build());}returndays;}}.
.
.
importjavax.
ws.
rs.
Produces;.
.
.
@Path("dates")publicclassDateService{@GET@Path("daysuntil/{targetdate}")@Produces(MediaType.
TEXT_PLAIN)publiclongshowDaysUntil(@PathParam("targetdate")StringtargetDate){DateLogger.
LOGGER.
logDaysUntilRequest(targetDate);finallongdays;try{finalLocalDatedate=LocalDate.
parse(targetDate,第第5章章应应用程序迁移的修改用程序迁移的修改51注意注意之前RESTEasy版本的所有拦截器都可以和新的JAX-RS2.
0过滤器和拦截器接口并行运行.
Formoreinformationaboutinterceptors,seeRESTEasyInterceptorsinDevelopingWebServicesApplicationsforJBossEAP.
关于新的替代API的更多信息,请参考RESTEasyJAX-RS3.
0.
13.
FinalAPI或更新的版本.
ClientAPIresteasy-jaxrs里的RESTEasy客户框架已被兼容JAX-RS2.
0的resteasy-client模块替代.
因此,某些RESTEasyClientAPI类和方法已被舍弃.
下面的类已被舍弃.
org.
jboss.
resteasy.
client.
ClientRequestorg.
jboss.
resteasy.
client.
ClientRequestFactoryorg.
jboss.
resteasy.
client.
ClientResponseorg.
jboss.
resteasy.
client.
ProxyBuilderorg.
jboss.
resteasy.
client.
ProxyConfigorg.
jboss.
resteasy.
client.
ProxyFactoryorg.
jboss.
resteasy.
client.
ClientResponseFailure异常、org.
jboss.
resteasy.
client.
ClientExecutor及org.
jboss.
resteasy.
client.
EntityTypeFactory接口已被舍弃.
您必须用org.
jboss.
resteasy.
client.
jaxrs.
ResteasyClient和javax.
ws.
rs.
core.
Response分别替代org.
jboss.
resteasy.
client.
ClientRequest和org.
jboss.
resteasy.
client.
ClientResponse类.
下面是一个在RESTEasy2.
3.
x里发送链接头部和RESTEasy客户的例子.
DateTimeFormatter.
ISO_DATE);days=ChronoUnit.
DAYS.
between(LocalDate.
now(),date);}catch(DateTimeParseExceptionex){//**DISCLAIMER**.
Thisexampleiscontrived.
thrownewWebApplicationException(Response.
status(400).
entity(ex.
getLocalizedMessage()).
type(MediaType.
TEXT_PLAIN).
build());}returndays;}}ClientRequestrequest=newClientRequest(generateURL("/linkheader/str"));request.
addLink("previouschapter","previous",RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南52下面是一个在RESTEasy3里如何用RESTEasy客户实现相同任务的例子.
关于与JAX-RSWebservice交互的外部JAX-RSRestEasy客户,请参考resteasy-jaxrs-clientquickstart示例.
org.
jboss.
resteasy.
client.
cache软件包里的类和接口也已被舍弃.
它们被org.
jboss.
resteasy.
client.
jaxrs.
cache软件包里对应的类和接口替代.
注意注意关于org.
jboss.
resteasy.
client.
jaxrsAPI类的更多信息,请参考RESTEasyJAX-RSJavaDoc.
StringConverterRESTEasy3.
x已舍弃了org.
jboss.
resteasy.
spi.
StringConverter类.
这个功能可以用JAX-RS2.
0jax.
ws.
rs.
ext.
ParamConverterProvider类替代.
5.
4.
2.
已删除或变成protected权限的RESTEasy类ResteasyProviderFactory的的Add系列方法系列方法在RESTEasy3.
0里,大部分org.
jboss.
resteasy.
spi.
ResteasyProviderFactoryadd()方法已被删除或权限变为protected.
例如,addBuiltInMessageBodyReader{}和addBuiltInMessageBodyWriter()方法已被删除而addMessageBodyReader()和addMessageBodyWriter()方法的权限已变成protected.
现在您应该使用registerProvider()和registerProviderInstance()方法.
RESTEasy3里里删删除的其他除的其他类类指定JAX-RS方法的响应应该在服务器上缓存的@org.
jboss.
resteasy.
annotations.
cache.
ServerCached注解,已从RESTEasy3删除且必须从应用程序代码里删除.
5.
4.
3.
其他RESTEasy修改SignedInput和和SignedOuput用于resteasy-crypto的SignedInput和SignedOutput必须将Request或Response对象里的Content-Type设置为multipart/signed,或者使用@Consumes或@Produces注解.
"http://example.
com/TheBook/chapter2",null);ClientResponseresponse=request.
post();LinkHeaderheader=response.
getLinkHeader();ResteasyClientclient=newResteasyClientBuilder().
build();Responseresponse=client.
target(generateURL("/linkheader/str")).
request().
header("Link",";rel=\"previous\";title=\"previouschapter\"").
post(Entity.
text(newString()));javax.
ws.
rs.
core.
Linklink=response.
getLink("previous");第第5章章应应用程序迁移的修改用程序迁移的修改53通过在@Produces或@Consumes注解里设置application/pkcs7-signatureMIME类型,SignedOutput和SignedInput可以用来以二进制形式返回"application/pkcs7-signature"MIME类型.
如果@Produces或@Consumes是text/plainMIME类型,SignedOutput将用base64编码并作为String发送.
安全安全过滤过滤器器@RolesAllowed、@PermitAll和@DenyAll的安全过滤器现在返回"403Forbidden"而不是"401Unauthorized".
客客户户端端过滤过滤器器当您使用之前版本的RESTEasyclientAPI时,新的JAX-RS2.
0客户端过滤器不会被绑定和运行.
对对异步异步HTTP的支持的支持BecausetheJAX-RS2.
0specificationaddsasynchronousHTTPsupportusingthe@SuspendedannotationandtheAsynResponseinterface,theRESTEasyproprietaryAPIforasynchronousHTTPhasbeendeprecatedandmightberemovedassoonasRESTEasy3.
1.
TheasynchronousTomcatandasynchronousJBossWebmoduleshavealsobeenremovedfromtheserverinstallation.
IfyouarenotusingtheServlet3.
0containerorhigher,asynchronousHTTPserver-sideprocessingwillbesimulatedandrunsynchronouslyinsamerequestthread.
服服务务器端的器端的缓缓存存服务器端的缓存设置已经改变,更多信息请参考RESTEasyDocumentation.
5.
4.
4.
对RESTEasySPI的修改SPI异常异常我们已舍弃所有的SPI失败异常,不再在内部使用它们.
它们已被对应的JAX-RS2.
0异常所替代.
已舍弃的异常已舍弃的异常jaxrs-api模模块块里的替代异常里的替代异常org.
jboss.
resteasy.
spi.
ForbiddenExceptionjavax.
ws.
rs.
ForbiddenExceptionorg.
jboss.
resteasy.
spi.
MethodNotAllowedExceptionjavax.
ws.
rs.
NotAllowedExceptionorg.
jboss.
resteasy.
spi.
NotAcceptableExceptionjavax.
ws.
rs.
NotAcceptableExceptionorg.
jboss.
resteasy.
spi.
NotFoundExceptionjavax.
ws.
rs.
NotFoundExceptionorg.
jboss.
resteasy.
spi.
UnauthorizedExceptionjavax.
ws.
rs.
NotAuthorizedExceptionorg.
jboss.
resteasy.
spi.
UnsupportedMediaTypeExceptionjavax.
ws.
rs.
NotSupportedExceptionInjectorFactory和和RegistryInjectorFactory和RegistrySPI已有改动.
如果您按照文档和支持来使用RESTEasy,这不应该成为问题.
5.
4.
5.
Jackson提供者的变动RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南54JBossEAP7里包含的Jackson版本已有改变.
之前的JBossEAP包含的是Jackson1.
9.
9,而JBossEAP7现在包含Jackson2.
6.
3或更高的版本.
因此,Jackson提供者已从resteasy-jackson-provider变为resteasy-jackson2-provider.
升级至resteasy-jackson2-provider要求修改一些软件包.
例如,Jackson注解软件包已从org.
codehaus.
jackson.
annotate改成com.
fasterxml.
jackson.
annotation.
ToswitchyourapplicationtousethedefaultproviderthatwasincludedinthepreviousreleaseofJBossEAP,seeSwitchingtheDefaultJacksonProviderinDevelopingWebServicesApplicationsforJBossEAP.
5.
4.
6.
SpringRESTEasy集成的修改Spring4.
0框架引入了对Java8的支持.
如果您计划集成RESTEasy3.
x和Spring,请确保在部署里指定最低的Spring版本为4.
2.
x,因为这是JBossEAP7支持的最早的稳定版本.
5.
4.
7.
RESTEasyJettisonJSON提供者的修改JBossEAP7已舍弃了RESTEasyJettisonJSON提供者,默认不再将其添加到部署里.
我们鼓励您切换至我们推荐的RESTEasyJackson提供者.
如果您宁愿继续使用Jettison提供者,您必须在jboss-deployment-descriptor.
xml文件里为其定义一个显性依赖关系,如下例所示.
Formoreinformationabouthowtodefineexplicitdependencies,seeAddanExplicitModuleDependencytoaDeploymentintheJBossEAPDevelopmentGuide.
5.
5.
CDI1.
2应用程序的修改JBossEAP7includessupportforCDI1.
2.
Asaresult,applicationswrittenusingCDI1.
0mightseesomechangesinbehaviorwhenmigratedtoJBossEAP7.
Thissectionsummarizesonlyafewofthosechanges.
您可以在下列引用里找到关于Weld和CDI1.
2的更多信息:ContextsandDependencyInjectionfortheJavaEEplatformCDI1.
2JavadocWeld2.
3.
3.
Final-CDIReferenceImplementationBean归归档档第第5章章应应用程序迁移的修改用程序迁移的修改55已启用的bean的Bean类必须部署在bean归档里以确保被CDI扫描并发现和处理bean类.
在CDI1.
0里,对于应用程序客户、EJB或库JAR,如果归档的META-INF/目录包含了beans.
xml,或者是WAR的WEB-INF/目录包含了beans.
xml文件,这个就被定义为显性的bean归档.
CDI1.
1引入了隐性的bean归档,也就是包含一个或多个带有bean定义注解bean类或者会话bean的归档.
隐性的bean归档会被CDI扫描,在类型发现过程中,只有带有bean定义注解的类会被发现.
详情请参考JavaEE平台的上下文和依赖关系注入里的类型和Bean的发现.
Bean归档具有all、annotated或none发现模式.
包含不带版本的beans.
xml文件的bean归档的默认发现模式是all.
包含1.
1或更高版本的beans.
xml文件的bean归档必须指定bean-discovery-mode属性.
这个属性的默认值是annotated.
在下列情况下归档不是Bean归档:它包含bean-discovery-mode为none的beans.
xml文件.
它包含不带有beans.
xml文件的CDI扩展.
在下列情况下归档是显性的Bean归档:归档包含版本为1.
1或更高的beans.
xml文件,且bean-discovery-mode模式为all.
归档包含没有版本号的beans.
xml文件.
归档包含空的beans.
xml文件.
在下列情况下归档是隐性的Bean归档:归档包含一个或多个带有bean定义注解bean类或者会话bean,即使它没有包含beans.
xml文件.
归档包含bean-discovery-mode为annotated的beans.
xml文件.
CDI1.
2将bean定义注解限制为:@ApplicationScoped、@SessionScoped、@ConversationScoped和@RequestScoped注解.
所有其他的普通作用域类型@Interceptor和@Decorator注解使用@Stereotype的所有原型注解@Dependent作用域注解关于Bean归档的更多信息,请参考JavaEE平台的上下文和依赖关系注入里的Bean归档.
会会话话解析(解析(ConversationResolution)的)的说说明明会话上下文生命周期已被修改以防止和CDISpecificationIssueCDI-411里描述的Servlet规格冲突.
会话作用域在所有Servlet请求期间都时是活动的,它不应该阻止其他Serlet或Servlet过滤器设置请求主体或字符编码.
Observer解析解析RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南56CDI1.
2已部分地重写了事件解析(Eventresolution).
在CDI1.
0里,如果一个observer方法具有所有的事件限定符,事件将被递送给它.
在CDI1.
2里,如果一个observer方法没有事件限定符或只有一个子集,事件将被递送给它.
5.
6.
迁移显性模块依赖关系之前JBossEAP版本里引入模块化类加载系统和JBossModules允许对应用程序可用的类进行细颗粒度的控制.
这个功能允许您用应用程序的MANIFEST.
MF或jboss-deployment-structure.
xml部署描述符文件配置显性的模块依赖关系.
如果您在应用程序里定义了显性的模块依赖关系,您应该意识到JBossEAP7里下列的变化.
复复查查依依赖赖关系的可用性关系的可用性JBossEAP里包含的模块已经改动.
当您迁移应用程序至JBossEAP7时,请复查您的MANIFEST.
MF和jboss-deployment-structure.
xml文件以确保它们没有引用本版本已删除的模块.
要求注解要求注解扫扫描的依描的依赖赖关系关系在之前JBossEAP版本里,如果依赖关系包含了在注解扫描时需要处理的注解,如声明EJB拦截器时,您会被要求在新的JAR文件里生成和包括Jandex索引并在MANIFEST.
MF或jboss-deployment-structure.
xml部署描述符文件里设置一个标记.
JBossEAP7现在为静态模块提供了注解索引的运行时自动生成,所以您不再需要手动生成它们.
然而,您仍需要添加annotations标记到应用程序的MANIFEST.
MF或jboss-deployment-structure.
xml文件(如下所示).
MANIFEST.
MF文件里的注解文件里的注解标记标记示例示例Dependencies:com.
company.
my-ejbannotations,com.
company.
otherjboss-deployment-structure.
xml文件里的注解文件里的注解标记标记示例示例5.
7.
HIBERNATE和JPA迁移的修改5.
7.
1.
HibernateORM3.
0TheintegrationclassesthatmadeiteasiertouseHibernateORM3inthepreviousreleasewereremovedfromJBossEAP7.
IfyourapplicationstillusesHibernateORM3libraries,itisstronglyrecommendedthatyoumigrateyourapplicationtouseHibernateORM5asHibernateORM3willnolongerworkinJBossEAPwithoutalotofeffort.
IfyoucannotmigratetoHibernateORM5,youmustdefineacustomJBossModulefortheHibernateORM3JARsandexcludetheHibernateORM5classesfromyourapplication.
5.
7.
2.
HibernateORM4.
0-4.
3第第5章章应应用程序迁移的修改用程序迁移的修改57Ifyourapplicationneedssecond-levelcacheenabled,youshouldmigratetoHibernateORM5,whichisintegratedwithInfinispan8.
x.
ApplicationswrittenwithHibernateORM4.
xcanstilluseHibernateORM4.
x.
YoumustdefineacustomJBossmodulefortheHibernateORM4.
xJARsandexcludetheHibernateORM5classesfromyourapplication.
However,itisstronglyrecommendedthatyourewriteyourapplicationcodetouseHibernateORM5.
ForinformationaboutmigratingtoHibernateORM5,seeMigratingtoHibernateORM5.
5.
7.
3.
HibernateORM5Ifyourapplicationcontainsapersistence.
xmlfileorthecodeusesthe@PersistenceContextor@PersistenceUnitannotations,JBossEAP7detectsthisduringdeploymentandassumestheapplicationusesJPA.
ItimplicitlyaddstheHibernateORM5librariesplusafewotherdependenciestoyourapplicationclasspathanddefaultstousingtheselibraries.
5.
7.
4.
MigratingtoHibernateORM5ThissectionhighlightsthechangesyouneedtomakewhenmigratingfromHibernateORMversion4.
3toversion5.
FormoreinformationaboutthechangesimplementedbetweenHibernateORM4andHibernateORM5,seetheHibernateORM5.
0MigrationGuide.
RemovedandDeprecatedClassesThefollowingdeprecatedclasseswereremovedfromHibernateORM5.
org.
hibernate.
cfg.
AnnotationConfigurationorg.
hibernate.
id.
TableGeneratororg.
hibernate.
id.
TableHiLoGeneratororg.
hibernate.
id.
SequenceGeneratorOtherChangestoClassesandPackagesTheorg.
hibernate.
integrator.
spi.
Integratorinterfacechangedtoaccountforbootstrapredesign.
Anewpackageorg.
hibernate.
engine.
jdbc.
envpackagewascreated.
Itcontainstheorg.
hibernate.
engine.
jdbc.
env.
spi.
JdbcEnvironmentinterface,whichwasextractedfromorg.
hibernate.
engine.
jdbc.
spi.
JdbcServicesinterface.
Aneworg.
hibernate.
boot.
model.
relational.
ExportableProducerinterfacewasintroducedthatwillaffectorg.
hibernate.
id.
PersistentIdentifierGeneratorimplementations.
Thesignatureoforg.
hibernate.
id.
Configurablewaschangedtoacceptorg.
hibernate.
service.
ServiceRegistryratherthanjustorg.
hibernate.
dialect.
Dialect.
Theorg.
hibernate.
metamodel.
spi.
TypeContributorinterfacehasmigratedtoorg.
hibernate.
boot.
model.
TypeContributor.
Theorg.
hibernate.
metamodel.
spi.
TypeContributionsinterfacehasmigratedtoorg.
hibernate.
boot.
model.
TypeContributions.
TypeHandlingRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南58Built-inorg.
hibernate.
type.
descriptor.
sql.
SqlTypeDescriptorimplementationsnolongerauto-registerthemselveswithorg.
hibernate.
type.
descriptor.
sql.
SqlTypeDescriptorRegistry.
ApplicationsusingcustomSqlTypeDescriptorimplementationsthatextendthebuilt-inimplementationsandrelyonthatbehaviormustbeupdatedtocallSqlTypeDescriptorRegistry.
addDescriptor()themselves.
ForIDsdefinedasgeneratedUUIDs,somedatabasesrequireyoutoexplicitlysetthe@Column(length=16)inordertogenerateBINARY(16)sothatcomparisonsworkproperly.
ForEnumTypemappingsdefinedinthehbm.
xml,whereyouwantjavax.
persistence.
EnumType.
STRINGname-mapping,thisconfigurationmustbeexplicitlystatedbyusingeithertheuseNamed(true)settingorbyspecifyingaVARCHARvalueof12.
TransactionManagementThetransactionSPIunderwentamajorredesigninHibernateORM5.
InHibernateORM4.
3,youusedtheorg.
hibernate.
TransactionAPItodirectlyaccessdifferentback-endtransactionstrategies.
HibernateORM5introducedalevelofindirection.
Onthebackend,theorg.
hibernate.
Transactionimplementationnowtalkstoaorg.
hibernate.
resource.
transaction.
TransactionCoordinator,whichrepresentsthetransactionalcontextforagivensessionaccordingtotheback-endstrategy.
Whilethisdoesnothaveadirectimpactondevelopers,itcouldaffectthebootstrapconfiguration.
Previouslyapplicationswouldspecifyhibernate.
transaction.
factory_classproperty,whichisnowdeprecated,andrefertoaorg.
hibernate.
engine.
transaction.
spi.
TransactionFactoryFQN(fullyqualifiedname).
WithHibernateORM5,youspecifythehibernate.
transaction.
coordinator_classsettingandrefertoaorg.
hibernate.
resource.
transaction.
TransactionCoordinatorBuilder.
Seeorg.
hibernate.
cfg.
AvailableSettings.
TRANSACTION_COORDINATOR_STRATEGYforadditionaldetails.
Thefollowingshortnamesarenowrecognized.
jdbc:ManagetransactionsusingtheJDBCjava.
sql.
Connection.
Thisisthedefaultfornon-JPAtransactions.
jta:ManagetransactionsusingJTA.
第第5章章应应用程序迁移的修改用程序迁移的修改59重要重要IfaJPAapplicationdoesnotprovideasettingforthehibernate.
transaction.
coordinator_classproperty,Hibernatewillautomaticallybuildthepropertransactioncoordinatorbasedonthetransactiontypeforthepersistenceunit.
Ifanon-JPAapplicationdoesnotprovideasettingforthehibernate.
transaction.
coordinator_classproperty,Hibernatewilldefaulttojdbctomanagethetransactions.
ThisdefaultwillcauseproblemsiftheapplicationactuallyusesJTA-basedtransactions.
Anon-JPAapplicationthatusesJTA-basedtransactionsshouldexplicitlysetthehibernate.
transaction.
coordinator_classpropertyvaluetojtaorprovideacustomorg.
hibernate.
resource.
transaction.
TransactionCoordinatorBuilderthatbuildsaorg.
hibernate.
resource.
transaction.
TransactionCoordinatorthatproperlycoordinateswithJTA-basedtransactions.
OtherHibernateORM5ChangesThecfg.
xmlfilesareagainfullyparsedandintegratedwithevents,security,andotherfunctions.
Thepropertiesloadedfromthecfg.
xmlusingtheEntityManagerFactorydidnotpreviouslyprefixnameswithhibernate.
Thishasnowbeenmadeconsistent.
Theconfigurationisnolongerserializable.
Theorg.
hibernate.
dialect.
Dialect.
getQuerySequencesString()methodnowretrievescatalog,schema,andincrementvalues.
TheAuditConfigurationmodifierwasremovedfromorg.
hibernate.
envers.
boot.
internal.
EnversService.
TheAuditStrategymethodparameterswerechangedtoremovetheobsoleteAuditConfigurationandusethenewEnversService.
Variousclassesandinterfacesintheorg.
hibernate.
hql.
spipackageandsubpackageshavebeenmovedtotheneworg.
hibernate.
hql.
spi.
idpackage.
ThisincludestheMultiTableBulkIdStrategyclassandtheAbstractTableBasedBulkIdHandler,TableBasedDeleteHandlerImpl,andTableBasedUpdateHandlerImplinterfacesandtheirsubclasses.
Therewasacompleteredesignofpropertyaccesscontracts.
Validhibernate.
cache.
default_cache_concurrency_strategysettingvaluesarenowdefinedusingtheorg.
hibernate.
cache.
spi.
access.
AccessType.
getExternalName()methodratherthantheorg.
hibernate.
cache.
spi.
access.
AccessTypeenumconstants.
ThisismoreconsistentwithotherHibernatesettings.
5.
8.
HIBERNATESEARCH的修改RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南60JBossEAP7附带的HibernateSearch版本已被修改.
之前版本的JBossEAP附带HibernateSearch4.
6.
x,而JBossEAP7附带HibernateSearch5.
5.
x.
HibernateSearch5.
5isbuiltuponApacheLucene5.
3.
1.
IfyouuseanynativeLuceneAPIs,besuretoalignwiththisversion.
TheHibernateSearch5.
5APIwrapsandhidesthecomplexityofmanyoftheLuceneAPIchangesmadebetweenversion3andversion5,however,someclassesarenowdeprecated,renamed,orrepackaged.
Thissectiondescribeshowthesechangesmightimpactyourapplicationcode.
HibernateSearchMapping的修改的修改内嵌关系的内嵌关系的ID字段的索引字段的索引当使用@IndexedEmbedded注解来包含相关实体的字段时,相关实体的id字段不再被包含.
您可以用@IndexedEmbedded注解的includeEmbeddedObjectId属性启用对id的包含.
数字和日期索引格式的修改数字和日期索引格式的修改数字和日期现在默认用数值型字段作为索引.
int、long、float、double类型的属性及对应的Wrapper类都不再用字符串进行索引了.
它们现在改为使用Lucene的数字编码来索引.
id字段是这个规则的一个例外.
即使它们用数字类型来表达,它们的索引默认仍使用字符串键值.
@NumericField现在已废弃,除非您希望为数字编码定制精度.
您可以通过制定一个字符串编码的字段桥(fieldbridge)来保留旧的基于字符串的索引格式.
对于整型,它就是org.
hibernate.
search.
bridge.
builtin.
IntegerBridge.
关于其他可用的公用字段桥,请参考org.
hibernate.
search.
bridge.
builtin软件包.
Date和Calendar不再以字符串为索引.
它们改为用长整型来代表自1970年1月1日00:00:00GMT以来的毫秒数.
您可以用新的EncodingType枚举来切换索引格式.
例如:数字和日期的编码修改是很重要的,这对应用程序的行为有重大影响.
如果以字段为目标的查询之前是用字符串编码,而现在是数字编码,您就必须更新这个查询.
数字型的字段必须用NumericRangeQuery进行搜索.
您也必须确保所有按目标分类的字段都是用字符串编码的.
如果您使用Search查询DSL,正确的查询应该会自动创建.
其他的其他的HibernateSearch修改修改我们改进了排序选项,排序选项的错误字段编码现在会导致runtime异常抛出.
如果预先知道排序使用的字段,Lucene也提供了更高性能的排序方式.
HibernateSearch5.
5提供了新的@SortableField注解及其多值选项@SortableFields.
更多信息请参考《从HibernateSearch5.
4到5.
5的迁移指南》.
LuceneSortFieldAPI要求进行下列程序代码的修改.
在以前的JBossEAP6版本里,您可以像下面这样设置排序字段的类型.
下面是在JBossEAP7进行设置的例子.
@IndexedEmbedded(includeEmbeddedObjectId=true)@DateBridge(encoding=EncodingType.
STRING)@CalendarBridge(encoding=EncodingType.
STRING)fulltextQuery.
setSort(newSort(newSortField("title",SortField.
STRING)));fulltextQuery.
setSort(newSort(newSortField("title",SortField.
Type.
STRING)));第第5章章应应用程序迁移的修改用程序迁移的修改61既然SearchFactory只应被ORM集成使用,它从hibernate-search-engine模块移至hibernate-search-orm模块.
其他集成应该专门地依赖于SearchIntegrator,它替代了已舍弃的SearchFactoryIntegrator.
枚举值SpatialMode.
GRID被重命名为SpatialMode.
HASH.
FullTextIndexEventListener现在是final类.
如果您目前继承了这个类,您必须找到替代方案来实现相同的功能.
hibernate-search-analyzers模块已删除.
我们推荐的方法是直接使用合适的Lucene工件,例如org.
apache.
lucene:lucene-analyzers-common.
TheJMScontrollerAPIhaschanged.
TheJMSback-enddependencyonHibernateORMwasremovedsothatitcouldbeusedinothernon-ORMenvironments.
Aconsequenceisthatimplementorsoforg.
hibernate.
search.
backend.
impl.
jms.
AbstractJMSHibernateSearchControllermustadjusttothenewsignature.
Thisclassisaninternalclassanditisrecommendedtouseitasanexampleinsteadofextendingit.
org.
hibernate.
search.
spi.
ServiceProviderSPI已被重构.
如果您要集成旧的服务合约,新合约的细节请参考ServiceManager、Service、Startable和Stoppable的HibernateSearch5.
5Javadoc.
如果您已保留了Lucene3.
x生成的索引且没有用HibernateSearch5.
0或更新的版本进行重构,您将遇到IndexFormatTooOldException.
我们推荐您用massindexer重构索引.
如果您不能这样做,请试图使用Lucene的IndexUpgrader.
如果默认行为已修改,您必须小心地更新HibernateSearch映射.
更多的信息请参考《ApacheLucene迁移指南》.
JBossEAP7已将ApacheLucene升级为3.
6到5.
3.
如果您的代码直接导入了Lucene代码,相关细节请参考《ApacheLucene迁移指南》.
其他信息可以在Lucene更新日志里找到.
当使用@Field(indexNullAs=)来对索引里的空marker值编码时,这个marker的类型必须和在相同字段里其他索引值兼容.
例如,之前可能对数值型字段用字符串"null"编码空的值.
现在这是不允许的.
相反,您必须选择一个数字来表示null值,如-1.
我们对faceting引擎进行了重大改进.
多数改动不会影响API.
一个值得注意的例外是您必须注解任何要用@Facet或@Facets注解进行faceting的字段.
HibernateSearch重命名和重打包的重命名和重打包的类类下面是被重新打包或重命名的HibernateSearch类的列表.
之前的之前的软软件包和件包和类类新的新的软软件包和件包和类类org.
hibernate.
search.
Environmentorg.
hibernate.
search.
cfg.
Environmentorg.
hibernate.
search.
FullTextFilterorg.
hibernate.
search.
filter.
FullTextFilterorg.
hibernate.
search.
ProjectionConstantsorg.
hibernate.
search.
engine.
ProjectionConstantsorg.
hibernate.
search.
SearchExceptionorg.
hibernate.
search.
exception.
SearchExceptionorg.
hibernate.
search.
Versionorg.
hibernate.
search.
engine.
VersionRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南62Lucene-重命名和重打包的重命名和重打包的类类查询解析器已移至新的模块,所在软件包从org.
apache.
lucene.
queryParser.
QueryParser改为org.
apache.
lucene.
queryparser.
classic.
QueryParser.
许多Lucene分析器都已重构,导致软件包的变动.
要寻找替代的软件包,请查看ApacheLucene文档.
某些ApacheSolr工具类,如TokenizerFactory或TokenFilterFactory,都已移至ApacheLucence.
如果您的应用程序使用了这些工具或自定义的分析器,您必须找到ApacheLucene里新的软件包名称.
更多的信息请参考《ApacheLucene迁移指南》.
HibernateSearch已舍弃的已舍弃的API关于HibernateSearch已舍弃的接口、类、枚举、注解类型、方法、构造器和枚举常量的完整列表,请参考HibernateSearch已舍弃的API文档.
HibernateSearch已舍弃的接口已舍弃的接口接口接口描述描述org.
hibernate.
search.
store.
IndexShardingStrategy从HibernateSearch4.
4开始已舍弃,可能在Search5里删除.
现在请使用ShardIdentifierProvider.
org.
hibernate.
search.
store.
WorkspaceThisinterfacewillbemovedandshouldbeconsiderednon-publicAPI.
Formoreinformation,seeHSEARCH-1915.
HibernateSearch已舍弃的已舍弃的类类类类描述描述org.
hibernate.
search.
filter.
FilterKey自定义的过滤器键已舍弃且在HibernateSearch6里将被删除.
从HibernateSearch5.
1开始,用于缓存Lucene过滤器的键将基于给定的过滤器参数自动计算.
org.
hibernate.
search.
filter.
StandardFilterKey自定义的过滤器键已舍弃且在HibernateSearch6里将被删除.
从HibernateSearch5.
1开始,用于缓存Lucene过滤器的键将基于给定的过滤器参数自动计算.
HibernateSearch已舍弃的枚已舍弃的枚举举枚枚举举描述描述org.
hibernate.
search.
annotations.
FieldCacheType请删除已舍弃的CacheFromIndex注解.
详情请参考HibernateSearch已舍弃的注解.
HibernateSearch已舍弃的注解已舍弃的注解第第5章章应应用程序迁移的修改用程序迁移的修改63注解注解描述描述org.
hibernate.
search.
annotations.
CacheFromIndex请删除这个注解,不需要其他接替者.
org.
hibernate.
search.
annotations.
Key自定义的过滤器缓存键已舍弃且在HibernateSearch6里将被删除.
从HibernateSearch5.
1开始,过滤器缓存键将基于过滤器参数自动确定,所以不再需要提供键对象.
HibernateSearch已舍弃的方法已舍弃的方法方法方法描述描述org.
hibernate.
search.
FullTextSharedSessionBuilder.
autoClose()没有接替者org.
hibernate.
search.
FullTextSharedSessionBuilder.
autoClose(boolean)没有接替者org.
hibernate.
search.
cfg.
IndexedMapping.
cacheFromIndex(FieldCacheType…)它将被删除且没有接替者.
org.
hibernate.
search.
cfg.
EntityDescriptor.
getCacheInMemory()它将被删除且没有接替者.
org.
hibernate.
search.
cfg.
ContainedInMapping.
numericField()请改为调用field().
numericField().
org.
hibernate.
search.
cfg.
EntityDescriptor.
setCacheInMemory(Map)它将被删除且没有接替者.
org.
hibernate.
search.
MassIndexer.
threadsForSubsequentFetching(int)这个方法将被删除.
org.
hibernate.
search.
query.
dsl.
FuzzyContext.
withThreshold(float)请使用FuzzyContext.
withEditDistanceUpTo(int).
HibernateSearch已舍弃的已舍弃的构构造器造器构构造器造器描述描述org.
hibernate.
search.
cfg.
NumericFieldMapping(PropertyDescriptor,EntityDescriptor,SearchMapping)请改为使用NumericFieldMapping.
NumericFieldMapping(String,PropertyDescriptor,EntityDescriptor,SearchMapping).
影影响响高高级级集成器的修改集成器的修改RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南64本节描述了非公用API的修改.
它们不应该影响普通开发人员,因为这些工件只应该由继承HibernateSearch框架的集成者访问.
IndexWriterSetting.
MAX_THREAD_STATES和IndexWriterSetting.
TERM_INDEX_INTERVAL枚举常量已被舍弃.
它们影响从配置读取哪些属性,它们的缺失意味着忽略一些配置属性如hibernate.
search.
Animals.
2.
indexwriter.
term_index_interval=default,所以唯一的副作用是不会应用这些属性.
SearchFactoryIntegrator接口已被舍弃.
您应该立即迁移所有的代码以使用SearchIntegrator.
SearchFactoryBuilder类已被舍弃.
请改为使用SearchIntegrationBuilder.
TheHSQuery.
getExtendedSearchIntegrator()methodhasbeendeprecated.
ItmightbepossibletouseSearchIntegrator,butitispreferabletoremoveitaltogether.
DocumentBuilderIndexedEntity.
getFieldCacheOption()方法已被舍弃.
目前还没有接替者.
BuildContext.
getIndexingStrategy()方法已被舍弃.
请改为使用BuildContext.
getIndexingMode().
DirectoryHelper.
getVerifiedIndexDir(String,Properties,boolean)方法已被舍弃.
请改为使用DirectoryHelper.
getVerifiedIndexPath(java.
lang.
String,java.
util.
Properties,boolean).
下面是被重新打包或重命名的HibernateSearch类的列表.
之前的之前的软软件包和件包和类类新的新的软软件包和件包和类类org.
hibernate.
search.
engine.
impl.
SearchMappingBuilderorg.
hibernate.
search.
engine.
spi.
SearchMappingHelperorg.
hibernate.
search.
indexes.
impl.
DirectoryBasedIndexManagerorg.
hibernate.
search.
indexes.
spi.
DirectoryBasedIndexManagerorg.
hibernate.
search.
spi.
MassIndexerFactoryorg.
hibernate.
search.
batchindexing.
spi.
MassIndexerFactoryorg.
hibernate.
search.
spi.
SearchFactoryBuilderorg.
hibernate.
search.
spi.
SearchIntegratorBuilderorg.
hibernate.
search.
spi.
SearchFactoryIntegratororg.
hibernate.
search.
spi.
SearchIntegrator5.
9.
迁移ENTITYBEAN至JPAJavaEE7对EJBEntityBean的支持是可选的,它们不再受到支持.
这意味着迁移到JBossEAP7时,您必须重写CMP(container-managedpersistence)和BMP(bean-managedpersistence)来使用JavaPersistenceAPI(JPA)实体.
在以前的JBossEAP版本里,EntityBean是通过应用程序代码继承javax.
ejb.
EntityBean类并实现所需方法来创建的.
它们然后在ejb-jar.
xml文件里进行配置,CMPEntityBean用包含值为Container的子元素的元素来指定.
BMPentitybean用包含值为第第5章章应应用程序迁移的修改用程序迁移的修改65Bean的子元素的元素来指定.
在JBossEAP7里,您必须用JavaPersistenceAPI(JPA)实体替换任何CMP和BMPEntityBean.
JPA实体使用javax.
persistence.
*类创建并在persistence.
xml文件里定义的.
下面是一个JPA实体类示例.
下面是一个persistence.
xml文件示例.
importjavax.
persistence.
Column;importjavax.
persistence.
Entity;importjavax.
persistence.
GeneratedValue;importjavax.
persistence.
Id;importjavax.
persistence.
Table;@Entity//UserisakeywordinsomeSQLdialects!
@Table(name="MyUsers")publicclassMyUser{@Id@GeneratedValueprivateLongid;@Column(unique=true)privateStringusername;privateStringfirstName;privateStringlastName;publicLonggetId(){returnid;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.
username=username;}publicStringgetFirstName(){returnfirstName;}publicvoidsetFirstName(StringfirstName){this.
firstName=firstName;}publicStringgetLastName(){returnlastName;}publicvoidsetLastName(StringlastName){this.
lastName=lastName;}RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南66关于JPA实体的示例,请参考JBossEAP7附带的bmt、cmt和hibernate5Quickstarts例程.
5.
10.
JPA持久化属性的修改我们添加了新的持久性属性jboss.
as.
jpa.
deferdetach来提供对之前版本的JBossEAP里的持久性行为的支持.
jboss.
as.
jpa.
deferdetach属性控制每次EntityManager调用后非JTA事务线程里使用的事务作用域的持久化上下文是否分离加载的实体,或者等待至持久化上下文关闭.
例如,当SessionBean调用结束时.
这个属性值默认是false,表示实体在每次EntityManager调用后被分离或清除.
这是JPA规格里定义的正确的默认行为.
如果属性被设置为true,实体在持久化上下文关闭前不会被分离.
在JBossEAP5里,持久化的行为就像将jboss.
as.
jpa.
deferdetach属性设置为true一样.
要在迁移至JBossEAP7时获得相同的行为,您必须在persistence.
xml里将jboss.
as.
jpa.
deferdetach属性设置为true,如下例所示.
在JBossEAP6里,持久化的行为就像将jboss.
as.
jpa.
deferdetach属性设置为false一样.
这在JBossEAP7里是相同的,所以迁移应用程序时不需要进行修改.
5.
11.
迁移EJB客户代码JBossEAP7修改了默认的远程连接器和端口.
关于这种改动的细节,请参考更新远程URL连接器和端口.
如果您使用了migrate操作来迁移服务器配置,旧的设置将被保留,您不需要修改下面的细节.
然而,如果您用新的JBossEAP7默认配置运行,您必须进行下列修改.
5.
11.
1.
更新默认的远程连接端口在jboss-ejb-client.
properties文件里将远程连接端口值从4447改为8080.
下面是之前和当前版本里的jboss-ejb-client.
properties文件示例.
示例:示例:JBossEAP6jboss-ejb-client.
properties文件文件remote.
connectionprovider.
create.
options.
org.
xnio.
Options.
SSL_ENABLED=fals//properties.
.
.
java:jboss/datasources/ExampleDS第第5章章应应用程序迁移的修改用程序迁移的修改67eremote.
connections=defaultremote.
connection.
default.
host=localhostremote.
connection.
default.
port=4447remote.
connection.
default.
connect.
options.
org.
xnio.
Options.
SASL_POLICY_NOANONYMOUS=false示例:示例:JBossEAP7jboss-ejb-client.
properties文件文件remote.
connectionprovider.
create.
options.
org.
xnio.
Options.
SSL_ENABLED=falseremote.
connections=defaultremote.
connection.
default.
host=localhostremote.
connection.
default.
port=8080remote.
connection.
default.
connect.
options.
org.
xnio.
Options.
SASL_POLICY_NOANONYMOUS=false5.
11.
2.
更新默认的连接器如果您使用新的JBossEAP7配置运行,默认的连接器已从remote改为http-remoting.
这次改动影响了使用某个版本里的库并连接不同版本的服务器的客户.
如果客户应用程序使用JBossEAP6里的EJB客户库并希望连接至JBossEAP7服务器,您必须配置服务器通过8080之外的端口开放remote连接器.
然后客户必须使用新配置的连接器进行连接.
使用JBossEAP7里的EJB客户库并希望连接至JBossEAP6服务器的客户应用程序必须意识到服务器实例没有使用http-remoting而是remoting连接器.
这是通过定义新的客户端连接属性来实现的.
remote.
connection.
default.
protocol=remote5.
11.
3.
迁移远程命名客户代码如果您用新的默认JBossEAP7配置运行,你必须修改客户代码以使用新的默认远程端口和连接器.
下面是JBossEAP6里如何在客户代码里指定远程命名属性的例子.
java.
naming.
factory.
initial=org.
jboss.
naming.
remote.
client.
InitialContextFactoryjava.
naming.
provider.
url=remote://localhost:4447下面是JBossEAP7里如何在客户代码里指定远程命名属性的例子.
java.
naming.
factory.
initial=org.
jboss.
naming.
remote.
client.
InitialContextFactoryjava.
naming.
provider.
url=http-remoting://localhost:80805.
12.
迁移部署计划配置TheJavaEEApplicationDeploymentspecification(JSR-88)wasintendedtodefineastandardcontracttoenabletoolsfrommultipleproviderstoconfigureanddeployapplicationsonanyJavaEEplatformRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南68product.
ThecontractrequiredJavaEEProductProviderstoimplementtheDeploymentManagerandotherjavax.
enterprise.
deploy.
spiinterfacestobeaccessedbytheToolProviders.
IncaseofJBossEAP6,adeploymentplanisidentifiedbyanXMLdescriptornameddeployment-plan.
xmlthatisbundledinaZIPorJARarchive.
我们已很少采用这个规格,因为多数应用服务器产品提供了自己更"功能丰富"的部署方案.
出于这个原因,JavaEE7取消了对JSR-88的支持,所以JBossEAP7也不再支持.
IfyouusedJSR-88todeployyourapplication,youmustnowuseanothermethodtodeploytheapplication.
TheJBossEAPmanagementCLIdeploycommandprovidesastandardwaytodeployarchivestostandaloneserversortoservergroupsinamanageddomain.
FormoreinformationaboutthemanagementCLI,seetheManagementCLIGuide.
5.
13.
迁移自定义应用程序阀您必须手动迁移自定义阀或任何在jboss-web.
xmlXML文件里定义的阀.
这包含通过继承org.
apache.
catalina.
valves.
ValveBase类创建以及在jboss-web.
xml描述符文件的元素里配置的阀.
重要重要自定义阀和jboss-web.
xml文件里定义的阀必须被重写或用对应的Undertow内置处理程序替代.
关于映射阀到Undertow处理程序的更多信息,请参考迁移JBossWeb阀.
验证阀必须用Undertow内嵌的验证机制手动替换.
迁移部署里配置的迁移部署里配置的阀阀在JBossEAP6,您可以在jboss-web.
xml描述符文件里进行配置来定义应用程序级别的自定义阀.
而在JBossEAP7里,您可以用Undertow处理程序来实现.
下面是JBossEAP6里的jboss-web.
xml文件配置的阀的示例.
FormoreinformationabouthowtocreateandconfigurecustomhandlersinJBossEAP,seeCreatingCustomHandlersintheJBossEAPDevelopmentGuide.
迁移自定迁移自定义验证义验证器器阀阀关于如何迁移验证器阀的信息,请参考安全性应用程序的修改.
5.
14.
安全性应用程序的修改用Undertow替代JBossWeb要求修改JBossEAP7的安全性配置.
5.
14.
1.
迁移org.
jboss.
examples.
MyValvemyParamfoobar第第5章章应应用程序迁移的修改用程序迁移的修改69验证器阀(AuthenticatorValve)必须用Undertow内置的验证机制手动替代.
关于如何迁移验证器阀的信息,请阅读下面的章节.
5.
14.
2.
PicketLink的修改ForinformationaboutthechangesrequiredforSSOwithSAMLv2configuration,seeChangesfromPreviousVersionsofJBossEAPinHowtoSetUpSSOwithSAMLv2forJBossEAP.
5.
14.
3.
其他安全性应用程序的修改ForinformationaboutthedifferencesinSSOconfigurationwithKerberos,seeDifferencesfromConfiguringPreviousVersionsJBossEAPinHowtoSetUpSSOwithKerberosforJBossEAP.
5.
15.
JBOSSLOGGING的修改如果您的应用程序使用了JBossLogging,请注意JBossEAP7已舍弃在org.
jboss.
logging软件包里进行注解.
它们被移至org.
jboss.
logging.
annotations软件包,所以您必须更新源码来导入新的软件包.
这些注解也已移至单独的MavengroupId:artifactId:version(GAV)ID,所以您需要在pom.
xml文件里为org.
jboss.
logging:jboss-logging-annotations添加一个新的依赖关系.
注意注意只移动了日志注解.
org.
jboss.
logging.
BasicLogger和org.
jboss.
logging.
Logger仍存在于org.
jboss.
logging软件包里.
下表列出已舍弃的注解类和对应的接替者.
表表5.
1.
已舍弃的已舍弃的Logging注解的接替者注解的接替者已舍弃的已舍弃的类类替代的替代的类类org.
jboss.
logging.
Causeorg.
jboss.
logging.
annotations.
Causeorg.
jboss.
logging.
Fieldorg.
jboss.
logging.
annotations.
Fieldorg.
jboss.
logging.
FormatWithorg.
jboss.
logging.
annotations.
FormatWithorg.
jboss.
logging.
LoggingClassorg.
jboss.
logging.
annotations.
LoggingClassorg.
jboss.
logging.
LogMessageorg.
jboss.
logging.
annotations.
LogMessageorg.
jboss.
logging.
Messageorg.
jboss.
logging.
annotations.
Messageorg.
jboss.
logging.
MessageBundleorg.
jboss.
logging.
annotations.
MessageBundleorg.
jboss.
logging.
MessageLoggerorg.
jboss.
logging.
annotations.
MessageLoggerorg.
jboss.
logging.
Paramorg.
jboss.
logging.
annotations.
ParamRedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南70org.
jboss.
logging.
Propertyorg.
jboss.
logging.
annotations.
Property已舍弃的已舍弃的类类替代的替代的类类5.
16.
JAVASERVERFACES(JSF)代码的修改取消取消对对JSF1.
2的支持的支持JBossEAP6允许您通过创建jboss-deployment-structure.
xml文件继续使用JSF1.
2.
JBossEAP7包含JSF2.
2且不再支持JSF1.
2API.
如果您的应用程序使用JSF1.
2,您必须重写代码以使用JSF2.
2.
JSF2.
1和和JSF2.
2间间的兼容性的兼容性问题问题JSF2.
1和JSF2.
2API不是完全兼容的.
FACELET_CONTEXT_KEY常量从com.
sun.
faces.
facelets.
FACELET_CONTEXT改成了javax.
faces.
FACELET_CONTEXT.
编译器内联这个值,根据某个版本编译的代码将无法在其他版本里使用.
用JSF2.
1API编译的包含和下面例子相似的代码的应用程序,如果在使用JSF2.
2API的JBossEAP7里运行会导致NullPointerException.
要修复这个问题,您必须用JSF2.
2API重新编译应用程序.
详情请参考JAVASERVERFACES_SPEC_PUBLIC-1257.
5.
17.
模块类加载的修改在JBossEAP7里,多个模块包含相同的类或软件包时的类加载行为已修改.
假设有两个模块MODULE_A和MODULE_B,彼此依赖并包含一些相同的软件包.
在JBossEAP6里,从依赖关系加载的类或软件包优先于module.
xml文件的resource-root元素里指定的.
这意味着MODULE_A可以看到MODULE_B的软件包而MODULE_B可以看到MODULE_A的软件包.
这种行为让人困惑且可能导致冲突.
而JBossEAP7已修改了这种行为.
现在module.
xml文件的resource-root元素指定的类或软件包优先于依赖关系所指定的.
这意味着MODULE_A只可以看到MODULE_A的软件包而MODULE_B可以看到MODULE_B的软件包.
这防止了冲突并提供了更合适的行为.
Ifyouhavedefinedcustommodulesthatincluderesource-rootlibrariesorpackagesthatcontainclassesthatareduplicatedintheirmoduledependencies,youmightseeClassCastException,LinkageError,classloadingerrors,orotherchangesinbehaviorwhenyoumigratetoJBossEAP7.
Toresolvetheseissues,youmustconfigureyourmodule.
xmlfiletoensureonlyoneversionofaclassisused.
Thiscanbeaccomplishedbyusingeitherofthefollowingapproaches.
您可以避免指定在模块依赖关系里重复类的resource-root.
您可以使用imports和exports的include和exclude子元素来控制module.
xml文件里的类加载.
下面是使用export元素排除指定软件包里的类的例子.
Objectobj=FacesContext.
getCurrentInstance().
getAttributes().
get(FaceletContext.
FACELET_CONTEXT_KEY);第第5章章应应用程序迁移的修改用程序迁移的修改71如果您希望保留现有的行为,你必须通过filter元素在过滤module.
xml文件里resource-root的依赖关系软件包.
这允许您保留现有的行为而不会看到JBossEAP6里看到的奇怪的循环.
下面是通过root-resource过滤指定软件包里的类的例子.
Formoreinformationaboutmodulesandclassloading,seeClassLoadingandModulesintheJBossEAPDevelopmentGuide.
5.
18.
应用程序群集的修改5.
18.
1.
新的群集功能概述下面描述了从JBossEAP6迁移至JBossEAP7时要注意的新的群集功能.
JBossEAP7introducesanewpublicAPIforbuildingsingletonservicesthatsignificantlysimplifiestheprocess.
Formoreinformation,seeImplementanHASingletoninDevelopingEJBApplicationsforJBossEAP.
Asingletondeploymentcanbeconfiguredtodeployandstartononlyasinglenodeintheclusteratatime.
Formoreinformation,seeHASingletonDeploymentsintheJBossEAPDevelopmentGuide.
YoucannowdefineclusteredsingletonMDBs.
Formoreinformation,seeClusteredSingletonMDBsinDevelopingEJBApplicationsforJBossEAP.
JBossEAP7includestheUndertowmod_clusterimplementation.
ThisoffersapureJavaloadbalancingsolutionthatdoesnotrequireanhttpdwebserver.
Formoreinformation,seeConfiguringJBossEAPasaFront-endLoadBalancerintheJBossEAPConfigurationGuide.
TheremainderofthissectiondescribeshowclusteringchangesmightimpactthemigrationofyourapplicationstoJBossEAP7.
5.
18.
2.
Web会话群集的修改JBossEAP7引入了新的Web会话群集实现.
它替代了之前和旧的JBossWeb子系统紧耦合的实现.
新的Web会话群集实现影响了如何在jboss-web.
xml描述符文件里配置应用程序.
下面是这个文件里保留的群集配置元素.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
RedHatJBossEnterpriseApplicationPlatform7.
0迁移指南迁移指南72下表描述了如何实现和jboss-web.
xml里现已舍弃的元素类似的行为.
配置元素配置元素对对修改的描述修改的描述以前,如果活动会话的数量超过了指定的值,创建会话将会失败.
在新的实现里,用于启用会话钝化.
如果创建会话可能导致活动会话数量超过,那么会话管理者已知的最老的会话将会钝化,为新的会话留出空间.
JBossEAP7不再使用这个配置元素及其子元素.
以前,钝化是用这个属性启用的.
在新的实现里,钝化是通过为指定非负的值来启用的.
以前,会话在成为钝化候选者之前,需要处于活动状态一段最短的时间.
这可能导致创建会话失败,即使已启用了钝化.
新的实现不支持这个逻辑,所以避免了拒绝服务(DenialofService,DoS)漏洞.
以前,会话将处于空闲状态一段时间后将被钝化.
新的实现只支持lazy钝化.
它不支持eager钝化.
会话只有在需要遵从时才被钝化.
新的实现舍弃了大量的子元素.
Previously,thiselementwasusedtodeterminewhensessionreplicationwastriggered.
Thenewimplementationreplacesthisconfigurationoptionwithasingle,robuststrategy.
Formoreinformation,seeImmutableSessionAttributesintheJBossEAPDevelopmentGuide.
以前,处理给定请求的节点的instance-id被附加到jsessionid,根据所指定的值,它用于不同的负载平衡器,如mod_jk、mod_proxy_balancer、mod_cluster.
在新的实现里,如果定义了instance-id,它总是附加到jsessionid.
以前,这个配置选项的目的是防止没有修改会话属性时会话时间戳的重复.
hypervmart怎么样?hypervmart是一家国外主机商,成立于2011年,提供虚拟主机、VPS等,vps基于Hyper-V 2012 R2,宣称不超售,支持linux和windows,有荷兰和英国2个数据中心,特色是1Gbps带宽、不限流量。现在配置提高,价格不变,性价比提高了很多。(数据中心不太清楚,按以前的记录,应该是欧洲),支持Paypal付款。点击进入:hypervmart官方网...
rangcloud怎么样?rangcloud是去年年初开办的国人商家,RangCloud是一家以销售NAT起步,后续逐渐开始拓展到VPS及云主机业务,目前有中国香港、美国西雅图、韩国NAT、广州移动、江门移动、镇江BGP、山东联通、山东BGP等机房。目前,RangCloud提供香港CN2线路云服务器,电信走CN2、联通移动直连,云主机采用PCle固态硬盘,19.8元/月起,支持建站使用;美国高防云...
PacificRack最近促销上瘾了,活动频繁,接二连三的追加便宜VPS秒杀,PacificRack在 7月中下旬已经推出了五款秒杀VPS套餐,现在商家又新增了三款更便宜的特价套餐,年付低至7.2美元,这已经是本月第三波促销,带宽都是1Gbps。PacificRack 7月秒杀VPS整个系列都是PR-M,也就是魔方的后台管理。2G内存起步的支持Windows 7、10、Server 2003\20...