【问题标题】:Concurrent connections to Mysql DB from both local user and glassfish从本地用户和 glassfish 到 Mysql DB 的并发连接
【发布时间】:2012-05-31 19:12:09
【问题描述】:

我的 Glassfish Web 应用程序有问题: 我在 glassfish 应用程序上使用持久性提供程序和 EJB facees。 Mysql 连接配置为 JDBC 资源。 问题是当我在本地更新数据库时(使用 mysql promt 或其他客户端),glassfish 服务器仍然“看到”旧值。我意识到 glassfis 服务器和 Msyql DB 之间可能存在某种类型的缓存。我很确定我可以更改一些参数来解决这个问题,但是在搜索了很长一段时间后我似乎找不到它。谁能指导我到有问题的地区? mysql JDBC驱动? web.xml?连接池?

一些技术细节: 数据库:Mysql 5.1 服务器:Glassfish 3.1 服务器正在使用 root 用户名连接到数据库 我在 glassfish 应用程序上使用 EclipseLink 作为持久性提供程序 配置(sun-resources.xml):

<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="auto-commit" 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="mysql_drivingschool_rootPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
    <property name="serverName" value="localhost"/>
    <property name="portNumber" value="3306"/>
    <property name="databaseName" value="drivingschool"/>
    <property name="User" value="*****"/>
    <property name="Password" value="****"/>
    <property name="URL" value="jdbc:mysql://localhost:3306/******"/>
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
</jdbc-connection-pool>

【问题讨论】:

    标签: java mysql jdbc glassfish persistence


    【解决方案1】:

    JPA 使用两层缓存机制。第一级缓存是当前的 PersistenceContext。二级缓存在不同的上下文之间共享。

    您可以控制缓存行为。它取决于您使用的 JPA 实现。由于您使用的是 EclipseLink,请参阅 this introduction。但是,这会降低您的应用程序的性能。

    如果我们需要手动更新数据库,我们会重新启动应用程序(而不是服务器)。如果它在生产状态下更频繁地发生,您应该直接从数据库中获取相关数据。

    【讨论】:

    • 非常感谢!!!!我真的迷失了这个......在你指出正确的地方之后,我立即在持久性 XML 中找到了所需的标签。顺便说一句 - 如果有人需要它,解决方案是将 NONE 放入持久性 XML
    猜你喜欢
    • 2018-11-26
    • 2014-05-19
    • 2017-02-11
    • 2021-06-04
    • 2019-10-16
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多