簡體   English   中英

jboss上的struts2應用程序

[英]struts2 application on jboss

這是jboss上部署struts應用程序的延續,但是它與眾不同,以至於我認為它值得一個新的問題。

在另一個問題中,我正在使用struts,但是現在我正在使用struts2。 此處的教程分為struts教程和struts2教程。

我發現的是,我需要將JAVA_HOME設置為指向jdk6,否則struts 2示例將無法工作。 因此,在eclipse中,我向我的JBoss Server視圖中添加了另一個JBoss Server(我正在使用JBoss工具),並使其使用jdk1.6。

我的問題是,這正常嗎? 支撐桿2是否需要jdk6?

[編輯]堆棧跟蹤非常大,我在下面粘貼了它的第一部分:

2009-11-22 05:13:42,625 INFO  [com.opensymphony.xwork2.config.providers.XmlConfigurationProvider] Parsing configuration file [struts.xml]
2009-11-22 05:13:42,890 DEBUG [com.opensymphony.xwork2.util.LocalizedTextUtil] Added default resource bundle 'org/apache/struts2/struts-messages' to default resource bundles = [org/apache/struts2/struts-messages, com/opensymphony/xwork2/xwork-messages]
2009-11-22 05:13:43,093 DEBUG [com.opensymphony.xwork2.config.providers.XmlConfigurationProvider] Loaded [BUILDER] {PackageConfig Name:struts-default namespace: parents:[]}
2009-11-22 05:13:43,203 DEBUG [com.opensymphony.xwork2.validator.DefaultValidatorFactory] Loading validator definitions.
2009-11-22 05:13:43,281 DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] new I18nInterceptor()
2009-11-22 05:13:43,281 DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] new I18nInterceptor()
2009-11-22 05:13:43,296 DEBUG [com.opensymphony.xwork2.interceptor.I18nInterceptor] new I18nInterceptor()
2009-11-22 05:13:43,328 DEBUG [com.opensymphony.xwork2.config.providers.XmlConfigurationProvider] Loaded [BUILDER] {PackageConfig Name:convention-default namespace: parents:[{PackageConfig Name:struts-default namespace: parents:[]}]}
2009-11-22 05:13:43,500 ERROR [STDERR] java.lang.Exception: Could not load invoker/war/WEB-INF/classes/org/jboss/invocation/http/servlet/InvokerServlet$GetCredentialAction.class
2009-11-22 05:13:43,500 ERROR [STDERR]  at com.opensymphony.xwork2.util.finder.ClassFinder.readClassDef(ClassFinder.java:745)
2009-11-22 05:13:43,500 ERROR [STDERR]  at com.opensymphony.xwork2.util.finder.ClassFinder.<init>(ClassFinder.java:148)
2009-11-22 05:13:43,500 ERROR [STDERR]  at org.apache.struts2.convention.PackageBasedActionConfigBuilder.findActions(PackageBasedActionConfigBuilder.java:295)
2009-11-22 05:13:43,500 ERROR [STDERR]  at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:277)
2009-11-22 05:13:43,515 ERROR [STDERR]  at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:52)
2009-11-22 05:13:43,515 ERROR [STDERR]  at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:200)
2009-11-22 05:13:43,515 ERROR [STDERR]  at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
2009-11-22 05:13:43,515 ERROR [STDERR]  at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:360)
2009-11-22 05:13:43,515 ERROR [STDERR]  at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:403)
2009-11-22 05:13:43,515 ERROR [STDERR]  at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69)
2009-11-22 05:13:43,515 ERROR [STDERR]  at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:48)
2009-11-22 05:13:43,515 ERROR [STDERR]  at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
2009-11-22 05:13:43,515 ERROR [STDERR]  at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
2009-11-22 05:13:43,515 ERROR [STDERR]  at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
2009-11-22 05:13:43,515 ERROR [STDERR]  at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3722)

不,Struts 2不需要Java 6,而僅需要Java 5(甚至可以反向移植到Java 1.4,但這是另一回事了)。

就是說,根據您提供的跟蹤,似乎該約定插件正在嘗試與服務器中部署的其他元素( invoker/war/WEB-INF/classes/org/jboss/invocation/http/servlet/InvokerServlet$GetCredentialAction.class您的invoker/war/WEB-INF/classes/org/jboss/invocation/http/servlet/InvokerServlet$GetCredentialAction.class ,它找到了一個它認為是操作的類。 這實際上是Jboss 4.2.3.GA和約定插件2.1.6的一個眾所周知的問題。 在面臨相同問題(使用Weblogic)的線程中引用Chris Vogel:

如果您還沒有弄清楚,我會告訴您我學到的東西。 Struts / XWorks會掃描Action類,並通過掃描類加載器提供的目錄來執行此Action ,而不僅僅是查看JAR文件。 您在堆棧跟蹤中看到的PackageBasedActionConfigBuilder調用了當前線程的上下文類加載器的getResources()方法,該方法返回該類加載器的類路徑中的目錄。 對於WebLogic,該調用實際上返回了WebLogic域的基本目錄。 然后, ClassFinder類掃描從getResources()方法返回的所有目錄getResources()對於WebLogic,該方法包括域的每個目錄),並查找Action類。 如果找到具有超類的類,它將嘗試加載該超類,這是我們實際看到異常的地方。 我想知道JBoss的類加載器是否在做類似的事情。 ClassFinder ,如果找不到該類,則會創建一個異常,然后打印堆棧跟蹤,並且對該異常不執行任何其他操作。 我們將修改ClassFinder類以不打印堆棧跟蹤。

AFAIK,有兩種解決方案:

  • 部署在JBoss 5上,因為它的類加載策略似乎更傳統
  • 如果使用XWork版本2.1.3,則應使用此版本在調試級別記錄異常。

PS:我已經成功復制了您描述的行為(使用JDK 6),我在日志中發現了相同的蹤跡,但這似乎並不能阻止應用程序正常工作(正如我所寫的那樣,XWork的開發人員僅更改了日志記錄)級別2.1.3)。 這也是您觀察到的嗎?

在Struts 2頁面上 ,僅需要Java 5。 我已經有一段時間沒有使用Struts 2了,但是幾年前我在Tomcat + Java 5中使用了Struts 2,並且沒有遇到這個問題。 當您不使用Java 6時會遇到什么異常?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM