gpt4 book ai didi

jakarta-ee - 将 JSF 应用程序迁移到 Weblogic 12

转载 作者:行者123 更新时间:2023-12-04 16:00:43 25 4
gpt4 key购买 nike

我们开发了一个基于 Seam 2 的 Java EE 5 应用程序,它在 Weblogic 11g 上运行。

现在,我尝试按照与之前的 WLS 相同的步骤将相同的 WAR 文件部署到新的 Weblogic 12c(本地 Windows 7 机器上的 12.1.1.0),包括部署所需的 JSF 1.2 库。

应用程序的部署和启动工作正常,但是当我在浏览器中打开 URL 时,出现 500 错误并且日志文件显示以下异常:

java.lang.UnsupportedOperationException
at javax.faces.application.Application.getResourceHandler(Application.java:287)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:588)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
...

Application类中的操作属于JSF的2.0版本,我不明白为什么容器试图调用它,因为我声明使用JSF 1.2。

有什么想法会导致问题以及如何将现有的 Java EE 5 应用程序简单地迁移到 WLS 12?

编辑 1/2/12 :既然没有答案,也许一点赏金会有所帮助? ;-) 没有认真,我可以提供任何细节来帮助我解决这个问题吗?

编辑 1/5/12 :与 cj91 请求相关 - 该项目不是基于 Maven 的,因此没有 POM。但这里是部署描述符 weblogic.xml:
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
<library-ref>
<library-name>jsf</library-name>
<specification-version>1.2</specification-version>
<implementation-version>1.2</implementation-version>
<exact-match>false</exact-match>
</library-ref>
</weblogic-web-app>

这是 ant 构建所采用的 jars 列表:
commons-digester.jar
jboss-seam-debug.jar
jboss-seam-excel.jar
jboss-seam-ioc.jar
jboss-seam-mail.jar
jboss-seam-pdf.jar
jboss-seam-rss.jar
jboss-seam-ui.jar
jsf-facelets.jar
jxl.jar
richfaces-impl.jar
richfaces-ui.jar
standard.jar
jstl.jar
jsf-api.jar
commons-collections-3.2.1.jar
commons-lang.jar
jboss-seam.jar
persistence-api.jar
jta.jar
jsf-impl.jar

darkX.jar
glassX.jar
laguana.jar

antlr-runtime.jar
commons-beanutils.jar
core.jar
drools-templates.jar
drools-decisiontables.jar
drools-compiler.jar
drools-api.jar
drools-core.jar
janino.jar
jboss-el.jar
jboss-seam-remoting.jar
jbpm-jpdl.jar
mvel2.jar
richfaces-api.jar

spiffy-with_source-all-0.05.jar
SuperCSV-1.52.jar

commons-logging.jar
dom4j.jar
javassist.jar
cglib.jar
antlr.jar
slf4j-api.jar
slf4j-log4j12.jar
hibernate-core.jar
hibernate-search.jar
hibernate-commons-annotations.jar
hibernate-annotations.jar
hibernate-entitymanager.jar
hibernate-validator.jar
jboss-common-core.jar
concurrent.jar
lucene-core.jar
gwt-servlet.jar

我确信其中的 jar 比需要的多,但这是它当前在 WebLogic 10.3.5 上运行的设置。

我怀疑 jsf 和 jSTL jars 是问题的根源,但从 war 中删除它们并没有改变任何东西。

问题仍然是 - 为什么 WLS 12 尝试从 JSF 2.0 执行某些内容?

编辑 1/6/12 :我设法解决了最初的问题 - 应用程序仍然没有正常运行(这对我来说仍然很奇怪,因为我没想到在更新到新版本时必须更改以前运行的应用程序中的许多内容WLS),但我在这里宣布此案已解决。

对于那些感兴趣的人,我做到了 - 感谢答案的帮助和一些谷歌搜索:

将 weblogic.xml 更改为:
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd">
<container-descriptor>
<prefer-web-inf-classes>false</prefer-web-inf-classes>
</container-descriptor>
<library-ref>
<library-name>jsf</library-name>
<specification-version>1.2</specification-version>
<implementation-version>1.2.9.0</implementation-version>
<exact-match>true</exact-match>
</library-ref>
</weblogic-web-app>

从 WEB-INF/lib 中删除了以下 jars:
jsf-impl.jar
jsf-api.jar
persistence-api.jar
jta.jar
jstl.jar

在 faces-config.xml 中将 View 处理程序更改为(由于 IllegalStateException,请参阅 here ):
<view-handler>org.ajax4jsf.application.AjaxViewHandler</view-handler>

在persistence.xml 中将查询工厂类更改为(由于ClassNotFoundException:org.hibernate.hql.ast.HqlToken,参见 here)
<property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/>

最佳答案

您应该问问自己为什么要升级到更新的容器而不升级您的应用程序。如果答案是“因为代码库太大”并且您的旧容器运行良好,请不要管它。

但是,有两个可能的错误:
1) 您的 web-inf/lib 中是否嵌入了任何 jsf api jars?
2) 你确定你已经正确设置了 1.2 支持吗?如果您正在加载 jsf2.0 类,您可能需要使用一个特殊的类加载器,它首先读取 1.2 jar。

编辑:
至少,这些 jar 应该由您的容器提供,并且不应包含在您的 WEB-INF/lib 中:

  • jsf-impl.jar
  • jsf-api.jar
  • 持久化api.jar

  • 我相当肯定这些也会引起问题:
  • jta.jar
  • jSTL.jar
  • jsf-facelets.jar
  • 关于jakarta-ee - 将 JSF 应用程序迁移到 Weblogic 12,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8574399/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com