[ 
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)

Reply via email to