知识大全 设计模式在EJB中的应用(下)

Posted

篇首语:会挽雕弓如满月,西北望,射天狼。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 设计模式在EJB中的应用(下)相关的知识,希望对你有一定的参考价值。

设计模式在EJB中的应用(下)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Factory模式和Singleton模式    该模式类似new 是用来创建对象的 使用Factory模式是为了实现面向对象的基本原则 封装(Encapsulation)和分派(Delegation);将创建对象与使用对象进行分工 因此在平时开发过程中 尽量使用Factory模式创建对象     本例CatalogEJB中是使用Factory模式获得一个DAO的具体实例对象 见上面CatalogEJB代码中注释 我们看看CatalogDAOFactory的代码:    public class CatalogDAOFactory   public static CatalogDAO getDAO() throws CatalogDAOSysException       CatalogDAO catDao = null;    try       InitialContext ic = new InitialContext();      String className = (String) ic lookup(JNDINames CATALOG_DAO_CLASS);      catDao = (CatalogDAO) Class forName(className) newInstance();     catch (NamingException ne)                  return catDao;         在CatalogDAOFactory可以依据系统的配置文件 动态获得DAO的方法 之所以采取动态方式 当然便于用户自己增加自己的DAO方式 而不必修改代码 只要直接修改配置文件就可以     如果在这里只需要CatalogDAOFactory产生一个实例 可以采取Singleton模式 Singleton的目的是控制类实例对象的创建 并且允许整个程序只在一点对它进行访问 Singleton本身类只能创建一个 是单线程       public class CatalogDAOFactory   private static CatalogDAO catDao = null;    public static CatalogDAO getIntance()    if (catDao==null)      try         InitialContext ic = new InitialContext();        String className =            (String) ic lookup(JNDINames CATALOG_DAO_CLASS);        catDao = (CatalogDAO) Class forName(className) newInstance();       catch (NamingException ne)                           return catDao;             那么在CatalogEJB的调用从  dao = CatalogDAOFactory getDAO();    要改为  dao = CatalogDAOFactory getIntance();  Facade模式    在EJB应用中 有两个端点 这一端是用户端 另外一端是EJB 通常在这两个端点间会增加一层 用来松散两个端点之间的耦合 比如在宠物店例子中 考虑到不同身份的用户有不同的操作流程 比如顾客注册进入后 需要浏览目录 下订单 而商店管理者进入后需要确认或者否定订单 或者检查库存 这些功能需要借助Session bean和Entity bean完成     但是如果用户端直接和这些bean互动 会有以下问题:     用户端必须注意和这些beans的所有有联系或互动的事情 无法阻止用户端可能不恰当的使用这些beans    如果EJB的API改动 那么用户端的一些代码也要修改 无疑扩展性很差    即使这些beans都在同一台服务器上 用户端还是用remote方式来调用它们 造成网络无故拥挤     那么我们使用Facade模式来解决这个问题 Facade的定义是为子系统中的一组接口提供一个一致的界面 很显然我们需要为这些bean提供一个统一的对外界面 如下图      在宠物店中 ShoppingClientFacadeLocalEJB是面对所有用户端操作的统一界面 用户端操作就不直接和那些EJB如CustomerEJB或ShoppingCartEJB有联系 而是都通过ShoppingClientFacadeLocalEJB来联系的 代码如下     public class ShoppingClientFacadeLocalEJB implements SessionBean        //和CustomerEJB联系  public CustomerLocal getCustomer() throws FinderException     if (userId == null)                try       InitialContext ic = new InitialContext();      Object o = ic lookup( java:p/env/ejb/petstore/local/customer );      CustomerLocalHome home =(CustomerLocalHome)o;      customer = home findByPrimaryKey(userId);     catch (javax naming NamingException nx)                 return customer;           //和ShoppingCartEJB联系  public ShoppingCartLocal getShoppingCart()     if (cart == null)       try         InitialContext ic = new InitialContext();        Object o = ic lookup( java:p/env/ejb/cart/Cart );        ShoppingCartLocalHome home =(ShoppingCartLocalHome)o;        cart = home create();       catch (javax ejb CreateException cx)                       return cart;                  Facade模式参与者     SessionFacade (ShoppingClientFacadeLocalEJB)    提供一组操作流程     将真正工作委托到EJB的bean     EJB的bean (CustomerEJB ShoppingCartEJB等等)    执行基本的商业逻辑操作     没有任何对SessionFacade的调用     这样不但可扩展性大大增强 效率也提高了 用户端只需要一次Remote对SessionFacade调用就可以了 而SessionFacade会自动定位到与它同一台服务器的那些邻居bean(CustomerEJB ShoppingCartEJB等等) 无疑减少网络拥挤 提高了速度     总结    在EJB的具体使用中 使用合适的设计模式 不但使代码可重用性 可拓展性增强 最重要的是能提高效率和速度 我们知道EJB框架由于考虑大型系统中事务安全等各方面问题 效率性能有所欠缺 那么我们在具体问题具体应用时 使用设计模式可以弥补这个问题     例如Proxy模式可以为我们在访问巨大的需要花费一定时间才能展开的对象时 提供一个代理 这样不会因为那个巨大对象而影响当前运行速度 EJB中的那些bean很显然属于巨大对象(因为它们有反复的数据库操作 这些很费时间〕     Flyweight模式是避免大量拥有相同内容的小类的开销(如耗费内存) 使大家共享一个类(元类) 当你要从EJB中获取一系列字符串 而这些字符串中肯定有许多是重复的 那么我们可以将这些重复的字符串储存在Flyweight池(pool)中以达到共享      cha138/Article/program/Java/gj/201311/27393

相关参考

知识大全 spring,ioc模式与ejb3的SLSB实现

spring,ioc模式与ejb3的SLSB实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 EJB应用从WebLogic到JBoss的迁移方法

EJB应用从WebLogic到JBoss的迁移方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!摘

知识大全 JBoss EJB应用程序迁移到WebLogic上

JBossEJB应用程序迁移到WebLogic上  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

室内设计中怎样应用软装饰?

室内设计中怎样应用软装饰?在现代室内空间中,软装饰艺术是室内环境中重要的部分,很多情况下空间的功能和表现形式也依靠软装饰来实现。室内家具和织物在室内环境中能起到装饰美化室内空间的作用。空间中的家具配置

知识大全 怎么关闭百度中的夜间模式

怎么关闭百度中的夜间模式在设置中找一下,点击,夜间模式关闭。三星手机百度关闭夜间模式一、如果手机需要下载安装软件应用,建议尝试:1.使用手机功能表中自带的浏览器上网,直接搜索需要的软件进行下载安装(下

知识大全 Composite模式及其在JSF中的应用

Composite模式及其在JSF中的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一&nbs

知识大全 Factory Method模式在Javamail中的应用

FactoryMethod模式在Javamail中的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

全膜法在水处理设计中的应用及设计注意事项

全膜法系统在水处理设计领域的应用越来越广泛。文章就某工程除盐水站全膜法系统进行简要介绍,并提出系统设计中应注意的事项。目前除盐水站已投入运行,一级脱盐水和深度脱盐水的指标均完全满足工程的需要,且系统运

全膜法在水处理设计中的应用及设计注意事项

全膜法系统在水处理设计领域的应用越来越广泛。文章就某工程除盐水站全膜法系统进行简要介绍,并提出系统设计中应注意的事项。目前除盐水站已投入运行,一级脱盐水和深度脱盐水的指标均完全满足工程的需要,且系统运

全膜法在水处理设计中的应用及设计注意事项

全膜法系统在水处理设计领域的应用越来越广泛。文章就某工程除盐水站全膜法系统进行简要介绍,并提出系统设计中应注意的事项。目前除盐水站已投入运行,一级脱盐水和深度脱盐水的指标均完全满足工程的需要,且系统运