2017-05-19 8 views
0

私は、Hibernate JPAで設定されたC3P0接続プールで、persistence.xmlで奇妙なケースがあります。C3P0プールが間違ったMySQLサーバに接続する

これは私のpersistence.xmlです:アプリのJARパッケージを構築した後

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="public_db" transaction-type="RESOURCE_LOCAL"> 

     <description>MySQL Persistence Unit</description> 
     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 

     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://AAA.BBB.CCC.DDD:3306/public_db" /> 
      <property name="javax.persistence.jdbc.user" value="USERNAME" /> 
      <property name="javax.persistence.jdbc.password" value="SECRET" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 

      <property name="hibernate.hbm2ddl.auto" value="update" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.transaction.flush_before_completion" value="false" /> 

      <property name="hibernate.connection.provider_class" 
         value="org.hibernate.connection.C3P0ConnectionProvider" /> 
      <property name="hibernate.c3p0.min_size" value="5" /> 
      <property name="hibernate.c3p0.max_size" value="50" /> 
      <property name="hibernate.c3p0.timeout" value="500" /> 
      <property name="hibernate.c3p0.max_statements" value="50" /> 
      <property name="hibernate.c3p0.idle_test_period" value="2000" /> 
     </properties> 
    </persistence-unit> 

<persistence> 

私はローカルマシン上で実行した場合、それは動作しますが、それはAAA.BBB.CCC.DDDでMySQLサーバに接続することができます。

私は、リモートサーバー上のJARアプリを実行する場合は、私はエラーを取得:

[2017-05-19 11:11:02,509 +0700] [DEBUG] [c.m.v.r.BasicResourcePool] An exception occurred while acquiring a poolable resource. Will retry. 
    java.sql.SQLException: Access denied for user 'USRENAME'@'AAA.BBB.CCC.EEE' (using password: YES) 
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964) 
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970) 
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906) 
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:873) 
      at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1710) 
      at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226) 
      at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253) 
      at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284) 
      at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083) 
      at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806) 
      at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
      at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410) 
      at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328) 
      at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175) 
      at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220) 
      at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206) 
      at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203) 
      at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) 
      at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) 
      at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44) 
      at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870) 
      at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696) 

私はAAA.BBB.CCC.DDDでサーバーを構成しますがC3P0データソースは、MySQLサーバに接続しようとしている奇妙なことリモートホストではAAA.BBB.CCC.EEEです。

私はlocalhostまたはAAA.BBB.CCC.EEEでコード内の任意の場所を設定しません。

これを経験したことがありますか?

答えて

0

これはしばらくの間、ネットワークとDB構成の問題のように見えます。リモートホスト上で実行されているDBアカウントには、DBサーバーへのアクセス権がありません。 許可を修正するだけで動作します!

この問題の奇妙なことは、C3P0でDB接続のタイムアウトが発生した場合、現在のマシン上でプーリングするためにDB IPアドレスのエラーメッセージが問題を解明するのが非常に難しいことです。

関連する問題