[ This Blog Was Moved To : http://www.diknows.com ]
Ok, You read this post I assume you face the same problem I faced.
Quick Solution :
If this is your MySQL Connection URL :
Change it to
Understanding the solution :
Recently, I am developing a grails application. I was using the default in memory HSQLDB, as it is wonderful for changing the database design frequently. But, as I felt stability in the project I wanned to move the project to the next level where data get persisted. Hence, I tried to move to MySQL Database by modifying the DataSource.groovy File.
pooled = true
// driverClassName = “org.hsqldb.jdbcDriver”
// username = “sa”
// password = “”
// MySQL Database configurations
driverClassName = “com.mysql.jdbc.Driver”
username = “root”
password = “123456″
And result was a very long exception
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘transactionManager’: Cannot resolve reference to bean ‘sessionFactory’ while setting bean property ‘sessionFactory’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘sessionFactory’: Cannot resolve reference to bean ‘hibernateProperties’ while setting bean property ‘hibernateProperties’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘hibernateProperties’: Cannot resolve reference to bean ‘dialectDetector’ while setting bean property ‘properties’ with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dialectDetector’: Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure
So, I tried to Google on PoolableConnectionFactor .. But Results was either
Change /etc/hosts.allow and check /etc/hosts
Some changes in /etc/my.cnf and grant access to the database user
And they all failed. So I created a new Java Project in NetBeans IDE, added the JDBC Driver Jar file, and wrote the following code:
String dbUrl = “jdbc:mysql://localhost:3306/DB_NAME”;
Class.forName ( “com.mysql.jdbc.Driver” );
Connection connection = DriverManager.getConnection ( dbUrl , “root” , “123456″ );
So, the following single exception appeared :
Dec 5, 2009 9:02:41 AM testmysql.Main main
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
So, I Googled again and I found this post
Which is long, and here is the main point of it :
I’m happy to say that I resolved the issue. I replaced localhost with 127.0.0.1 and it worked perfectly. I’ve also checked what the browser gives as localhost and it’s the IPv6 localhost (to anyone who might be experiencing the same issue that’s 0:0:0:0:0:0:0:1) not the IPv4 one, so that was the problem. Not sure why this machine defaults to IPv6 though.
So, It seams the PC is defaulting to IPv6 not IPv4
and the solution is as I said above
Change the MySQL Connection URL from localhost to 127.0.0.1 (or whatever your localhost IP Address is )
NOTE: you can find you localhost IP Address in /etc/hosts
NOTE: If you use openSuse Linux ( Like I Do ) and you want to disable IPv6, you can do so using
Yast-> Network Manager
Wish you best of luck.
New Updates :
I had another PoolableConnectionFactory exception. This time because I had reinstalled my Linux system, so my databases were gone. I got the following exception
Cannot create PoolableConnectionFactory (Unknown database ‘DB_NAME‘):
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database ‘DB_NAME‘
Because, there was no Database scheme in the mysql database engine. So, to solve this:
- In console window type “mysql -u root -p” if your mysql username is root and you have a password.
- Create new database using “create database DB_NAME”.
- Exit the mysql console as you don’t need it, using “exit” command.
Now, you can restart your grails application and this exception will not show up again.
Wish you best of luck.