分类:
2008-09-09 17:24:01
想写这篇文章,是因为看了网上相关的几篇文章,没有一篇能真正说清楚如何正确地在WEB容器中获取持久化上下文, 要么根本就不知道如何获取,要么存在极度大的性能问题,要么存在线程性的隐患.
在EJB容器,如果你愿意,由容器注入一个EntityManager后,你可以把一切交给容器管理.如果你愿意使用可扩展事务, 当然你已经了解如何管理EntityManager.规范在那儿定着,没有什么可多说的. 在 SE环境下,没有容器能帮助你做任何事,一切都要由你纯手工创建,当然一切也由你负责管理,关闭,销毁.都是你的事,所以反而变得简单(是说获取持久化手段简单了,不是操作单了).
一.容器管理持久化上下文
而在WEB容器中,一方面容器管理的持久化事务不能象EJB容器那样可以使用扩展性事务,要想让容器管理,那么只能是 JTA事务,而且数据源也一定是JTA-DATA-SOURCE.常有人在网上找到一些persistence.xml,要么使用了本地事务,要么是非JTA的数据源,问我为什么在WEB容器中不能成功注EntityManager.
要在WEB容器中让容器管理持久化事务,可以通过两种方式,一是容器注入,一是JNDI查找.这两种方式并不是每个人都理解的,我看到一本叫<
事实上确实一些WEB容器不能注入EntityManager,也不能通过JNDI查找到.但是容器不支持并不是规范不支持,如果你使用glassfish,或者用resin 3.1.2以上(目前已经3.1.6)你就可以方便地获得容器管理的EntityManager.
xmlns:xsi="" xsi:schemaLocation=" persistence_1_0.xsd" version="1.0">
xmlns:xsi="" xsi:schemaLocation=" persistence_1_0.xsd" version="1.0">
//为了阅读方便删除了无关内容和注释
[1]