Java SE中的JPA与Java EE性能

时间:2015-03-12 07:41:52

标签: java java-ee jpa db2 eclipselink

我在Java SE(Oracle Java 7)和Java EE(Websphere Liberty)环境中使用JPA / Eclipselink。

我有一个从Java SE和Java EE调用的组件(通过组件,我的意思是相同的源代码),它执行JPA查询。 (Java SE运行以-javaagent:lib/eclipselink.jar param)

开始

我进行了3次测试:

    Java EE中的
  1. - 代码运行速度很快(例如查询大约需要0.01秒)
  2. Java SE中的
  3. - 代码运行缓慢(2秒/查询)
  4. Java SE中的
  5. 和Java EE服务器正在运行 - 代码运行速度与第一种情况一样快
  6. 我有点疑惑;为什么启动Java EE服务器会导致代码(在不同的JVM中运行)加速?如果不运行Java EE服务器,我该怎么做才能加速Java SE中的查询?

    更新

    此问题可能与基础数据库有关。我按以下顺序运行应用程序

    1. 启动了Java SE应用程序 - 查询很慢
    2. 启动了Java EE应用程序 - Java SE app中的查询很快
    3. 停止了Java EE应用程序 - Java SE应用程序中的查询仍然很快
    4. 因此,可能存在Java EE应用程序初始化的某种数据库缓存(?),但Java SE应用程序没有 - 但是我没有在日志中看到任何可能相关的内容对此。

      我看到的另一个问题是,这两个应用程序使用不同的数据库驱动程序(这可能会导致一些性能差异,但无法解释为什么启动这两个应用程序会导致加速......)

1 个答案:

答案 0 :(得分:2)

最后,我想通了:

  • 在JEE环境中JPA自动使用连接池;但在JSE环境中,没有可用的连接池
  • 当创建与任何db2数据库的连接时,启动了许多代理(例如监视,收集统计等);启动(和终止)这些代理需要大约2秒钟(这些代理在db2 get snapshot on all for database输出中可见)
  • 当JEE运行时,对db2 scema保持持久(池化)连接;这样所有代理都在运行
  • 当代理运行时启动J2SE应用程序时,创建数据库连接的开销非常小;另一方面,如果没有可用的持久连接,则此开销很小

使用C3PO让查询(连接)加快。