首页 文章

将JSF-Application迁移到Weblogic 12

提问于
浏览
3

我们开发了基于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?


Edit 1/2/12 :既然没有答案,也许有点赏金会有帮助吗? ;-)不认真,是否有任何细节我可以提供帮助我的那个?


Edit 1/5/12 :与cj91请求相关 - 项目不是基于Maven的,所以's no POM. But here'是部署描述符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 构建的 jar 列表:

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 jar 是问题的根源,但是从战争中删除它们并没有改变任何东西 .

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


Edit 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中删除了以下jar:

jsf-impl.jar
jsf-api.jar
persistence-api.jar
jta.jar
jstl.jar

在faces-config.xml中更改视图处理程序(由于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"/>

2 回答

  • 1

    请看http://docs.oracle.com/cd/E24329_01/web.1211/e21049/configurejsfandjtsl.htm Headers 为"Deploying JSF 1.2 and JSTL Libraries"的部分

  • 0

    您应该问问自己为什么要在不升级应用程序的情况下升级到更新的容器 . 如果答案是“因为代码库太大”并且您的旧容器工作正常,请不要管它 .

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

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

    • jsf-impl.jar

    • jsf-api.jar

    • persistence-api.jar

    我相当肯定这些也会引起问题:

    • jta.jar

    • jstl.jar

    • jsf-facelets.jar

相关问题