快速业务通道

关于EJB的持久化对象技术分析 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
nfo userInfo = null;   try   {    LocalUserHome home = getUserHome();    LocalUser localUser = null;    try    {     System.out.println("Finding user...");     localUser = home.findByPrimaryKey(userID);    }    catch (FinderException e)    {    }    if (localUser == null)    {     System.out.println("Creating user...");     localUser = home.create(userID,"John " + userID + " Doe","123 anywhere st.","Seattle","WA","87654");    }    System.out.println("EJB returned User ID: " + localUser.getUserID());    userInfo = convertToUserInfo(localUser);    System.out.println("User FullName: " + localUser.getFullName());   }   catch (Exception e)   {    System.err.println(e.toString());   }   return userInfo;  }  private static UserInfo convertToUserInfo(LocalUser localUser)  {   UserInfo userInfo;   userInfo = new UserInfo();   userInfo.setId(localUser.getUserID());   userInfo.setFullName(localUser.getFullName());   userInfo.setAddress(localUser.getAddress());   userInfo.setCity(localUser.getCity());   userInfo.setState(localUser.getState());   userInfo.setZip(localUser.getZip());   return userInfo;  } }

请注意在列表4中,UserService对象首先试着通过findByPrimaryKey()方法来找到一个EJB的实例,并在这个方法中传递一个用户ID的参数。如果没有找到实体EJB的实例,UserService对象将调用EJB的home接口中的create()方法来创建一个新的EJB实例。

findByPrimaryKey()方法在调用过程中首先被EJB容器拦截,EJB容器试着从数据库中找出一个与用户ID相同主键的记录。create()方法将在数据库中插入一个主键等于用户ID的记录。

关于EJB的持久化对象技术分析(7)

时间:2010-12-04

EJB查询语言(EJB QL)

EJB规范提供了一种名为EJB QL的对象查询语言,用来查询CMP。这种对象查询语言实际上被容器转化为SQL语言。

EJB QL语言用来实现EJB的home接口中的find()查询方法,并执行实体EJB定义的一些内部的select方法。这些EJB QL一般放在应用程序的部署描述文件中。

以下XML代码(选自于jaws.xml文件)定义了在UserEJB的home接口中findByState()方法与相应EJB QL之间的映射。这个示例程序用这个EJB QL查询语言及相应的find()方法寻找给出状态的某个用户。

<entity> ... <query> <query-method> <method-name>findByState</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </query-method> <ejb-ql> [!CDATA[ SELECT DISTINCT object(u) FROM UserEJB u WHERE u.STATE = ?1]] </ejb-ql> </query> </entity>

在以上的定义当中,ejb-ql标签定义了实际使用的EJB QL。当你只想查找一个特定类型的对象时,必须要在查询语言中加入object关键字。另外这个查询中的"?1"的作用类似于JDBC中的PrepareStatement,表明这个查询是一个参数化查询。如果有多个参数,则依次为"?2"、"?3"以此类推,这些参数与查询方法findByState()中的参数表从"?1"开始一一对应。

在上例中,"?1"将被findByState()方法的第一个名为state的参数所取代。除此之外

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号