我想编写一个 Java EE Web 应用程序,其中不同的用户使用数据库。用户可以开始编辑记录,然后保存更改或取消编辑。当用户正在编辑时,应该为其他用户锁定记录。它应该被锁定在数据库级别,因为还有其他非 Java 用户正在编辑同一个数据库,锁定他们处理的记录。
我了解一些基本的 Java + 数据库,但我不擅长锁定等多用户操作。在 Internet 上寻找一些示例,在我看来,Java EE 技术的每个“hello world”示例都至少介绍了另一种技术。为了访问数据库中的对象,我使用 JPA。要锁定记录,我可能需要事务,这带来了 JTA。要使用 JTA,我需要 JNDI。要使用所有这些对象,我可能还需要 EJB 和注入......此时我想知道这是否真的是解决问题的最简单方法,或者我是否错过了一些重要的东西。我不知道是否所有这些技术都是必要的(如果是,我会使用它们; 我只是想在我全部学习之前确定)。我只是看到我在网上找到的例子非常慷慨地介绍它们。
我想要一个简单的 Java EE 代码示例:
使用 JPA;
连接到“persistence.xml”文件中描述的数据库;
有一个
MyObject
具有属性id
和的类name
,存储在MYOBJECT
表中;有一个方法(例如,从 JSP 页面调用),该方法在数据库级别锁定对象
id = 42
(因此有权访问同一数据库的非 Java 用户也无法修改它),或者如果记录已被另一个锁定,则显示错误用户(另一个 Java 用户或非 Java 用户);有另一个方法(例如,从另一个 JSP 调用),它要么将 更新
name
为指定值并释放锁,要么在提供空字符串时释放锁。
对于您在解决方案中引入的每项新技术,我想听听您为什么使用它的简短解释。此外,该技术是否需要我安装新库、创建或修改配置文件、编写附加代码等。(调用方法的 JSP 文件不是必需的;我对与数据库相关的部分感兴趣。)
(另一个细节:这里描述了EntityTransaction和UserTransaction之间的区别。如果我理解正确的话,只有当我使用多个数据库时才需要JTA。如果我只使用一个具有不同模式的Oracle数据库,是否也需要?如果是,请使用 JTA 编写示例代码。)