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

Glassfish 3.1.2和Java EE+Hibernate的性能非常低,java,performance,hibernate,jakarta-ee,glassfish,Java,Performance,Hibernate,Jakarta Ee,Glassfish,我面临着Java EE EJB+JSF应用程序和Glassfish 3.1.2上的Hibernate3.6.8.Final和4.1.7.Final的性能非常低的问题。发送大约300个select查询大约需要20秒。这是不能接受的 我在JBoss和TomEE上部署了完全相同的应用程序。在那里,同样的300个select查询大约需要1,5秒 我在谷歌上找到了一些答案,可能是hibernate.show_sql是真的,或者hibernate.hbm2ddl使应用程序运行得太慢。但事实并非如此。我关闭了

我面临着Java EE EJB+JSF应用程序和Glassfish 3.1.2上的Hibernate3.6.8.Final和4.1.7.Final的性能非常低的问题。发送大约300个select查询大约需要20秒。这是不能接受的

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

我在谷歌上找到了一些答案,可能是hibernate.show_sql是真的,或者hibernate.hbm2ddl使应用程序运行得太慢。但事实并非如此。我关闭了hibernate.show\u sql,但这并不重要。此外,这些选项在JBoss和TomEE版本中都是正确的,并且工作速度快了10倍以上! 我认为这是格拉斯菲鱼和冬眠之间的问题。但下一个应用程序具有相同的业务逻辑,与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>

您的事务处于只读模式。当您的会话包含很多对象时,hibernate会花费大量时间进行自动脏检查。可能您的事务在tomcat/jboss下处于只读模式,但在glassfish下不处于只读模式,我找到了原因。答案隐藏在我贴在上面的列表中。三个月前,我在Glassfish上部署了相同的应用程序。然后我第一次用玻璃鱼。我在一些博客上找到了如何在localhost:4848上设置数据源。假设我的数据源名为jdbc/PostgreSQL。然后我得到一个例外,glassfish找不到数据源jdbc/PostgreSQL\uu pm。在互联网的某个地方,我找到了需要后缀“pm”的信息。下一个例外是关于后缀uux。更改名称后,应用程序启动。但性能也很低

现在我添加了名为jdbc/PostgreSQL的数据源,它开始以良好的性能工作!
数据源的名称怎么可能是错误的,尽管它工作得很慢

池中连接的最小/最大nb是多少?初始和最小池大小:8,初始和最小池大小:32我相信文件是persistence.xml而不是persistence.xml。