注:针对的是jboss5.0,其它版本没有测试过 ,主要参考了:http://www.diybl.com/course/3_program/java/javajs/20100719/460908.html,在些表示感谢

将项目从tomcat 迁移到JBoss,一般情况下会出现很多问题,下面是相关问题的记录及解决方法。
1. (1)首先要新增两个jar包:jboss-as-sprint-int-5.0.0.GA.jar 和 jboss-spring-int-vfs.jar
(2)然后在web.xml 文件中加上以下配置
  <context-param>
          <param-name>contextClass</param-name>
          <param-value>
              org.jboss.spring.vfs.context.VFSXmlWebApplicationContext
          </param-value>
   </context-param>

2. 在web.xml 文件中,如果spring 相关文件是按以下方式配置的:
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext*.xml
  </param-value>
 </context-param>
 则要改为如下形式:
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   classpath:applicationContext.xml,
   classpath:applicationContext-compass.xml,
   classpath:applicationContext-security.xml
  </param-value>
 </context-param>

3. 如果在其它的spring 配置文件(如applicationContext.xml等文件)中引用了xml 文件,如下
 <import resource="quartz.xml"/> 
 则要将改为如下引入方式:
 
 <import resource="classpath:quartz.xml"/>

4.启动时如果报类似如下错误,则将jboss common/lib 中 hibernate-validator.jar 删掉
Caused by: org.hibernate.AnnotationException: java.lang.NoSuchMethodException: org.hibernate.validator.ClassValidator.<init>(java.lang.Class, java.util.ResourceBundle, org.hibernate.validator.MessageInterpolator, java.util.Map, org.hibernate.annotations.common.reflection.ReflectionManager)
 at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:353)
 at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1134)
 at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:673)
 at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
 ... 144 more
Caused by: java.lang.NoSuchMethodException: org.hibernate.validator.ClassValidator.<init>(java.lang.Class, java.util.ResourceBundle, org.hibernate.validator.MessageInterpolator, java.util.Map, org.hibernate.annotations.common.reflection.ReflectionManager)
 at java.lang.Class.getConstructor0(Class.java:2706)
 at java.lang.Class.getDeclaredConstructor(Class.java:1985)
 at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:343)
 ... 149 more
5.经过上4个步骤后,启动一般不会报错了,但在访问程序时,可能会报类似以下错误:
Stacktraces
java.lang.NoSuchMethodException: com.opensymphony.xwork2.ActionSupport.login()

java.lang.Class.getMethod(Class.java:1605)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.getActionMethod(AnnotationValidationInterceptor.java:75)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:47)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:169)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
    org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
    org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
    org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    java.lang.Thread.run(Thread.java:619)
    
 (注,根据你具体访问的url,报的错可能不是com.opensymphony.xwork2.ActionSupport.login() 方法以,而是其它方法)

这个错误解决方法如下 (这样解决只是权宜之计,如果哪位有更好的解决办法,请告之下):
在classpath 路径下增加一个struts-plugin.xml 文件,内容如下 :

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

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
 
 <bean name="myActionConfigBuilder" type="org.apache.struts2.convention.ActionConfigBuilder"
  class="com.etshop.struts.convention.MyActionConfigBuilder"/>
  
 <constant name="struts.convention.actionConfigBuilder" value="myActionConfigBuilder"/>
</struts>  
  
  MActionConfigBuilder 源码如下 :

[java] view plaincopy
  1. <span style="font-size:18px;">package com.etshop.struts.convention;
  2. import java.net.MalformedURLException;
  3. import java.net.URL;
  4. import java.util.ArrayList;
  5. import java.util.HashSet;
  6. import java.util.List;
  7. import java.util.Set;
  8. import org.apache.commons.logging.Log;
  9. import org.apache.commons.logging.LogFactory;
  10. import org.apache.struts2.convention.PackageBasedActionConfigBuilder;
  11. import com.opensymphony.xwork2.ObjectFactory;
  12. import com.opensymphony.xwork2.config.Configuration;
  13. import com.opensymphony.xwork2.inject.Container;
  14. import com.opensymphony.xwork2.inject.Inject;
  15. import com.opensymphony.xwork2.util.finder.ClassFinder;
  16. import com.opensymphony.xwork2.util.finder.Test;
  17. /**
  18. *
  19. * 解决在JBoss 下不能找到 Action 问题
  20. *
  21. */
  22. public class MyActionConfigBuilder extends PackageBasedActionConfigBuilder {
  23. private static Log log = LogFactory.getLog(MyActionConfigBuilder.class);
  24. private static final String BASE_FILE = "applicationContext.xml";
  25. private String[] actionPackages;
  26. private String[] packageLocators;
  27. /**
  28. *
  29. * @param configuration
  30. * @param container
  31. * @param objectFactory
  32. * @param redirectToSlash
  33. * @param defaultParentPackage
  34. */
  35. @Inject
  36. public MyActionConfigBuilder(
  37. Configuration configuration,
  38. Container container,
  39. ObjectFactory objectFactory,
  40. @Inject("struts.convention.redirect.to.slash")
  41. String redirectToSlash,
  42. @Inject("struts.convention.default.parent.package")
  43. String defaultParentPackage) {
  44. super( configuration, container, objectFactory, redirectToSlash, defaultParentPackage );
  45. }
  46. /**
  47. *
  48. * @param actionPackages
  49. *            (Optional) An optional list of action packages that this
  50. *            should create
  51. *
  52. * configuration for.
  53. *
  54. */
  55. @Inject(value = "struts.convention.action.packages", required = false)
  56. public void setActionPackages(String actionPackages) {
  57. super.setActionPackages(actionPackages);
  58. if ( !"".equals( actionPackages.trim() ) ) {
  59. this.actionPackages = actionPackages.split( "\\s*[,]\\s*" );
  60. }
  61. }
  62. /**
  63. *
  64. * @param packageLocators
  65. *            (Optional) A list of names used to find action packages.
  66. *
  67. */
  68. @Inject(value = "struts.convention.package.locators", required = false)
  69. public void setPackageLocators(String packageLocators) {
  70. super.setPackageLocators(packageLocators);
  71. this.packageLocators = packageLocators.split("\\s*[,]\\s*");
  72. }
  73. @Override
  74. @SuppressWarnings("unchecked")
  75. protected Set<Class> findActions() {
  76. Set<Class> classes = new HashSet<Class>();
  77. try {
  78. //          ClassFinder finder = new ClassFinder(getClassLoaderForFinder(), buildUrls(), true);
  79. ClassFinder finder = new ClassFinder( getClassLoaderInterface(), buildUrls(), true);
  80. if (actionPackages != null) {
  81. for (String packageName : actionPackages) {
  82. Test<ClassFinder.ClassInfo> test = getPackageFinderTest(packageName);
  83. classes.addAll(finder.findClasses(test));
  84. }
  85. }
  86. // package locators
  87. if (packageLocators != null) {
  88. for (String packageLocator : packageLocators) {
  89. Test<ClassFinder.ClassInfo> test = getPackageLocatorTest(packageLocator);
  90. classes.addAll(finder.findClasses(test));
  91. }
  92. }
  93. } catch (Exception ex) {
  94. if (log.isErrorEnabled()) {
  95. log.error("Unable to scan named packages", ex);
  96. }
  97. }
  98. return classes;
  99. }
  100. private List<URL> buildUrls() throws MalformedURLException {
  101. List<URL> urls = new ArrayList<URL>();
  102. URL classesUrl = getClassLoader().getResource( BASE_FILE );
  103. if (classesUrl == null) {
  104. throw new IllegalStateException(
  105. "File " + BASE_FILE + " was not found. The folder WEB-INF/classes discovery base on file classes/" + BASE_FILE + ".");
  106. }
  107. String baseFilePath = classesUrl.getFile();
  108. URL url = new URL( "file", "", baseFilePath.substring( 0, baseFilePath.indexOf( BASE_FILE ) ) );
  109. if (log.isInfoEnabled()) {
  110. log.info("Struts2 ActionConfigBuilder, classes directory: " + url.getFile());
  111. }
  112. urls.add(url);
  113. return urls;
  114. }
  115. /*private ClassLoader getClassLoader() {
  116. return Thread.currentThread().getContextClassLoader();
  117. }*/
  118. }
  119. </span>

另注:以上过程都是通过在myEclipse中部署到jboss中的,接下来如果将程序导出为war包直接放到jboss下,启动时会报错,此时应该将war解压,将解压后的目录名后面加上.war,(如etshop.war包,解压后目录为etshop,将目录重命名为etshop.war)然后启动就不会报错了。

转载于:https://www.cnblogs.com/zfswff/p/4772046.html

[置顶] 将项目从tomcat 迁移到JBoss相关推荐

  1. 项目1在线交流平台-7.构建安全高效的企业服务-3. Security整合Kafka,ES,Thymeleaf实例-对帖子置顶、加精、删除

    文章目录 功能需求 一.置顶.加精.删除帖子功能的实现 1. dao层处理数据 接口定义 sal语句定义 2. service层业务处理 3. Controller层处理按钮事件异步请求 异步请求及k ...

  2. 如何在项目中实现类似于微信的置顶与取消置顶的功能?

    - 借鉴微信的置顶与取消置顶的实现思路: 会看到这个微信的聊天记录的排序规则是以时间降序来进行排序的,如果要实现置顶与取消置顶? 一下子是想不到的,需要思路 由此可以确信的是,我们平时使用微信时,最新 ...

  3. Android项目:仿微信聊天的删除,置顶。

    首先我们要重写上下文菜单方法onCreateContextMenu,从这个方法可以添加需要的条目按钮,我们要在res/menu目录下建议个weixin.xml文件: <?xml version= ...

  4. 阅读目录(置顶)(长期科技领域知识)

    第一期:适用于数据项目的7种强大的开源工具 第二期:四种正确的微服务部署方式 第三期:开源和赚钱何去何从 第四期:Web前端和Java开发哪个薪资更高,发展前景更好? 第五期:干货总结:中级前端工程师 ...

  5. 【置顶】利用 NLP 技术做简单数据可视化分析教程(实战)

    置顶 本人决定将过去一段时间在公司以及日常生活中关于自然语言处理的相关技术积累,将在gitbook做一个简单分享,内容应该会很丰富,希望对你有所帮助,欢迎大家支持. 内容介绍如下 你是否曾经在租房时因 ...

  6. android列表实现置顶,Android利用RecyclerView实现全选、置顶和拖拽功能示例

    Android利用RecyclerView实现全选.置顶和拖拽功能示例 发布时间:2020-08-23 16:26:42 来源:脚本之家 阅读:159 作者:爱开发 前言 今天给大家分享是如何在Rec ...

  7. 从tomcat 迁移到 WebSphere 经验总结

    我们的项目使用的是 webwork+spring + jsf+dwr  ,项目在tomcat 和 weblogic上部署均无问题, 我的具体遇到的困难,大家可以看贴[url]http://www.we ...

  8. Qt 调用 Windows 接口实现窗口置顶

    前言 用 Qt 做 Windows 软件开发,有时候会用到窗口置顶功能,其实 Qt 有自带的接口来实现窗口置顶,但是效果并不太理想,比如说没办法置顶于系统标题栏,或者在全屏状态下如果有键盘事件的时候窗 ...

  9. 解决jquery的scrollTop()置顶的浏览器兼容

    2019独角兽企业重金招聘Python工程师标准>>> 对于前端开发者来说,浏览器兼容是经常会遇到的问题,在不同的项目中经常会遇到不同的弹出层操作,比如登录的弹出层,需要在屏幕的中间 ...

最新文章

  1. 简单快速修改大量重复代码(Intellij IDEA)
  2. spring cloud连载第二篇之Spring Cloud Config
  3. it程序员刷题 面试 中文网站收集
  4. 显示电池电量的小工具
  5. [Redis源码阅读]redis持久化
  6. “睡服”面试官系列第十三篇之函数的扩展(建议收藏学习)
  7. 李笑来登顶 GitHub TOP 榜!币圈大佬要教程序员如何自学编程
  8. zufeoj_1257: 神风堂人数 VIJOS-P1041
  9. java后台开发程序媛~~
  10. CSS命名规范(规则)常用的CSS命名规则
  11. 装mysql电脑网卡不见了_网络适配器不见了怎么办【解决方法】
  12. 计算机化自适应测验 英语,计算机化自适应测验选题策略研究
  13. 湖南农业大学有计算机应用,计算机应用基础复习资料–湖南农业大学.doc
  14. 【6G】基于 Dyncast 的算力网络架构
  15. MCC(移动国家码)和 MNC(移动网络码)
  16. html怎么做小米logo,CSS3:一个标签画LOGO——小米
  17. Vscode开发STM32单片机程序
  18. 全志平台修改CPU频率方法
  19. 基于ARCGIS的VCT扩展模块使用[转自CSDN阿翔]
  20. xcode 程序入口

热门文章

  1. 进阶学习(4.3) JVM 垃圾回收算法
  2. ef 排序string转int_排序算法之基本排序算法
  3. 移动端手机网站建设应注意哪些问题?
  4. 企业建设网站之前需要做好哪些基本了解?
  5. 写出python中的六种数据类型_python 数据类型1
  6. centos 安装搜狗输入法_Ubuntu 20.04 安装搜狗输入法
  7. php json字符串返回false,php – json_encode()返回false
  8. mac cad石材填充图案_CAD超级填充教程
  9. 开发日记-20190817 关键词 Hello Unix
  10. tensorflow 线性回归 iris