[ https://issues.apache.org/jira/browse/OPENJPA-2638?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15228391#comment-15228391 ]
Albert Lee commented on OPENJPA-2638: ------------------------------------- Have you tried quoting the value that contains ','. e.g. String connProps = "DriverClassName={0},Url=\"{1}\",Username={2},Password={3}"; > mysql master/slave replication configuration with openjpa DataSource > -------------------------------------------------------------------- > > Key: OPENJPA-2638 > URL: https://issues.apache.org/jira/browse/OPENJPA-2638 > Project: OpenJPA > Issue Type: Bug > Components: jpa > Affects Versions: 2.2.2 > Reporter: abhishek bafna > Attachments: screenshot-1.png > > > 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|https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-master-slave-replication-connection.html] > While the *openjpa.ConnectionProperties* is also comma (,) separated and > mapped to the DataSource instance. [opejpa > JDBC|http://openjpa.apache.org/builds/1.2.3/apache-openjpa/docs/ref_guide_dbsetup.html]. > That is reason, url which reaches to the mysql have only one host. I have > attached a debugging screen shot. > {code} > 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(); > } > {code} > Exception: > {noformat} > 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 > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)