gpt4 book ai didi

java - Glassfish 3.1.2 和 Java EE + Hibernate 的性能非常低

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:31 26 4
gpt4 key购买 nike

我在 Glassfish 3.1.2 上遇到了性能非常低的 Java EE(EJB + JSF)应用程序和 Hibernate(3.6.8.Final 和 4.1.7.Final)。发送大约 300 个选择查询大约需要 20 秒。这是 Not Acceptable 。

我在 JBoss 和 TomEE 上部署了完全相同的应用程序。在那里,相同的 300 个选择查询大约需要 1.5 秒。

我在谷歌中找到了一些答案,可能 hibernate.show_sqltruehibernate.hbm2ddl 使应用程序太慢了。但事实并非如此。我关闭了 hibernate.show_sql 但没关系。此外,这些选项在 JBoss 和 TomEE 版本中都是正确的,而且它的运行速度快了 10 倍以上!我认为这是 Glasfish 和 Hibernate 之间的问题。但是我有下一个具有相同业务逻辑的应用程序,具有 Hibernate 提供的 EntityManager 的相同 DAO,但使用 Spring 配置。而且性能很棒。这很奇怪,不是吗?

persistence.xml 来自缺陷版本:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

<persistence-unit name="jee_project" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/PostgreSQL</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="false"/>
<property name="current_session_context_class" value="thread"/>
</properties>
</persistence-unit>

</persistence>

Glassfish JDBC 配置

<jdbc-connection-pool driver-classname="" datasource-classname="org.postgresql.ds.PGConnectionPoolDataSource" res-type="javax.sql.ConnectionPoolDataSource" description="" name="PostgreSQLPool">
<property name="User" value="postgresql"></property>
<property name="DatabaseName" value="qazxsw"></property>
<property name="LogLevel" value="0"></property>
<property name="Password" value="1234"></property>
<property name="ServerName" value="localhost"></property>
<property name="Ssl" value="false"></property>
<property name="ProtocolVersion" value="0"></property>
<property name="TcpKeepAlive" value="false"></property>
<property name="SocketTimeout" value="0"></property>
<property name="PortNumber" value="5432"></property>
<property name="LoginTimeout" value="0"></property>
<property name="UnknownLength" value="2147483647"></property>
<property name="PrepareThreshold" value="5"></property>
</jdbc-connection-pool>
<jdbc-resource pool-name="PostgreSQLPool" description="" jndi-name="jdbc/PostgreSQL__pm"></jdbc-resource>
<jdbc-resource pool-name="PostgreSQLPool" description="" jndi-name="jdbc/PostgreSQL__nontx"></jdbc-resource>

最佳答案

您的交易是否处于只读模式。当您的 session 包含大量对象时,hibernate 会花费大量时间进行自动脏检查。可能你的事务在tomcat/jboss下是只读模式而在glassfish下不是

关于java - Glassfish 3.1.2 和 Java EE + Hibernate 的性能非常低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com