【发布时间】:2013-06-28 21:39:46
【问题描述】:
我正在尝试解决一个非常奇怪的行为。
我正在合作:
JBoss AS 7.1.1EJB 3.0-
JPA XA DataSourceOracle 11g
在其中一个系统功能中,用户可以看到每个Store 的状态。对于每个Store,我都会发起一个查询,以总结所有已处理的文件。查询是这样的:
SELECT
SUM(CASE file.type
WHEN 'TYPE_1' THEN 1
ELSE 0
END)
,
SUM(CASE file.type
WHEN 'TYPE_2' THEN 1
ELSE 0
END)
,
SUM(CASE file.type
WHEN 'TYPE_3' THEN 1
ELSE 0
END)
FROM
File file
WHERE
file.type IN ('TYPE_1', 'TYPE_2', 'TYPE_3')
AND file.status = 'RECEIVED'
AND file.store.id = :storeId
问题是,用户可以选择他想检查的商店,这就是事情变得奇怪的地方。
当我检查第一个商店时,结果非常快,但所有后续查询都需要更多时间。让我举例说明:
- 用户检查存储 15(极快的结果) - 大约 200 毫秒
- 用户检查存储 2(结果非常慢) - 大约 8000 毫秒
现在注意这部分,非常重要。
- 用户注销,然后重新登录。
- 用户检查存储 2(耗时 8000 毫秒的存储),现在结果非常快。
这很奇怪,之前需要一段时间的同一家商店,现在加载速度非常快。
每当我在SQLDeveloper 上尝试查询时,结果也很快。
我用@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 注释了我的EJB,但在执行时间上我没有发现任何差异。
我创建了一个独立项目来使用JDBC 运行查询,结果又很快,这让我认为这可能是我的DataSource、persistence.xml 或类似的配置。
有人知道为什么会发生这种情况吗?
【问题讨论】:
-
您如何管理会话、事务?
-
如何记录 JDBC 调用并查看是否执行了查询以外的其他内容?
-
@Olaf 它们都是由容器管理的,我注入了
EntityManager的实例 -
@OldProgrammer ,我做到了,它只运行我提到的查询
标签: jpa oracle11g ejb datasource jboss7.x