我正在家中尝试用于PC-MAC的软件,我想将我的测试应用程序与我本地计算机上的MySQL数据库连接。
要完成此任务,我正在遵循Warework提供的在线教程(Customize the Pool Service in the FULL template),因此我将pool-service.xml
文件放在/META-INF/system
目录中以配置c3p0。这是文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<proxy-service xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://repository.warework.com/xsd/proxyservice-1.0.0.xsd">
<clients>
<client name="c3p0-client" connector="com.warework.service.pool.client.connector.C3P0Connector">
<parameter name="driver-class" value="com.mysql.jdbc.Driver" />
<parameter name="jdbc-url" value="jdbc:mysql://localhost/test1" />
<parameter name="connect-on-create" value="true" />
</client>
</clients>
</proxy-service>
问题是log4j总是输出以下错误:
[2012-09-02 15:18:02,613]-[INFO @ system] - WAREWORK connected Client 'default-client' in Service 'log-service'.
[2012-09-02 15:18:02,616]-[INFO @ system] - WAREWORK created Service 'log-service'.
[2012-09-02 15:18:02,616]-[INFO @ system] - WAREWORK created Provider 'collection-provider'.
[2012-09-02 15:18:02,618]-[INFO @ system] - WAREWORK created Provider 'datastore-view-provider'.
[2012-09-02 15:18:02,674]-[INFO @ system] - WAREWORK created Data Store 'rdbms-client' in Service 'datastore-service'.
[2012-09-02 15:18:02,674]-[INFO @ system] - WAREWORK created Service 'datastore-service'.
[2012-09-02 15:18:02,674]-[INFO @ system] - WAREWORK CONFIGURED SCOPE 'system' AND NOW IT'S READY.
[2012-09-02 15:18:04,727]-[INFO @ system] - WAREWORK created Provider 'ddbb-connection-provider'.
[2012-09-02 15:18:04,791]-[INFO @ system] - WAREWORK created Client 'c3p0-client' in Service 'pool-service'.
[2012-09-02 15:18:04,936]-[INFO @ system] - MLog clients using log4j logging.
[2012-09-02 15:18:05,679]-[INFO @ system] - Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]
[2012-09-02 15:18:06,094]-[INFO @ system] - WAREWORK connected Client 'c3p0-client' in Service 'pool-service'.
[2012-09-02 15:18:06,094]-[INFO @ system] - WAREWORK created Service 'pool-service'.
[2012-09-02 15:18:06,272]-[INFO @ system] - Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@ef95dc8 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@107413fc [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge1bm8p11hsa6a1qtkrfw|1bbdd48, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@dafa338 [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 1hge1bm8p11hsa6a1qtkrfw|1e903d5, jdbcUrl -> jdbc:mysql://WW-DEV-SRV2:2803/test1, properties -> {jdbc-url=jdbc:mysql://WW-DEV-SRV2:2803/test1, connect-on-create=true, driver-class=com.mysql.jdbc.Driver} ], preferredTestQuery -> null, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 1hge1bm8p11hsa6a1qtkrfw|7e9ce2, numHelperThreads -> 3 ]
[2012-09-02 15:18:36,893]-[WARN @ system] - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@523df -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.sql.SQLException: Access denied for user ''@'127.0.0.1' (using password: NO)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:377)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:119)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
[2012-09-02 15:18:36,991]-[WARN @ system] - WAREWORK cannot retrieve a database connection from the c3p0 pool 'c3p0-client' in Service 'pool-service' because c3p0 reported the following error:
[2012-09-02 15:18:36,994]-[WARN @ system] - Connections could not be acquired from the underlying database!
[2012-09-02 15:18:36,996]-[WARN @ system] - WAREWORK cannot retrieve the connection for Data Store 'rdbms-client' because Provider 'ddbb-connection-provider' does not returns a 'java.sql.Connection' object for 'c3p0-client' or it is null.
[2012-09-02 15:18:36,996]-[WARN @ system] - WAREWORK cannot open a connection with Client 'rdbms-client' at Service 'datastore-service' because its Connector generated the following error: WAREWORK cannot retrieve the connection for Data Store 'rdbms-client' because Provider 'ddbb-connection-provider' does not returns a 'java.sql.Connection' object for 'c3p0-client' or it is null.
[2012-09-02 15:18:39,861]-[WARN @ system] - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@b914b3 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.sql.SQLException: Access denied for user ''@'127.0.0.1' (using password: NO)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:377)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:119)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
[2012-09-02 15:18:39,882]-[WARN @ system] - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@c22a3b -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.sql.SQLException: Access denied for user ''@'127.0.0.1' (using password: NO)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4113)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1308)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2336)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:377)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:119)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
WAREWORK cannot open a connection with Client 'rdbms-client' at Service 'datastore-service' because its Connector generated the following error: WAREWORK cannot retrieve the connection for Data Store 'rdbms-client' because Provider 'ddbb-connection-provider' does not returns a 'java.sql.Connection' object for 'c3p0-client' or it is null.
at com.warework.core.service.client.AbstractClient.connect(AbstractClient.java:113)
at com.warework.service.datastore.DefaultView.connect(DefaultView.java:106)
at com.warework.service.datastore.AbstractDataStoreView.connect(AbstractDataStoreView.java:72)
at com.chafi.test.Test.main(Test.java:25)
似乎我必须指定用户名+密码。我该如何指定?如果这不是错误,那么,我做错了什么?
答案 0 :(得分:0)
您必须在Pool Service的配置中添加另外两个参数:
<parameter name="user" value="the-user-name" />
<parameter name="password" value="the-password" />
对于那些在连接数据库时遇到问题的人,请记住这一点:
在类路径中添加数据库驱动程序(除了在JAR中捆绑的Warework PC-MAC分发中的H2数据库)。如果可以,请下载并安装最新的驱动程序版本。
在 pool-service.xml 文件中设置“驱动程序类”和“ jdbc-url ”参数。在URL中指定端口以避免意外问题也是一个好主意。
如果需要,请在 pool-service.xml 文件中添加“用户”和“密码”参数。
建议在 pool-service.xml 中将参数“ connect-on-create ”设置为“ true ”文件
使用以下模板连接MySQL数据库:
<?xml version="1.0" encoding="UTF-8"?>
<proxy-service xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://repository.warework.com/xsd/proxyservice-1.0.0.xsd">
<clients>
<client name="c3p0-client" connector="com.warework.service.pool.client.connector.C3P0Connector">
<parameter name="driver-class" value="com.mysql.jdbc.Driver" />
<parameter name="jdbc-url" value="jdbc:mysql://host:port/database-name" />
<parameter name="user" value="the-user-name" />
<parameter name="password" value="the-password" />
<parameter name="connect-on-create" value="true" />
</client>
</clients>
</proxy-service>