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