一旦一个JPAContainer就像创建
JPAContainer用户= JPAContainerFactory.make(User.class “persistenceUnitName来”);
现在我想的是,“用户”容器将使用一个EntityManager的又使用连接池中的一个JDBC连接。
的资源利用(附连到附连到JPAContainer EntityManager的JDBC连接)HttpRequest中的寿命或EntityManager的/连接有另一个寿命的使用过程中会发生什么?
你可以帮我了解过的EntityManager,使用了一种JPAContainer实例,并在和连接如何JDBC之间的差距?
我读了vaadin JPA容器教程中,我不觉得有这个信息。 谢谢。
https://vaadin.com/forum/-/message_boards/view_message/1601953
JPAContainer初始化通过:
JPAContainerFactory.make(User.class, "persistenceUnitName");
使用一个且只有一个整个应用程序生命周期中EntitiyManager,即使其他会话使用相同的EntityManager。 此外,该EntityManager提供开放的数据库连接,它似乎要忙的所有时间。 这种方法是不是很优化,它可以为你的应用程序的性能瓶颈。
那么,JPAContainer可以通过初始化:
JPAContainerFactory.make(User.class, (EntityManager)enityManager);
在这种方法中,你必须处理的时候,创造新的EntityManager(EM)。 您可以为每个用户/会话或每个用户/ Sesssion和实体这是你新的EM。 这看起来很有希望,但JPAContainer有其他的瓶颈。 JPAContainer使用每个EntityManager的一个繁忙的连接。 所以,如果你创建100 JPAContainer有自己的EntityManager连接池将包含100繁忙的连接,这是一个很大的问题。 所以,你必须设置连接释放模式为“after_transaction”这将迫使JPAContainer释放每次查询后连接。
persistence.xml中
<property name="hibernate.connection.release_mode" value="after_transaction" />
无论如何,这些都只是欺骗,使JPAContainer非常有好处的,但不要指望魔术。 JPAContainer有更多的其他问题
- 不支持延迟加载
- 不支持批量入库,每个条目由一个查询+一个查询每个关系加载
- 如果你想刷新JPAContainer其周期本身并永远需要刷新
看看这个帖子。 这是更好地使用纯JPA或休眠namedQuery或CriteriaBuilder与BeanItemContainer。 将更改保存到数据库vaadin 。