Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-2638

mysql master/slave replication configuration with openjpa DataSource

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.2.2
    • Fix Version/s: None
    • Component/s: jpa
    • Labels:
      None

      Description

      Here is the setup/code I am using to connect with mysql in replication mode, using openjpa datasource. How do I solve this problem.

      mysql expects the master/slave hosts in a comma (,) separated format. Configuring Master/Slave Replication

      While the openjpa.ConnectionProperties is also comma (,) separated and mapped to the DataSource instance. opejpa JDBC.

      That is reason, url which reaches to the mysql have only one host. I have attached a debugging screen shot.

          String driver ="com.mysql.jdbc.ReplicationDriver";
          String url = "jdbc:mysql:replication://master:3306,slave:3306/db";
          String user = "abc";
          String password = "123";
          String connProps = "DriverClassName={0},Url={1},Username={2},Password={3}";
      
          public void method() {
              connProps = MessageFormat.format(connProps, driver, url, user, password);
              Properties props = new Properties();
              props.setProperty("openjpa.ConnectionProperties", connProps);
              props.setProperty("openjpa.ConnectionDriverName", "org.apache.commons.dbcp.BasicDataSource");
              EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysql", props);
              EntityManager manager = factory.createEntityManager();
          }
      

      Exception:

      Exception in thread "main" <openjpa-2.4.1-r422266:1730418 fatal general error> org.apache.openjpa.persistence.PersistenceException: Cannot create PoolableConnectionFactory (Must specify at least one slave host to connect to for master/slave replication load-balancing functionality)
      	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:106)
      	at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:603)
      	at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1520)
      	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:533)
      	at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:458)
      	at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:121)
      	at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68)
      	at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
      	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:967)
      	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:958)
      	at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:642)
      	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:202)
      	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:154)
      	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:226)
      	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:153)
      	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:59)
      	at ExampleJPA.method(ExampleJPA.java:22)
      	at ExampleJPA.main(ExampleJPA.java:27)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:606)
      	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
      Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Must specify at least one slave host to connect to for master/slave replication load-balancing functionality)
      	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
      	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
      	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
      	at org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:110)
      	at org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:86)
      	at org.apache.openjpa.jdbc.sql.DBDictionaryFactory.newDBDictionary(DBDictionaryFactory.java:90)
      	... 22 more
      Caused by: java.sql.SQLException: Must specify at least one slave host to connect to for master/slave replication load-balancing functionality
      	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
      	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
      	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
      	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
      	at com.mysql.jdbc.NonRegisteringDriver.connectReplicationConnection(NonRegisteringDriver.java:414)
      	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:313)
      	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
      	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
      	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
      	at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
      	... 27 more
      

        Attachments

        1. screenshot-1.png
          809 kB
          Abhishek Bafna

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              abhishekbafna Abhishek Bafna
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: