I've digged a bit deeper, and I've got it working by explicitly loading the
MySQL JDBC driver with the following code change in TransactionLegacy.java :

    static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new CloudRuntimeException("Failed to load MySQL JDBC
driver", e);
        }

        // Initialize with assumed db.properties file
        initDataSource(DbProperties.getDbProperties());
    }

This is the old way of doing it (< JDBC 4.0)
I know that from that version onwards that these drivers are loaded
automatically, so I thought that our mysql-connector was outdated.
I've replaced it with the latest, but without success. The issue is still
there.

I've got 2 solutions, but either way, it should work with the current
master ACS without changing stuff manually.
* This code change
* Changing the /etc/sysconfig/cloudstack-management file again, so that
CLASSPATH contains the mysql-connector-java.jar again

Any help / suggestions / ideas are much appreciated.

Kind regards,
Nick Livens


On Wed, May 18, 2016 at 4:43 PM, Nick LIVENS <nick.liv...@nuagenetworks.net>
wrote:

> Java :
> [root@csc-1 ~]# java -version
> java version "1.7.0_85"
> OpenJDK Runtime Environment (rhel-2.6.1.2.el7_1-x86_64 u85-b01)
> OpenJDK 64-Bit Server VM (build 24.85-b03, mixed mode)
>
>
> Tomcat :
> [root@csc-1 ~]# tomcat version
> Server version: Apache Tomcat/7.0.54
> Server built:   Mar 24 2015 07:49:05
> Server number:  7.0.54.0
> OS Name:        Linux
> OS Version:     3.10.0-229.7.2.el7.x86_64
>
>
> Environment :
> [root@csc-1 ~]# cat /etc/*-release
> NAME="Red Hat Enterprise Linux Server"
> VERSION="7.1 (Maipo)"
> ID="rhel"
> ID_LIKE="fedora"
> VERSION_ID="7.1"
> PRETTY_NAME="Red Hat Enterprise Linux Server 7.1 (Maipo)"
> ANSI_COLOR="0;31"
> CPE_NAME="cpe:/o:redhat:enterprise_linux:7.1:GA:server"
> HOME_URL="https://www.redhat.com/";
> BUG_REPORT_URL="https://bugzilla.redhat.com/";
> REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
> REDHAT_BUGZILLA_PRODUCT_VERSION=7.1
> REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
> REDHAT_SUPPORT_PRODUCT_VERSION="7.1"
> Red Hat Enterprise Linux Server release 7.1 (Maipo)
> Red Hat Enterprise Linux Server release 7.1 (Maipo)
>
> [root@csc-1 ~]# cat /proc/version
> Linux version 3.10.0-229.7.2.el7.x86_64 (
> mockbu...@x86-030.build.eng.bos.redhat.com) (gcc version 4.8.3 20140911
> (Red Hat 4.8.3-9) (GCC) )
>
>
> If you need any more information, feel free to ask. But as a stated
> before, the mysql-connector-java.jar is loaded
> [root@csc-1 ~]# lsof -p 14058 | grep mysql
> java    14058 cloud  mem    REG              253,1    883899 134860304
> /usr/share/java/mysql-connector-java.jar
> java    14058 cloud   38r   REG              253,1    883899 134860304
> /usr/share/java/mysql-connector-java.jar
>
> Kind regards,
> Nick Livens
>
> On Wed, May 18, 2016 at 4:17 PM, Simon Weller <swel...@ena.com> wrote:
>
>> It prevented /usr/share/cloudstack-mysql-ha/lib/*.jar from loaded. They
>> need to be loaded together it seems and pulling the ha jar into the
>> classpath doesn't work either.
>>
>> So this change functions for all the folks that have tested it thus far
>> and passed CI, so I wonder why your environment is having problem with it.
>>
>> Can you give a bit of a run down on your build environment you're testing
>> this on?
>>
>> ________________________________________
>> From: Nick LIVENS <nick.liv...@nuagenetworks.net>
>> Sent: Wednesday, May 18, 2016 9:06 AM
>> To: dev@cloudstack.apache.org
>> Subject: Re: MySQL : No suitable driver found for jdbc:mysql
>>
>> Simon,
>>
>> If I look at the changes of the commit I've mentioned, I can only see a
>> change for /usr/share/cloudstack-mysql-ha/lib/*.jar (*jar -> *.jar)
>> The mysql-connector-java was already part of it.
>>
>> This is the entry in our catalina.properties :
>>
>> common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,/usr/share/java/mysql-connector-java.jar,/usr/share/cloudstack-mysql-ha/lib/*.jar
>>
>> So that's exactly the same. I've narrowed it down to this exact commit, so
>> that's why I mentioned it.
>>
>> Any idea why the removal of the mysql-connector-java in the CLASSPATH
>> might
>> break it?
>>
>> Kind regards,
>> Nick Livens
>>
>> On Wed, May 18, 2016 at 3:54 PM, Simon Weller <swel...@ena.com> wrote:
>>
>> > Nick,
>> >
>> > mysql-connector-java.jar  was moved into the tomcat common.loader in
>> > /etc/cloudstack/management/catalina.properties:
>> >
>> >
>> >
>> common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,/usr/share/java/mysql-connector-java.jar,/usr/share/cloudstack-mysql-ha/lib/*.jar
>> >
>> > This was done to fix a bug where the mysql-ha feature was broken.
>> >
>> > Does your common.loader  look similar to the above?
>> >
>> > - Si
>> >
>> >
>> >
>> >
>> >
>> > ________________________________________
>> > From: Nick LIVENS <nick.liv...@nuagenetworks.net>
>> > Sent: Wednesday, May 18, 2016 5:49 AM
>> > To: dev@cloudstack.apache.org
>> > Subject: Re: MySQL : No suitable driver found for jdbc:mysql
>> >
>> > Hey all,
>> >
>> > So I've figured it out what's causing the issue, in
>> > commit c22659d76d73f00f41c13776c490e17a50aacd20, there has been a
>> change in
>> > the classpath in cloud-management.sysconfig
>> > The change removes the mysql-connector-java.jar from the classpath.
>> >
>> > Before :
>> >
>> >
>> CLASSPATH=/etc/cloudstack/management:/usr/share/cloudstack-common:/usr/share/cloudstack-management/setup:/usr/share/java/mysql-connector-java.jar
>> >
>> > After :
>> >
>> >
>> CLASSPATH=/etc/cloudstack/management:/usr/share/cloudstack-common:/usr/share/cloudstack-management/setup
>> >
>> > Commit comment :  Addresses CLOUDSTACK-9300 where the MySQL HA
>> > StaticStrategy class fails to load successfully
>> >
>> > Does anyone have an idea why the mysql-connector-java.jar was removed
>> from
>> > the classpath?
>> >
>> > Thanks in advance!
>> >
>> > On Wed, May 18, 2016 at 8:40 AM, Paul Angus <paul.an...@shapeblue.com>
>> > wrote:
>> >
>> > > Thanks Rohit,
>> > >
>> > > I see what you're saying.
>> > > The conversation was actually based on your statement 'Nick, install
>> > > libmysql-java or equivalent pkg' to which I asked why a user would
>> have
>> > to
>> > > install an apparently additional component (Nick had already said that
>> > > mysql-connector-java.jar was loaded).
>> > >
>> > > The conversation then spiralled out of control.
>> > >
>> > > Kind regards,
>> > >
>> > > Paul Angus
>> > >
>> > > paul.an...@shapeblue.com
>> > > www.shapeblue.com
>> > > 53 Chandos Place, Covent Garden, London  WC2N 4HSUK
>> > > @shapeblue
>> > >
>> > >
>> > >
>> > > -----Original Message-----
>> > > From: Rohit Yadav [mailto:rohit.ya...@shapeblue.com]
>> > > Sent: 18 May 2016 03:51
>> > > To: dev@cloudstack.apache.org
>> > > Cc: dev@cloudstack.apache.org
>> > > Subject: Re: MySQL : No suitable driver found for jdbc:mysql
>> > >
>> > > Paul,
>> > >
>> > >
>> > > rohit.ya...@shapeblue.com
>> > > www.shapeblue.com
>> > > 53 Chandos Place, Covent Garden, London  WC2N 4HSUK @shapeblue
>> > >
>> > >
>> > > On May 17 2016, at 11:33 pm, Paul Angus <paul.an...@shapeblue.com>
>> > wrote:
>> > >
>> > > @Rohit,
>> > >
>> > > On CentOS 7 I get
>> > >
>> > > [root@localhost ~]# yum install libmysql-java
>> > >
>> > > This is incorrect, perhaps you did not read my email:
>> > > "The mysql-connector-java (on centos) or libmysql-java (on debian)
>> > package
>> > > provides the jar dependency that understands jdbc and is necessary for
>> > > CloudStack to communicate with MySQL, execute operations etc."
>> > >
>> > > The libmysql-java is the package name on debian/ubuntu, I said
>> > > libmysql-java or 'equivalent' as I don't know what environment Nick
>> was
>> > > running. On CentOS, the same package that provides the mysql-java
>> > > client/jar dependency is called 'mysql-connector-java'.
>> > >
>> > > The hullabulla raised around packaging dependency, is a non-issue.
>> > >
>> > > Based on what Nick has shared, his environment has oracle-java and not
>> > > openjdk -- it is likely a case of missing classpath, JAVA_HOME and
>> java
>> > jdk
>> > > directory path issue in the initd/systemd script.
>> > >
>> > > Regards.
>> > >
>> > >
>> > > Loaded plugins: fastestmirror
>> > > base | 3.6 kB 00:00:00
>> > > epel/x86_64/metalink | 25 kB 00:00:00
>> > > epel | 4.3 kB 00:00:00
>> > > extras | 3.4 kB 00:00:00
>> > > updates | 3.4 kB 00:00:00
>> > > (1/3): epel/x86_64/group_gz | 170 kB 00:00:00
>> > > (2/3): epel/x86_64/updateinfo | 555 kB 00:00:00
>> > > (3/3): epel/x86_64/primary_db | 4.1 MB 00:00:00
>> > > Loading mirror speeds from cached hostfile
>> > >  * base: mirrors.clouvider.net
>> > >  * epel: epel.mirrors.ovh.net
>> > >  * extras: centos.serverspace.co.uk
>> > >  * updates: mirror.as29550.net
>> > > No package libmysql-java available.
>> > > Error: Nothing to do
>> > > [root@localhost ~]#
>> > >
>> > > Kind regards,
>> > >
>> > > Paul Angus
>> > >
>> > > paul.an...@shapeblue.com
>> > > www.shapeblue.com
>> > > 53 Chandos Place, Covent Garden, London WC2N 4HSUK
>> > > @shapeblue
>> > >
>> > > -----Original Message-----
>> > > From: Rohit Yadav [mailto:rohit.ya...@shapeblue.com]
>> > > Sent: 17 May 2016 18:15
>> > > To: dev@cloudstack.apache.org
>> > > Subject: Re: MySQL : No suitable driver found for jdbc:mysql
>> > >
>> > > Nick, assuming it's a CentOS environment can you run
>> > > cloudstack-setup-databases (again), make sure that database IP and
>> > cluster
>> > > node IP parameters in db.properties are correct, and finally check
>> that
>> > the
>> > > jar is in the classpath in the initd/systemd script (check JAVA_HOME,
>> jdk
>> > > dirs etc.). Also watchout for errors in the logs.
>> > >
>> > > Oracle-java is not available from default repositories, in that case
>> you
>> > > may need to fix JAVA_HOME and jdk paths in initd scripts.
>> > >
>> > > Regards.
>> > > ________________________________________
>> > > From: Nick LIVENS <nick.liv...@nuagenetworks.net>
>> > > Sent: 17 May 2016 18:34:38
>> > > To: dev@cloudstack.apache.org
>> > > Subject: MySQL : No suitable driver found for jdbc:mysql
>> > >
>> > > Hi all,
>> > >
>> > > I'm facing the following issue when installing ACS 4.9.0 (current
>> > master).
>> > > java.sql.SQLException: No suitable driver found for
>> > >
>> >
>> jdbc:mysql://localhost:3306/cloud?autoReconnect=true&prepStmtCacheSize=517&cachePrepStmts=true
>> > >         at
>> java.sql.DriverManager.getConnection(DriverManager.java:596)
>> > >         at
>> java.sql.DriverManager.getConnection(DriverManager.java:215)
>> > >         at
>> > >
>> > >
>> >
>> org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:75)
>> > >         at
>> > >
>> > >
>> >
>> org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
>> > >         at
>> > >
>> > >
>> >
>> org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1188)
>> > >         at
>> > >
>> > >
>> >
>> org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
>> > >         at
>> > >
>> > >
>> >
>> com.cloud.utils.db.TransactionLegacy.getStandaloneConnectionWithException(TransactionLegacy.java:202)
>> > >         at
>> com.cloud.utils.db.Merovingian2.<init>(Merovingian2.java:68)
>> > >         at
>> > > com.cloud.utils.db.Merovingian2.createLockMaster(Merovingian2.java:88)
>> > >
>> > > First, I thought that the mysql-connector-java.jar was not loaded /
>> > > installed correctly. But this jar is loaded :
>> > > [root@csc-1 java]# lsof -p 14064 | grep jar | grep mysql
>> > > java 14064 cloud mem REG 253,1 883899 134860304
>> > > /usr/share/java/mysql-connector-java.jar
>> > > java 14064 cloud 38r REG 253,1 883899 134860304
>> > > /usr/share/java/mysql-connector-java.jar
>> > >
>> > > Tomcat specifics :
>> > > [root@csc-1 java]# tomcat version
>> > > Server version: Apache Tomcat/7.0.54
>> > > Server built: Mar 24 2015 07:49:05
>> > > Server number: 7.0.54.0
>> > > OS Name: Linux
>> > > OS Version: 3.10.0-229.7.2.el7.x86_64
>> > > Architecture: amd64
>> > > JVM Version: 1.7.0_85-mockbuild_2015_07_11_12_24-b00
>> > > JVM Vendor: Oracle Corporation
>> > >
>> > > Does anyone have an idea why I might be facing this issue?
>> > >
>> > > Thanks!
>> > >
>> > > Kind regards,
>> > > Nick Livens
>> > >
>> > > rohit.ya...@shapeblue.com
>> > > www.shapeblue.com
>> > > 53 Chandos Place, Covent Garden, London WC2N 4HSUK @shapeblue
>> > >
>> >
>>
>
>

Reply via email to