1

我正在家里试用适用于 PC-MAC 的 Warework,我想将我的测试应用程序与本地机器上的 MySQL 数据库连接起来。

为了完成这个任务,我遵循了 Warework 提供的在线教程(在 FULL 模板中自定义池服务),所以我将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)

看来我必须指定用户+密码。我该如何指定?如果这不是错误,那么,我做错了什么?

4

1 回答 1

0

您必须在池服务的配置中添加另外两个参数:

   <parameter name="user" value="the-user-name" />
   <parameter name="password" value="the-password" />

对于那些在连接数据库时遇到问题的人,请记住这一点:

  1. Add the database driver in your classpath (except for the H2 Database in a Warework PC-MAC Distribution as it's bundled in the JAR). If you can, download and install the lastest driver version.

  2. Setup "driver-class" and "jdbc-url" parameters in the pool-service.xml file. It's also a good idea to specify the port in the URL to avoid undesired problems.

  3. If required, add "user" and "password" parameters in the pool-service.xml file.

  4. It's recommended to set parameter "connect-on-create" to "true" in the pool-service.xml file.

Use the following template to connect with MySQL databases:

<?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>
于 2012-09-03T12:02:01.093 回答