我看到很多使用hibernate的例子,特别是会话工厂,以编程方式 我用过这个:
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration()
.configure()
.buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
但是在我当前的项目中我需要一些不同的实现,所以我删除了sessionFactory常量的FINAL,并且我实现了一个构造函数,以便在它为null时对其进行初始化。
所以我有一个hibernateUtil abstrac类,只有SYNCHRONIZED方法buildSessionFactory和一个实现类,这个构造函数
public myHibernateUtil(){
if (mySessionFactory == null){
mySessionFactory = buildSessionFactory();
}
}
安全吗?在您看来,通过删除会话工厂的FINAL,可能会遇到会话数问题并使数据源饱和吗?
我提出这个问题是因为我为weblogic收到了一个奇怪的错误:
池myDatasource已暂停,无法为应用程序分配资源..
感谢所有人!
编辑: 进入Server1-diagnostic.log有以下异常:
[2014-05-21T18:46:41.428 + 02:00] [Server_1] [NOTIFICATION] [DFW-40101] [oracle.dfw.incident] [tid:[ACTIVE] .ExecuteThread:队列'12' :'weblogic.kernel.Default(self-tuning)'] [userId:] [ecid:356fce390f623850:-983a53a:1461f7d7cb4:-8000-0000000000000b1e,0]事件已通过事件事实发出信号:[problemKey = BEA- 337 [WebLogicServer] incidentSource = SYSTEM incidentTime = Wed May 21 18:46:41 CEST 2014 errorMessage = BEA-337 executionContextId = 356fce390f623850:-983a53a:1461f7d7cb4:-8000-0000000000000995] [2014-05-21T18:46:42.927 + 02:00] [Server_1] [NOTIFICATION] [DFW-40104] [oracle.dfw.incident] [tid:[ACTIVE] .ExecuteThread:'12'表示队列:'weblogic .kernel.Default(self-tuning)'] [userId:] [ecid:356fce390f623850:-983a53a:1461f7d7cb4:-8000-0000000000000b1e,0] [errid:84] [detailLoc:/ app / oss / bea-domains / osssbdomain / servers / Server_1 / adr / diag / ofm / osssbdomain / Server_1 / incident / incdir_84] [probKey:BEA-337 [WebLogicServer]]使用问题密钥“BEA-337 [WebLogicServer]”创建的事件84
此外,我在server1.log中发现了很多这样的错误:
尝试全部:'1'地址,但无法通过HTTP连接到服务器:'127.0.0.1',port:'7333' 在oracle服务总线和我的应用程序之间的通信中。
谢谢!