java - jsp应用中JPA的正确使用

标签 java jsp jakarta-ee jpa

我正在尝试使用 JPA 开发一个简单的基于 JSP 的 Web 应用程序,并且想知道开发一个应用程序的正确用法。

在我的示例应用程序中,我有两个 JSP 页面和一个简单的 Java 类来执行数据库操作。这两个 JSP 文件都使用该 Java 类来执行 DB 操作。

我用 @Stateless 注释了此类,并注入(inject)了一个实体管理器,如下所示:

@PersistenceContext(unitName = "myjpa") 
EntityManager em;

在我的 persistence.xml 中,我设置了以下属性:

<property 
    name="hibernate.transaction.jta.platform"
    value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"
/>

我使用 JNDI 在 JSP 中调用该类(因为该类被注释为无状态 session bean),如下所示:

InitialContext ic = new InitialContext();

Sample sample = (Sample) ic.lookup("java:app/" + application.getContextPath() + "/Sample");

我面临以下情况:

  1. 当我尝试使用事务 em.getTransaction().begin()/commit() 进行插入和更新时,它说不能在 JTA 情况下使用事务。

  2. 因此,在 Java 类的构造函数代码中,我使用以下代码:

Properties properties = new Properties();

properties.put("javax.persistence.transactionType", "RESOURCE_LOCAL");

emf = Persistence.createEntityManagerFactory("myjpa",properties);

em = emf.createEntityManager();

我尝试使用像 em.getTransaction().begin()/commit() 这样的事务。 但在这种情况下,经过 2-3 次数据库更新和加载操作后,页面会变得非常慢。虽然我没有得到任何异常(exception)。总的来说,我的表中的记录少于 25 条。

对我来说,它似乎正在内部等待某些操作完成。

同时,我也觉得我使用 JPA 的方式是错误的,因此征求有关使用 JSP 和 JPA 制作简单 Web 应用程序的正确方法的建议。

虽然我仍在探索 Java EE,如果您对此类案例有任何具体引用,我也愿意阅读和查看它们。

最佳答案

您应该始终努力使用 JTA 事务,这意味着容器将处理事务划分。在您的情况下,如果您想自己处理事务,则需要将其定义为 bean 管理事务。因此,在您的 EJB 类中,在 @Stateless 注解之后,您应该定义以下注解;

@TransactionManagement(TransactionManagementType.BEAN)  

通常的最佳实践是让容器处理事务,除非有某些明确的原因需要您使用 Bean 管理的事务。

关于java - jsp应用中JPA的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16034710/

相关文章:

Java EE "JDI Event Dispatch"错误

java - spring mvc以jsp形式返回子类对象

java - 将中文文本转换为UTF-8

java - 为什么 REST Web 服务不支持 war 之外的 EJB 资源类?

java - Spring MVC : Receive radio button values

java - 从 Android 应用程序使用蓝牙热敏打印机打印图像?

java - 在jsp文件中添加参数

javascript:如何制作具有相同数据的多个组合框

http - 输入类型 "hidden"vs 文本区域

java - 可以在Hibernate级别维护两个表之间的关系吗?