Glassfish和MySQL连接池

时间:2015-05-25 07:25:10

标签: java mysql glassfish

我一直在尝试使用GlassFish创建一个MySQL连接池,但它一直显示此消息:

  

无法分配连接,因为:用户''@ localhost'拒绝访问(使用密码:否)

这是glassfish-resources.xml的连接URL:

<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="table" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="connectionPool" non-transactional-connections="true" ping="true" pool-resize-quantity="2" pooling="true" res-type="javax.sql.ConnectionPoolDataSource" statement-cache-size="0" statement-leak-reclaim="false" statement-leak-timeout-in-seconds="0" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="true">
<property name="URL" value="jdbc:mysql://localhost:3306/testDB"/>
<property name="User" value="root"/>
<property name="Password" value="mypasswordgoeshere"/>

我在发布这个问题之前阅读了很多文章,其中许多人建议编辑 mysql.users 表并为 root 添加密码,但我正在使用该版本MySQL的5.7.7,其中删除了“密码”列。

我也使用NetBeans 8.0.2创建连接池,而GlassFish 4.1,我正在使用JSF2.0和PrimeFaces的Maven项目,服务器已启动并正常运行。

另一个奇怪的事情是Gla​​ssFish已经显示我的项目已经部署,但它说找不到页面。

2 个答案:

答案 0 :(得分:0)

你的glassfish-resources.xml看起来不对。您没有根<jdb-connection-pool>的结束标记,也有一些属性错误,请尝试以下操作:

    <jdbc-connection-pool name="jdbc/test-pool" res-type="javax.sql.DataSource"
    datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
    pool-resize-quantity="1" max-pool-size="5" steady-pool-size="0"
    statement-timeout-in-seconds="60" >
       <property name="serverName" value="localhost" />
       <property name="portNumber" value="3306" />
       <property name="dataBaseName" value="testDB" />
       <property name="User" value="root" />
       <property name="Password" value="mypasswordgoeshere" />
       <property name="connectionAttributes" value=";create=true" />
     </jdbc-connection-pool>
<jdbc-resource jndi-name="testDB" pool-name="jdbc/test-pool" enabled="true" />

在此之后,您可以使用jndi-name使用JNDI lookup来创建java.sql.Connection。

答案 1 :(得分:0)

好, 我通过执行以下步骤解决了部分问题,但我不确定究竟是哪一个做了。

  1. 在此处包含最新的mysql-connector-javaX.X.XX-bin.jar:%glassfishinstallfolder%\ glassfish \ lib
  2. 再次从glassfish&#39;创建资源池。资源中的域管理控制台(localhost:4848 /) - &gt; JDBC - &gt;使用 java.sql.Driver 作为资源类型而不是 Javax.sql.ConnectionPoolDataSource 的JDBC连接池。
  3. 在我创建的连接池中添加了3个其他属性;密码,用户和URL。这些都是关于服务器的,我使用的url是jdbc:mysql:// localhost:3306 / testDB
  4. 在参考资料中创建了一个新的JDBC资源 - &gt; JDBC - &gt; JDBC Resources使用我在上一步中创建的池调用JNDI_testDB。
  5. 添加了标签&lt; JTA数据源&GT; JNDI_testDB&LT; / JTA数据源&GT;和&lt; property name =&#34; eclipselink.target-database&#34; value =&#34; MySQL57&#34; /&gt;到我的 persistence.xml 文件。
  6. 我还有其他问题,我的项目仍然没有显示在localhost:8080 / test中,但是我会留下另一个问题。