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