2

この状況の解決を続けますhibernate。ondを更新sqljdbc4 jarsし、例外が変更されました (以下をご覧ください)。

私は使用しています

  • 休止状態 v4.1.4 FINAL
  • JSF 2.1 (モハラ)
  • 私のすべて@ManagedBeans implements Serializable

豆はOK@ViewScopedなので、 と何らかの関係があります@SessionScoped

私が試したこと:

  • enable <Manager pathname=""/> in context.xml、はい、例外は消えますが、実際には永続的なセッションが失われるため、Tomcat サーバーの再起動後に再度ログインする必要があります。

  • hiberanate.cfg.xml ファイルに変更を加える (例: タグに追加name="java:hibernate/SessionFactory"する<session-factory>) が、成功しない

  • tomcat サーバーを停止SESSIONS.serした後に作成されるファイルで再生します。

    • ser ファイルを開くと、次のようなものが見つかります: .... uuidq ~ xppt $e8906373-f31b-4990-833c-c7680b2a77ce...
    • Tomcatサーバーを再度起動すると、レポートが表示されますCould not find a SessionFactory [uuid=8906373-f31b-4990-833c-c7680b2a77ce,name=null]-なぜですか??? セッションはSESSION.serファイルに存在するようです...

私のセッションマネージャー:

@SessionScoped
@ManagedBean(name="userManager")
public class UserManager implements Serializable {
  private static final long serialVersionUID = 1L;
  private transient HttpSession session;
  private String username;
  private String password;
  private User user;

  public String login() {
    // here is seraching for user in database (based on username and password)

    if (user != null) {
      FacesContext context = FacesContext.getCurrentInstance();
      session = (HttpSession) context.getExternalContext().getSession(true);
      session.setAttribute("id", user.getId());
      session.setAttribute("username", user.getName());
      ...
      return "success";
    } 
  }

  public String logout() {
    user = null;
    FacesContext context = FacesContext.getCurrentInstance();
    session = (HttpSession) context.getExternalContext().getSession(true);
    ...     
    session.invalidate();
    return "success";
  }
  // getters and setters ----------------------------------------------------
}

私のhibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC 
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
 <session-factory>
  <property name="connection.url">jdbc:sqlserver://localhost;databaseName=RXP</property>
  <property name="connection.username">user</property>
  <property name="connection.password">password</property>
  <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
  <property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property>
  <property name="current_session_context_class">thread</property>
  <property name="hibernate.show_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">update</property>

  <mapping class="tables.User"/>

 </session-factory>
</hibernate-configuration>

そして私のセッションファクトリー

public final class DaoSF implements Serializable {
  private static final long serialVersionUID = 1L;

  private static SessionFactory sessionFactory;
  private static ServiceRegistry serviceRegistry;

  public static SessionFactory getSessionFactory() {
    try {
      Configuration configuration = new Configuration();
      configuration.configure("hibernate.cfg.xml");
      serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();        
      sessionFactory = configuration.buildSessionFactory(serviceRegistry);
      return sessionFactory;
    }
    catch (HibernateException he) { 
      ...
    }
  }
}

例外:

30.6.2012 13:29:07 org.apache.catalina.session.StandardManager doLoad
SEVERE: IOException while loading persisted sessions: java.io.InvalidObjectException: Could not find a SessionFactory [uuid=f9c33312-cf7f-4f65-ae5f-44261705c18e,name=null]
java.io.InvalidObjectException: Could not find a SessionFactory [uuid=f9c33312-cf7f-4f65-ae5f-44261705c18e,name=null]
    at org.hibernate.internal.SessionFactoryImpl.locateSessionFactoryOnDeserialization(SessionFactoryImpl.java:2007)
    at org.hibernate.internal.SessionFactoryImpl.deserialize(SessionFactoryImpl.java:2037)
....

hibernate.cfg.xmlこの方法でファイルを編集しようとしました:

<session-factory name="java:hibernate/SessionFactory">

また、報告されたエラーは次のように変更されました。

30.6.2012 13:38:23 org.apache.catalina.session.StandardManager startInternal
SEVERE: Exception loading sessions from persistent storage
java.lang.NullPointerException
    at java.util.concurrent.ConcurrentHashMap.get(Unknown Source)
    at org.hibernate.internal.SessionFactoryRegistry.getSessionFactory(SessionFactoryRegistry.java:140)
    at org.hibernate.internal.SessionFactoryRegistry.getNamedSessionFactory(SessionFactoryRegistry.java:135)
    at org.hibernate.internal.SessionFactoryImpl.locateSessionFactoryOnDeserialization(SessionFactoryImpl.java:2000)
    at org.hibernate.internal.SessionFactoryImpl.deserialize(SessionFactoryImpl.java:2037)
....

このエラー レポートに遭遇したことはありませんか?

4

2 に答える 2

2

もう 1 つの機能は、tomcat/conf/ の下の context.xml を更新することです。詳細は以下のとおりです。

   <Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false"   maxActiveSessions="-1" minIdleSwap="-1" maxIdleSwap="-1" maxIdleBackup="-1">
   <Store className="org.apache.catalina.session.FileStore"/>
   </Manager>
于 2013-01-29T09:05:10.647 に答える
2

SessionSessionFactoryまたはDaoSFのインスタンスをシリアル化する必要はありません。それらは一時的なものであり、ファイルから復元することはできません。そもそも、それらがファイルにシリアル化される場所と理由を理解することをお勧めします。そこを修正する必要があります。

于 2012-07-01T12:57:16.550 に答える