友人は、休止状態の 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;
}
}
助けてください :-/