【问题标题】:jdbc connection - socket connectionjdbc 连接 - 套接字连接
【发布时间】:2011-08-15 08:00:56
【问题描述】:

几天前,我的网站崩溃并显示此错误:

java.lang.NoClassDefFoundError: 可以 不初始化类 com.omicc.hibernate.util.HibernateUtil

因此,我向托管公司询问了他们可能做出的任何更改。他们解决了这个问题并告诉我使用 JDBC 连接而不是套接字连接。 我在 MySQL 中使用 hibernate 和 c3p0,据我所知他们使用 JDBC 连接。

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

那么你们中有人知道他在说什么吗? :D(是的,他现在没有回答!)

已编辑>>>>

解决了!,这就是我所做的 我将休眠从 3.5.0 升级到 3.6.1 并且新的休眠需要 hibernate-jpa-2.0-api-1.0.0.Final.jar 和 slf4j-simple1.6.1 。 问题解决了。 我认为托管公司更新了他们的 hibernate.jar 并导致了一些参考问题。

【问题讨论】:

  • JDBC 使用 tcp(它位于 tcp 之上)。所以,除非你已经实现了你的 jdbc 堆栈(请说不),那么他们的警告更有可能是对他们自己错误的掩饰。
  • Hibernate 应该一直使用 JDBC。我不知道您的托管公司在说什么。我认为这个包是可疑的,因为那不是 Hibernate 的包结构。更有可能是与已解决的 Hibernate 类发生冲突。
  • 嗯,@duffymo :这就是我告诉他们的,我只是希望他们告诉我出了什么问题,这样我就可以拒绝进一步的崩溃。

标签: java mysql hibernate jdbc


【解决方案1】:

重写您的 HibernateUtil,使其不会在静态块中实例化。而是使用同步的 getInstance 使其成为单例。那么

private static SessionFactory cache;

synchronized SessionFactory getInstance() throws SQLException {

if (cache != null) return cache;

// try/catch and rethrow SQLException
try {
Class.forName("com.mysql.jdbc");
} Exception (e) {
throw new SQLException(e);
}
// Test connection with JDBC
// Create a non connection pooled raw connection, try/finally close it
// throw SQL Exception if it fails
testMe()

// finally create the sessionFactory
.... build your Configuration object
.... then 
try {
SessionFactory me = ....buildSessionFactory
} catch (RuntimeException e) {
throw new SQLException(e);
}
cache = me;
return cache;

}

一些 cmets:有些人会更喜欢未经检查的异常,这很好。 我喜欢做一次原始连接的原因是,在启动时,如果 SQL Server 恰好完成,它往往会减少连接池/休眠。一旦他们成功初始化,我就没有恢复问题。但这是个人喜好问题,您也可以跳过 testMe()。

重点是这样你会看到异常发生,我预测你会清楚地暗示与托管公司的连接:)

【讨论】:

  • 谢谢,我是自发输入的,所以请大家原谅狡猾的语法,等等该托管公司的问题。如果检查时抛出异常不好,则重新抛出未检查但先记录
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 2018-05-01
  • 2011-10-10
  • 2014-03-01
  • 2021-05-02
  • 1970-01-01
  • 2013-09-18
相关资源
最近更新 更多