Vaadin JPAContainer JDBC连接使用(Vaadin JPAContainer J

2019-06-26 08:51发布

一旦一个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

Answer 1:

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 。



文章来源: Vaadin JPAContainer JDBC Connection Usage
标签: java jdbc vaadin