我们现在使用 JDeveloper 提供的向导添加一个名为 selectAd() 的业务方法。在 Structure 导航器中,右键单击 Methods 并单击 New Method。在 Bean Method Details 对话框中,输入 selectAd 方法名,选择 ajaxejb.AdEntity 返回类型,输入 String userInput 参数并单击 OK:
 |
图15 |
JDeveloper 将更新 AdSession 接口和 AdSessionBean 类。下面是 AdSession 接口的源代码:
package ajaxejb; import java.util.List; import javax.ejb.Remote; @Remote public interface AdSession { Object mergeEntity(Object entity); Object persistEntity(Object entity); List queryAdEntityFindAll(); void removeAdEntity(AdEntity adEntity); AdEntity selectAd(String userInput); }
|
JDeveloper 生成的 AdSessionBean 类包含会话外观方法,后面跟着一个 selectAd() 方法:
package ajaxejb; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @Stateless(name="AdSession") public class AdSessionBean implements AdSession { @PersistenceContext(unitName="ajaxejb") private EntityManager em; public AdSessionBean() { } public Object mergeEntity(Object entity) { return em.merge(entity); } public Object persistEntity(Object entity) { em.persist(entity); return entity; } /** select o from AdEntity o */ public List queryAdEntityFindAll() { return em.createNamedQuery("AdEntity.findAll").getResultList(); } public void removeAdEntity(AdEntity adEntity) { adEntity = em.find(AdEntity.class, adEntity.getKeyword()); em.remove(adEntity); } public AdEntity selectAd(String userInput) { ... } }
|
现在,我们需要编写 selectAd() 方法的主体。
实施业务方法
实际应用程序将使用 AdSession bean 的方法通过 Web 界面来创建、更新和删除 AdEntity 实例。selectAd() 方法将使用查询方法通过某种算法将用户的兴趣匹配到从数据库检索到的 ad。然而在本文中,我们将进行简化以关注主题。selectAd() 方法将从用户输入中选择一个随机单词,然后返回一个新的 AdEntity 实例:
package ajaxejb; ... import java.util.Random; import java.util.StringTokenizer; ... public class AdSessionBean implements AdSession { ... public AdEntity selectAd(String userInput) { String keyword = "nothing"; if (userInput != null && userInput.length() > 0) { StringTokenizer st = new StringTokenizer( userInput, ",.?!'& tnrf"); int n = st.countTokens(); if (n > 0) { int k = new Random().nextInt(n); for (int i = 0; i < k; i++) st.nextToken(); keyword = st.nextToken(); } } AdEntity ad = new AdEntity(); ad.setKeyword(keyword); ad.setUrl(keyword + ".com"); ad.setContent("Buy " + keyword + " from " + ad.getUrl()); return ad; } }
|