【问题标题】:Trying to deploy Oracle-ADF application to Tomcat 7尝试将 Oracle-ADF 应用程序部署到 Tomcat 7
【发布时间】:2014-03-04 22:22:12
【问题描述】:

我正在尝试将 oracle-adf 应用程序部署到 Tomcat 7。我做了很多事情,但最后,我得到了以下异常。有什么建议 ? [使用 jdev studio,版本 11.1.2.4;在没有模型部分(没有数据库交互)的情况下成功运行应用程序]

java.lang.ClassCastException: oracle.adfinternal.controller.faces.context.StubJSFPageLifecycleContext cannot be cast to oracle.adf.controller.faces.context.FacesPageLifecycleContext
    oracle.adfinternal.controller.application.model.UpdateBindingListener.beforePhase(UpdateBindingListener.java:66)
    oracle.adfinternal.controller.lifecycle.ADFLifecycleImpl$PagePhaseListenerWrapper.beforePhase(ADFLifecycleImpl.java:550)
    oracle.adfinternal.controller.lifecycle.LifecycleImpl.internalDispatchBeforeEvent(LifecycleImpl.java:100)
    oracle.adfinternal.controller.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:191)
    oracle.adfinternal.controller.faces.lifecycle.ADFPhaseListener.access$200(ADFPhaseListener.java:23)
    oracle.adfinternal.controller.faces.lifecycle.ADFPhaseListener$PhaseInvokerImpl.startPageLifecycle(ADFPhaseListener.java:232)
    oracle.adfinternal.controller.faces.lifecycle.ADFPhaseListener$1.after(ADFPhaseListener.java:274)
    oracle.adfinternal.controller.faces.lifecycle.ADFPhaseListener.afterPhase(ADFPhaseListener.java:75)
    oracle.adfinternal.controller.faces.lifecycle.ADFLifecyclePhaseListener.afterPhase(ADFLifecyclePhaseListener.java:53)
    oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:447)
    oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:202)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:173)
    oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:125)
    org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:468)
    oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
    org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:468)
    org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:293)
    org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:199)
    org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

【问题讨论】:

    标签: java oracle tomcat tomcat7 oracle-adf


    【解决方案1】:

    虽然 yilmazbahadirs 的答案有效 - 这不是真正的解决方案。于是我进一步搜索,发现了以下Blog:byte bohemian

    结果本质上是 - 您必须通过共享类加载器加载共享的 ADF 库,而不是像旧的 Oracle 博客帖子所说的那样将它们放入 tomcat/lib 文件夹中。我现在终于在 Tomcat8 上启动并运行 ADF - 但也在 6 和 7 上进行了测试,过程如下:

    1. 在您的 tomcat 目录 (CATALINA_BASE) 中创建一个名为 shared-lib 的新文件夹。编辑文件 config/catalina.properties 并搜索带有 shared.loader=... 的行,将其更改为以下内容: shared.loader="${catalina.base}/shared-lib","${catalina.base}/shared-lib/*.jar","${catalina.home}/shared-lib","${catalina.home}/shared-lib/*.jar" 这将告诉 Tomcat 使用单独的类加载器加载这些文件,并在所有共享库都在该文件夹中时解决您的问题。

    2. 下载ADF-essentials ZIP解压到shared-lib(一定要解压!!!所以所有子目录下的所有JAR文件都应该直接放在文件夹里,不带任何子目录)

      李>
    3. 将您的 ADF 应用程序与所有依赖库一起部署为 EAR 文件,并将所有 JAR 文件从 EAR 文件复制到 shared-lib 文件夹。

    4. 检查重复的 JAR - log4j 对我来说总是有两个版本,如果您发现重复,请保留较新的。

    5. 下载 GlassFish Server 并将以下文件从 glassfish/modules 复制到 shared-lib 文件夹中:

      bean-validator.jar javax.mail-1.4.4.jar javax.servlet.jsp.jstl.jar javax.servlet.jsp.jstl-api.jar javax.transaction.jar

    6. ojdbc7.jar 添加到tomcat/lib shared-lib)

    7. 在启动时向 Tomcat 添加以下环境选项(例如在 setenv.sh/setenv.bat 中):CATALINA_OPTS=-Doracle.mds.cache=simple

    8. (可选)如果您希望 @PreDestroy 注释工作而不会引发错误并使用 TomCat 7 或 8,则必须注册一个自定义侦听器,该侦听器将处理这些注释,因为 Oracle 尝试访问PreDestroy 中的会话,而 Tomcat 遵循 stupid 官方标准并在调用 PreDestroy 之前使会话无效: 您必须将以下 JAR 文件(包括源代码)复制到您的 shared-lib 文件夹:adf-predestroy-helper.jar 并将其注册到每个 ADF 应用程序的 WEB_INF/web.xml,如下所示:

    <listener> <listener-class>oracle.adf.PreDestroyHelper</listener-class> </listener>

    PreDestroy 侦听器由我编写并在 CreativeCommons 许可下发布 OpenSource,因此您可以随意使用它,但我会很高兴收到一些反馈。


    供参考 - 这是我的 shared-lib 文件夹的样子(160 个文件):

    adf-businesseditor-model.jar
    adf-businesseditor-objects.jar
    adf-businesseditor-settings.jar
    adf-controller-api.jar
    adf-controller-rt-common.jar
    adf-controller-schema.jar
    adf-controller-security.jar
    adf-controller.jar
    adf-customizationset-ui.jar
    adf-dt-at-rt-wizards.jar
    adf-dt-at-rt.jar
    adf-dynamic-faces.jar
    adf-faces-changemanager-rt.jar
    adf-faces-databinding-dt-core.jar
    adf-faces-databinding-rt.jar
    adf-faces-registration.jar
    adf-faces-templating-dt-core.jar
    adf-faces-templating-dtrt.jar
    adf-loc.jar
    adf-mobile-schema.jar
    adf-pageflow-dtrt.jar
    adf-pageflow-fwk.jar
    adf-pageflow-impl.jar
    adf-pageflow-rc.jar
    adf-predestroy-helper.jar
    adf-richclient-api-11.jar
    adf-richclient-automation-11.jar
    adf-richclient-bootstrap.jar
    adf-richclient-impl-11.jar
    adf-richclient-jmx.jar
    adf-richclient-skin-editor.jar
    adf-richclient-skin-repository.jar
    adf-sec-idm-dc.jar
    adf-share-base.jar
    adf-share-ca.jar
    adf-share-glassfish.jar
    adf-share-security.jar
    adf-share-support.jar
    adf-share-web.jar
    adf-stringeditor-api.jar
    adf-view-databinding-dt-core.jar
    adf-view-unified-databinding-dt-core.jar
    adf.constants.jar
    adfbcsvc-client.jar
    adfbcsvc-registration.jar
    adfbcsvc-share.jar
    adfbcsvc.jar
    adfdt_common.jar
    adflibfilter.jar
    adflibrary.jar
    adflogginghandler.jar
    adfm-debugger.jar
    adfm-sqldc.jar
    adfm.jar
    adfmportlet.jar
    adfmweb.jar
    adfsharembean.jar
    adftags.jar
    adftransactionsdt.jar
    batik-anim.jar
    batik-awt-util.jar
    batik-bridge.jar
    batik-codec.jar
    batik-css.jar
    batik-dom.jar
    batik-ext.jar
    batik-extension.jar
    batik-gui-util.jar
    batik-gvt.jar
    batik-parser.jar
    batik-script.jar
    batik-svg-dom.jar
    batik-svggen.jar
    batik-swing.jar
    batik-transcoder.jar
    batik-util.jar
    batik-xml.jar
    bc4j-mbeans.jar
    bc4jhtml.jar
    bc4jimdomains.jar
    bc4jsyscat.jar
    bean-validator.jar
    bundleresolver.jar
    com.bea.core.apache.commons.collections_1.0.0.0_3-2.jar
    com.oracle.classloader.pcl_12.1.3.jar
    com.oracle.http_client.http_client_12.1.3.jar
    com.oracle.jrf.j2ee.web-common-schemas_12.1.3.jar
    com.oracle.ojsp.globaltldcache_12.1.3.jar
    com.oracle.ojsp.ojsp_12.1.3.jar
    com.oracle.ojsp.web-common_12.1.3.jar
    com.oracle.webservices.fmw.oc4j-ws-support-impl_12.1.3.jar
    commons-el.jar
    datatags.jar
    db-ca.jar
    dms.jar
    dvt-as.jar
    dvt-basemaps.jar
    dvt-databinding-dt-core.jar
    dvt-databindings-mds.jar
    dvt-databindings.jar
    dvt-faces.jar
    dvt-facesbindings.jar
    dvt-jclient-adf.jar
    dvt-jclient.jar
    dvt-shared-js.jar
    dvt-trinidad.jar
    dvt-utils.jar
    facesconfigmodel.jar
    groovy-all-2.1.6.jar
    inspect4.jar
    javamodel-rt.jar
    javatools-nodeps.jar
    javax.mail-1.4.4.jar
    javax.servlet.jsp.jstl-api.jar
    javax.servlet.jsp.jstl.jar
    javax.transaction.jar
    jdev-cm.jar
    jewt4.jar
    jmxdc.jar
    jr_dav.jar
    jrf-api.jar
    jsf-api.jar
    jsf-impl.jar
    jsp-el-api.jar
    mds-dc.jar
    mdsrt.jar
    mobile-repository.jar
    oicons.jar
    ojdbc6dms.jar
    ojdl.jar
    ojdl2.jar
    oracle-el.jar
    oracle.logging-utils_12.1.3.jar
    oracle.xdb_12.1.0.jar
    oraclexsql.jar
    orai18n-mapping.jar
    ordhttp.jar
    ordim.jar
    org.apache.bcel_5.1.jar
    org.apache.commons.beanutils_1.8.3.jar
    org.apache.commons.logging_1.1.1.jar
    org.apache.http.components.httpclient-4.1.2.jar
    org.apache.http.components.httpclient-cache-4.1.2.jar
    org.apache.http.components.httpcore-4.1.2.jar
    org.apache.http.components.httpmime-4.1.2.jar
    prefuse.jar
    rcs-adflib-rt.jar
    rcsrt.jar
    regexp.jar
    resourcebundle.jar
    share.jar
    taglib.jar
    trinidad-api.jar
    trinidad-impl.jar
    velocity-dep-1.4.jar
    weld-integration.jar
    xml-apis-ext.jar
    xmlef.jar
    xmlparserv2_sans_jaxp_services.jar
    xsqlserializers.jar
    

    这是标准的tomcat/lib文件夹(25个文件):

    annotations-api.jar
    catalina-ant.jar
    catalina-ha.jar
    catalina-storeconfig.jar
    catalina-tribes.jar
    catalina.jar
    ecj-4.4.2.jar
    el-api.jar
    jasper-el.jar
    jasper.jar
    jsp-api.jar
    ojdbc7.jar
    servlet-api.jar
    tomcat-api.jar
    tomcat-coyote.jar
    tomcat-dbcp.jar
    tomcat-i18n-es.jar
    tomcat-i18n-fr.jar
    tomcat-i18n-ja.jar
    tomcat-jdbc.jar
    tomcat-jni.jar
    tomcat-util-scan.jar
    tomcat-util.jar
    tomcat-websocket.jar
    websocket-api.jar
    

    【讨论】:

      【解决方案2】:

      完整的 ADF 可能很棘手,您应该尝试使用 Tomcat 的 ADF Essentials - http://technology.amis.nl/2014/01/03/deploy-oracle-adf-essentials-web-application-on-tomcat/

      【讨论】:

        【解决方案3】:

        您似乎需要在 Tomcat7 启动并运行时将其部署到 ADF 应用程序。只有在这种情况下才有效。如果重新启动 tomcat,它会再次开始给出相同的异常。因此,无需重启即可将您的 ADF 应用程序部署到运行 Tomcat7。

        【讨论】:

        • 您可以通过 tomcat-settings 正确的库管理和共享库的单独文件夹来解决此问题!
        猜你喜欢
        • 2023-01-16
        • 2014-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 2013-05-14
        • 2014-06-27
        • 2011-05-10
        相关资源
        最近更新 更多