jdbc connection - socket connection
A few days ago my website crashed and showed me开发者_JAVA百科 this error:
java.lang.NoClassDefFoundError: Could not initialize class com.omicc.hibernate.util.HibernateUtil
So I asked the hosting company about any changes that they may have made. They fixed the problem and told me to use JDBC connections instead of socket connections. I am using hibernate and c3p0 with MySQL and as far as I know they use JDBC connections.
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
So do any of you guys know what he was talking about? :D (and yes he is not answering now!)
EDITED>>>>
Solved!, so here is what i did i upgraded my hibernate from hibernate from 3.5.0 to 3.6.1 and new hibernate required hibernate-jpa-2.0-api-1.0.0.Final.jar and slf4j-simple1.6.1 . and problem solved. i think that the hosting company updated their hibernate.jar and it caused some reference problems.
Rewrite your HibernateUtil so it doesn't instantiate in a static block. Instead make it a singleton with a synchronized getInstance. Then
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;
}
Some comments: some people will prefer an unchecked exception, which is fine. The reason I like doing the raw connection once is that on startup it tends to bollix up connection pool/hibernate less if the SQL Server happens to be done. Once they initialize successfully I've not had recovery issues. But that's a personal taste thing, and you could skip testMe() as well.
Point is this way you will SEE the Exception occurring, and I predict to you it will clearly implicate the connection to the hosting company :)
精彩评论