0

友人は、休止状態の orm を介して openshift で私のアプリケーションを接続しようとしています。しかし、展開は失敗しています。サーバー ログでエラー メッセージを確認できます。

    2013/01/03 14:02:59,296 ERROR [com.wavetech_st.util.HibernateUtil] (MSC サービス スレッド 1-4) SessionFactory の失敗: org.hibernate.HibernateException: hibernate.cfg.xml が見つかりません
    2013/01/03 14:02:59,298 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/testehome]] (MSC サービス スレッド 1-4) 例外開始フィルターconexaoFilter: java.lang.ExceptionInInitializerError
            com.wavetech_st.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:26) [クラス:]
            com.wavetech_st.util.HibernateUtil.(HibernateUtil.java:12) [クラス:]
            com.wavetech_st.web.filter.ConexaoHibernateFilter.init (ConexaoHibernateFilter.java:31) で [クラス:]
            org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:447) [jbossweb-7.0.10.Final.jar:] で
            org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3269) [jbossweb-7.0.10.Final.jar:] で
            org.apache.catalina.core.StandardContext.start(StandardContext.java:3865) [jbossweb-7.0.10.Final.jar:] で
            org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.0.Final.jar:7.1.0.Final] で
            org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) で
            org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) で
            java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_09-icedtea] で
            java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_09-icedtea] で
            java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_09-icedtea] で
    原因: org.hibernate.HibernateException: resources/hibernate.cfg.xml が見つかりません
            org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173) [hibernate-core-4.1.1.Final.jar:4.1.1.Final] で
            org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1943) [hibernate-core-4.1.1.Final.jar:4.1.1.Final] で
            org.hibernate.cfg.Configuration.configure(Configuration.java:1924) [hibernate-core-4.1.1.Final.jar:4.1.1.Final] で
            com.wavetech_st.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:19) [クラス:]
            ... 11以上

このアプリケーションを Eclipse で作成しています。ローカル サーバー JBoss 7.1 でテストしたところ、動作しました。ただし、リモートで試すとエラーが発生します。OpenShift にデプロイする前に、ファイル hibernate.cfg をデータソースに設定します。

<property name="connection.datasource">java:jboss/datasources/MysqlDS</property>

これは私のディレクトリ構造です:

ここに画像の説明を入力

これは私の WebFilter です:

    パッケージ com.wavetech_st.web.filter;
    import java.io.IOException;
    import javax.servlet.*;
    org.hibernate.SessionFactory をインポートします。
    com.wavetech_st.util.HibernateUtil をインポートします。


    public class ConexaoHibernateFilter は Filter {

        プライベート SessionFactory sf;

        @オーバーライド
        public void init(FilterConfig config) throws ServletException {// executado quando o aplicativo web e colocado no ar

            this.sf = HibernateUtil.getSessionFactory();

        }

        @オーバーライド
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {

            試す {

                this.sf.getCurrentSession().beginTransaction();
                chain.doFilter(servletRequest, servletResponse);
                this.sf.getCurrentSession().getTransaction().commit();
                this.sf.getCurrentSession().close();

            } キャッチ (スロー可能な例) {

                試す {

                    if(this.sf.getCurrentSession().getTransaction().isActive())
                        this.sf.getCurrentSession().getTransaction().rollback();

                } キャッチ (スロー可能な t) {

                    t.printStackTrace();

                }

                新しい ServletException(ex) をスローします。

            }
        }

        @オーバーライド
        public void destroy() {}
    }

    
This is my HibernateUtil:

<pre>

package com.wavetech_st.util;
import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {

    static final Logger logger = Logger.getLogger(HibernateUtil.class);
    private static final SessionFactory sessionFactory  = buildSessionFactory();
    private static ServiceRegistry      serviceRegistry;

    private static SessionFactory buildSessionFactory() {

        try {

            Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
            serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();

            return cfg.buildSessionFactory(serviceRegistry);
        } catch (Throwable e) {

            logger.error("Falha na criação do objeto SessionFactory: " + e);
            throw new ExceptionInInitializerError(e);

        }
    }

    public static SessionFactory getSessionFactory() {

        return sessionFactory;
    }
}

助けてください :-/

4

2 に答える 2

1

私はこれらの人たちのヒントに従って問題を解決しました:

stackoverflow.com/questions/4934330/org-hibernate-hibernateexception-hibernate-cfg-xml-not-found shaunabram.com/tag/hibernate/

私の問題は、hibernate.cfg.xml ファイルを間違った場所に置くことでした。Maven の使用方法 ルート ディレクトリではなく、ルート リソースの src ディレクトリに配置する必要があります。

于 2013-01-04T16:12:47.680 に答える