扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
您可以看到 IDE 只创建了两个类(为每个数据库表创建了一个类)。在“使用 NetBeans IDE 5.0 开发 J2EE 应用程序的快速入门指南”中使用“通过数据库生成 CMP 实体 Bean”时,IDE 会为每个表创建四个类。
如果您在源代码编辑器中查看 Customer.java,则会注意到已使用了 @Entity 标注将类声明为实体类。其他标注还提供了附加信息,如实体类及其属性映射的数据库表和列。
您还会注意到,通常在实体 Bean 中找到的大部分样板代码都不见了。这是因为在 Java EE 5 中,实体类不再需要诸如 ejbRemove、setMessage、setSessionContext、ejbActivate 和 ejbPassivate 之类的方法。
对 Servlet 进行编码
现在我们需要将 Servlet 添加到 Web 应用程序中。在 Java EE 5 中,我们不必将资源创建和查询代码添加到 Servlet 中,而是可以使用资源注入将这些工作交给容器来执行。可以使用标注将资源直接注入到 Servlet 中,并由容器来管理请求资源的创建和查询。在这种情况下,我们希望使用在持久性单元中指定的实体管理器。
@PersistenceContext(name = "persistence/LogicalName", unitName = "CustomerBookPU") |
IDE 还将添加以下标注,用于注入管理事务边界的资源:
@Resource private UserTransaction utx; |
IDE 将在 Servlet 中添加以下缺省代码:
public void persist(Object object) { try { Context ctx = (Context) new InitialContext().lookup("java:comp/env"); EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName"); utx.begin(); // TODO: // em.persist(object); utx.commit(); } catch(Exception e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught", e); throw new RuntimeException(e); } } |
此代码用于查询 @PersistenceContext 定义的持久性单元和实体管理器的实例。
在 CustomerDetails.java 中,将上面所显示的生成的查询代码修改为引用实体对象。完成后,经过修改的代码应如下所示(以粗体显示的代码表示已更改的行):
public Customer findByID(Integer customerNr) { Customer customer = null; try { Context ctx = (Context) new InitialContext().lookup("java:comp/env"); EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName"); utx.begin(); customer = em.find(Customer.class, customerNr); utx.commit(); } catch(Exception e) { Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught", e); throw new RuntimeException(e); } return customer; } |
protected void processRequest(HttpServletRequest request, HttpServletResponse response) Customer customer = findByID(new Integer(customerNr)); |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者