Java 理解JPA、EJB3和Web服务
我刚刚开始使用JPA,从JPA实体创建无状态会话bean,然后通过web服务访问bean。虽然我有很多“老办法”开发数据库支持的web服务的经验,但对于这种新的“注释驱动方法”的幕后运作,我有一些疑问 我看到的是,NetBeans通过其向导引导您以这种方式构建应用程序Java 理解JPA、EJB3和Web服务,java,web-services,jpa,jakarta-ee,ejb-3.0,Java,Web Services,Jpa,Jakarta Ee,Ejb 3.0,我刚刚开始使用JPA,从JPA实体创建无状态会话bean,然后通过web服务访问bean。虽然我有很多“老办法”开发数据库支持的web服务的经验,但对于这种新的“注释驱动方法”的幕后运作,我有一些疑问 我看到的是,NetBeans通过其向导引导您以这种方式构建应用程序 使用EJB和Web应用程序模块创建企业应用程序 创建实体类。我从现有的数据库创建了我的 从实体类创建会话bean 从会话bean创建Web服务 这一切看起来都很简单,但幕后发生了什么?具体而言: 我看到web服务(使用@WebSe
@WebService
注释创建)引用了我的无状态会话bean(使用@EJB
引用)。
- 这里发生了什么?它只是从应用服务器的EJB池中获取EJB实例吗?
没有关系。我正在考虑一个实例,其中有不止一个表,这意味着不止一种类型的实体类和不止一种类型的EJB。我正在查看web服务,只是看到了
引用,不知道它从该注释中得到了bean类型。然而,就在它下面,它是对本地bean接口的引用——就是这样@EJB
- 如果服务器上部署了不止一种类型的EJB,那么它如何知道应该获取哪一种
@无状态
和@本地
注释定义的。bean实现通过@PersistenceContext
注释引用EnityManager
。
- 数据库的jndi查找在哪里完成(可能在
文件中)李>persistence.xml
- 所有EJB是否共享一个公共的
(假设EntityManager
是线程安全的)?如果没有,我知道EntityManager
使用二级缓存来帮助减少对数据库的访问,这些缓存是否以某种方式保持同步EnityManager
persistence.xml
文件的每个持久化单元中的
元素中指定数据源(可以包含多个持久化单元),并且数据源将由EntityManager
获取(仅在需要时,即仅当确实需要数据访问时)
所有EJB是否共享一个公共的EntityManager
否。
EntityManager
是一个非线程安全的对象,对于单个业务流程、单个工作单元,应该使用一次,然后丢弃。在使用EJB3的JavaEE环境中,默认模式是“每个请求的entitymanager”。来自客户端的请求被发送到EJB3持久层,一个新的EntityManager
被打开,所有的数据库操作都在这个工作单元中执行。一旦工作完成(并且客户机的响应已经准备好),持久性上下文以及实体管理器对象将被刷新和关闭。(来源:)。答案太棒了!谢谢你,帕斯卡。看起来你可能在这里引用了一些资料(斜体文本?)。你能给我一个链接吗?谢谢@Vinnie我的网站(大概吧?)太慢了,昨天我放弃了添加参考资料。但现在已经完成了。