EJB的最佳实践:工业强度的JNDI优化

在这篇技巧文章中,我们将研究一些最常用的 JNDI 优化。特别地,我们将向您展示如何将高速缓存和通用助手类组合使用,以创建针对 JNDI 开销的工厂风格的解决方案。

减少上下文实例

清单 1 显示了一段典型的 EJB 代码,它需要多次 JNDI 查找。请花一点时间研究代码,然后我们将对它进行优化以获得更佳性能。

清单 1. 典型的 EJB 查找

public boolean buyItems(PaymentInfo paymentInfo, String storeName,
List items) {
// Load up the initial context
Context ctx = new InitialContext();
// Look up a bean´s home interface
Object obj = ctx.lookup("java:comp/env/ejb/PurchaseHome");
PurchaseHome purchaseHome =
(PurchaseHome)PortableRemoteObject.narrow(obj, PurchaseHome.class);
Purchase purchase = purchaseHome.create(paymentInfo);
// Work on the bean
for (Iterator i = items.iterator(); i.hasNext(); ) {
purchase.addItem((Item)i.next());
}
// Look up another bean
Object obj = ctx.lookup("java:comp/env/ejb/InventoryHome");
InventoryHome inventoryHome =
(InventoryHome)PortableRemoteObject.narrow(obj, InventoryHome.class);
Inventory inventory = inventoryHome.findByStoreName(storeName);
// Work on the bean
for (Iterator i = items.iterator(); i.hasNext(); )
inventory.markAsSold((Item)i.next());
}
// Do some other stuff
}

尽管这个示例多少有点刻意,但它确实揭示了使用 JNDI 时的一些最明显的问题。对于初学者,您应该问问自己,新建 InitialContext 对象是否必需。很可能在应用程序代码的其它地方已经装入了这个上下文,而我们又在这里创建了一个新的。高速缓存 InitialContext 实例会立即促使性能提高,如清单 2 所示:

清单 2. 高速缓存 InitialContext 实例

public static Context getInitialContext() {
if (initialContext == null) {
initialContext = new InitialContext();
}
return initialContext;
}

通过对 getInitialContext() 使用助手类,而不是为每个操作都实例化一个新的 InitialContext,我们将遍布在应用程序中的上下文数量减少为一个。

线程化会怎么样?

如果您对此处提出的解决方案的线程化感到担心,那大可不必。两个线程同时进行 getInitialContext() 是绝对有可能的(从而一次创建两个上下文),但只有首次调用该方法时才会发生此类错误。因为问题至多只会发生一次,所以同步是不必要的,实际上,同步引入的复杂性比它所解决的复杂性更多。

时间: 2024-10-01 23:32:23

EJB的最佳实践:工业强度的JNDI优化的相关文章

Android应用性能优化最佳实践.2.3 布局优化

2.3 布局优化 布局是否合理主要影响的是页面测量时间的多少,我们知道一个页面的显示测量和绘制过程都是通过递归来完成的,多叉树遍历的时间与树的高度h相关,其时间复杂度为O(h),如果层级太深,每增加一层则会增加更多的页面显示时间. 任何时候View中的绘制内容发生变化时,都需要重新创建DisplayList.渲染DisplayList,更新到屏幕上等一系列操作.这个流程的表现性能取决于View的复杂程度.View的状态变化以及渲染管道的执行性能.例如,假设某个Button的大小需要增大到目前的两

HBase最佳实践-列族设计优化

随着大数据的越来越普及,HBase也变得越来越流行.会用HBase现在已经变的并不困难,然而,怎么把它用的更好却并不简单.那怎么定义'用的好'呢?很简单,在保证系统稳定性.可用性的基础上能够用最少的系统资源(CPU,IO等)获得最好的性能(吞吐量,读写延迟)就是'用的好'.HBase是一个庞大的体系,涉及到很多方面,很多因素都会影响到系统性能和系统资源使用率,根据场景对这些配置进行优化会很大程度上提升系统的性能.笔者总结至少有如下几个方面:HDFS相关配置优化,HBase服务器端优化(GC优化.

MongoDB · 最佳实践 · 短连接Auth性能优化

问题 通常我们使用MongoDB的时候,客户端(driver)和MongoDB之间都是使用长连接,但是在某些场景下.某些driver仍然只能使用短连接进行连接,比如PHP.就在我们阿里云数据库MongoDB版商业化后没多久,我们就遇到了一个用户短连接过多导致的性能问题. 这个问题的症状是MongoD的CPU使用率居高不下,16个核都跑满了,影响到了用户的正常使用. 排查 首先想到的当然是看看有没有很多慢查询,针对存在的慢查询都建议用户建了索引后,情况还是没有好转.这时我们观察到用户的driver

Android应用性能优化最佳实践.2.5 启动优化

2.5 启动优化 随着应用的功能越来越丰富.启动时需要初始化的工作多.界面的元素复杂等,启动速度不可避免地受到影响,比如一开始单击时出现黑屏或者白屏,甚至在低端机型上出现假死的现象,本节通过学习应用的启动流程.启动速度的监控,发现影响启动速度的问题所在,并优化启动的逻辑,提高应用的启动速度. 2.5.1 应用启动流程 Android应用程序的载体是APK文件,其中包含了组件和资源,APK文件可能运行在一个独立的进程中,也有可能产生多个进程,还可以多个APK运行在同一个进程中,可以通过不同的方式来

Java程序优化的一些最佳实践

摘要:本文介绍了Java代码优化的过程,总结了优化Java程序的一些最佳实践,分析了进行优化的方法并解释了性能提升的原因.多角度分析导致性能低的原因并逐个进行优化使得程序性能得到极大提升,代码可读性.可扩展性更强. 作者通过经历的一个项目实例,介绍Java代码优化的过程,总结了优化Java程序的一些最佳实践,分析了进行优化的方法,并解释了性能提升的原因.作者从多个角度分析导致性能低的原因,并逐个进行优化,最终使得程序的性能得到极大提升,增强了代码的可读性.可扩展性. 一.衡量程序的标准衡量一个程

EJB 最佳实践:改进远程对象设计-JSP教程,面向对象/设计

在这一新系列文章中,您将学习如何最佳设计和优化 Enterprise JavaBeans 组件.如何减少 RMI 通信和 JNDI 访问以及最有效地使用企业应用程序.在每篇技巧文章中,企业 Java 编程方面的主要权威人士 Brett McLaughlin 将提供最佳实践或设计模式.许多技巧文章将建立在前面的文章之上.建议您按顺序阅读这些技巧文章,因为它们将帮助您构建有助于您自己的企业应用程序编程的策略和设计方法.在本篇(也是第一篇)技巧文章中,Brett 演示了业务接口模式如何能够改进远程对象

EJB 3.0在WAS V7上开发部署的最佳实践

引言 IBM WebSphere Application Server 从 7.0 版本起开始正式支持 EJB 3.0(在之前的 6.1 版本有发布针对 EJB 3.0 的功能部件包).目前建立于 WAS V7 上的 EJB 3.0 应用并不常见.作者在实际项目中总结了使用 WAS V7 部署 EJB 3.0 应用遇到的一些问题(部分为开发细节)及最佳实践,并试图通过一些简单的例子将这些经验展现给需要在 WAS V7 环境下开发 EJB 3.0 应用的开发者们. 本文建立在如下条件之上: 使用

EJB最佳实践:数据验证出现在什么地方最合适

尽管数据验证是所有企业应用程序的必需组件,但人们对数据验证过程的理解通常很肤浅,并且不能很好地执行.在这篇 EJB 最佳实践专栏文章中,Brett McLaughlin 解释了对基于 EJB 技术的系统进行数据验证的一些幕后概念,并向您展示了如何避免意外的或不可理解的错误消息. 每当您处理应用程序的业务逻辑时,都需要执行验证.应用程序必须有办法确保传入的数据格式正确,并且必须能够执行特定于业务的验证(如针对库存复核采购订单). 我们将讨论数据验证逻辑应该出现在 EJB 应用程序代码的 什么位置,

《深入理解OSGi:Equinox原理、应用与最佳实践》一1.2 为什么使用OSGi

1.2 为什么使用OSGi 没有什么技术是万能的,任何一门技术都有它的适用场景和最佳实践方法.OSGi不只是一门技术,更多的是一种做系统架构的工具和方法论,如果在不适用的场景中使用OSGi,或者在适用的场景中不恰当地使用OSGi,都会使整个系统产生架构级的缺陷.因此,了解什么时候该用OSGi是与学会如何使用OSGi同样重要的事情. 每个系统遇到的业务环境都是不一样的,笔者不希望以经验式的陈述去回答"什么时候该用OSGi"或 "为什么要使用OSGi"这样的问题,而试图