重新啓動tomcat服務器後,我得到InvalidObjectException: Could not find a SessionFactory named: null
。Tomcat/Eclipse:在上下文重新加載期間禁用HttpSession序列化
,我發現了一些可能的解決方案:
如果您嘗試序列化斷開Hibernate的Session,並在不同的虛擬機反序列化,就會出現此異常,或者,如果 類加載器重新啓動後,例如,在您的應用程序服務器或Web容器熱重新部署 期間。這在Tomcat中是特別可見的 。在應用程序服務器中,如記錄所示,始終使用JNDI來存儲SessionFactory。在Tomcat或其他Web容器中, 在上下文重新加載期間禁用HttpSession序列化。這有副作用,在Web容器的文檔中有解釋。
我該怎麼辦?在上下文重新加載期間禁用HttpSession序列化?
注意:我在Eclipse中使用Tomcat7。
UPDATE:
我試着啓用context.xml
本文標籤:
<Manager pathname="" />
,是的,異常消失,但我失去了持續會話,所以我必須要重新登錄tomcat服務器重啓後。
如果我相信會話持久性能夠很好地理解,那麼在Tomcat重新啓動之後,應該保留該會話(並且我不能通過登錄創建新的會話)。 JSF應用程序?
UPDATE2(會話管理器):
而且我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) {
...
}
}
}
是的,我已經嘗試過了一個和異常自敗。但會議沒有現在存儲,我必須每次都重新登錄,我重新啓動Tomcat服務器...... – gaffcz
(我更新的問題,請大家看看),如果你不希望關閉會話持久性,那麼你必須修復會話中的對象,也就是說你必須讓它們可序列化(實現java.io.Serializable)(參見[documentation](http://tomcat.apache.org/tomcat-7.0-doc/config/) 。manager.html#Persistence_Across_Restarts)) – Codo
我所有的豆類serializabled :(('實現Serializable ...私有靜態最後的serialVersionUID長= 1升;?') – gaffcz