全球化最佳实践:开发 IBM Lotus Notes 应用程序(全球化)
俗话说预防胜过良药。根据多年的 Lotus Notes 全球化经验,我们了解到,Lotus Notes 全球化在设计和开发阶段最容易出现问题。本文介绍关于全球化的最佳实践,您可以使用它们开发良好的 Lotus Notes 应用程序。Lotus Notes 模板目前已被翻译为 27 种语言,本文展示我们在数年中开发 Lotus Notes 模板获得的经验,以及作为翻译团队成员获得的经验。
对许多客户而言,全球化 Lotus Notes 应用程序是一个挑战。Lotus Notes 应用程序中的代码和可翻译的字符串是合并在一起的。开发人员通常以一种语言开发 Lotus Notes 应用程序,然后使用 IBM Lotus Domino® Designer 客户端直接翻译字符串。结果是,每次更改或升级应用程序时,需要逐个语言更改数百个设计元素。处理变更、管理版本控制、升级设计和修复问题需要大量的工作。
深入探讨 Android 传感器(源代码及文档)
我们介绍了 Android 传感器。样例应用程序度量了方向和加速,以及使用 MediaRecorder 类与录制功能进行交互。对于构建实际系统,Android 是一个灵活、有吸引力的平台。Android 领域发展迅速,并且不断壮大。请务必关注该平台。
写一个定制的 Dojo 应用程序
我们最近刚刚完成了一个 Web 2.0 Dojo 原型的开发。这个原型十分宽泛,为信息管理提供了一个新的功能。我们还与用户体验团队协作以确保此应用程序可用。屏幕由一名图形 Web 设计人员设计,以使它们看上去更专业一些。
本文记录了我们进行此原型的 Web 2.0 开发的实际体验。由于 Web 2.0 相对来说是个比较新的技术,所以在需要时,开始使用和进行定制可能会较为困难。我们并没有为我们的 Dojo 应用程序使用开箱即用的外观。因为我们需要的是一致的图形设计以符合我们产品线的品牌效应。因此,我们必须使用 Dojo 进行定制。定制是绝大多数开发人员耗费时间最多的一项工作,对于那些不知道如何解决此问题的开发人员,更是如此。
由于本文的重点在于 Dojo 应用程序的定制,所以这里我们不对示例中出现的每个小部件属性做详细的描述。本文假设您对 Dojo 和 CSS 有一定的了解。本文中的示例所基于的是 Dojo 1.1.0(
测试这个 Dojo 应用程序
本地和远程
Web 2.0 应用程序使用 RESTful 服务来获得其信息。REST 是 REpresentational State Transfer 的缩写。它是 World Wide Web 所基于的架构模型。REST 的原理包括:以资源为中心、所有相关资源均使用 URI 寻址、使用 HTTP (GET、POST、PUT、DELETE)统一访问。我们希望能够在非连接的本地模式下进行测试。因此,我们将 RESTful 服务的结果保存到测试文件内,并创建了一个抽象方法来获得给定 REST 调用的 URL。
自动检测和交换的例子
此抽象借助 document.location.protocol 的 JavaScript 值来判断访问是本地的还是远程的,并返回正确的 URL。这可通过将这些本地测试文件放入类似于此服务器 URI 的一个目录结构实现。比如,对于 URI: myui/catalog/types on server http://<server>:<port>,我们只是将此 URI 置于本地的基础测试目录 <local-test-base-dir>/myui/catalog/types。根据访问是本地还是远程,只有此 URI 的基础部分需要更改。我们对配置对象 BASE_URL 属性的设置如下所示。
config.BASE_URL = (document.location.protocol=="file:") ? "data" : "..";
总的来说,我们发现开始进行 Dojo 开发所需的学习曲线很少,这归功于 Dojo 工具箱以及 Dojo 社区提供的大量可用示例以及 Internet 上丰富的 JavaScript 信息。但是,作为 Java 开发人员,我们还是缺少强大的 IDE 支持、优秀的 API 文档、强类型缺乏、不同 Web 浏览器的不同运行时行为以及 JavaScript 开发的编译时检查。学习如何进行定制有时十分痛苦,并且通常定制的过程十分琐碎且容易出现错误。还好,当我们掌握了这些过程后,我们发现它们是可重复进行的。我们最终得到的原型是一个看起来很专业的应用程序,并且具备启用了 Ajax 的 Web 应用程序所应具备的所有性能优点。
示例 iPhone 和 Google 应用程序引擎代码
App Engine 和 iPhone 开发综合在一起就形成了一种功能强大的工具,可用于编写和原型化移动应用程序。这个示例 Web 应用程序支持着一个小型的 iPhone 应用程序 Sonnet,这个小程序可从 Apple 的 Application Store 免费下载。综合 Google App Engine 和 iPhone 开发的强大之处在于可以使用 Python 快速原型化应用程序的某些部分,在这之前用 Objective-C 进行编码十分繁琐,另外这种综合也增强了(在线和离线)数据存储的灵活性。TouchEngine 汇集了各种优点于一身。借助 TouchEngine,混合应用程序的开发人员可以很容易地编写软件,实现在异步更新云数据的同时在 iPhone 上本地缓存数据。这就让应用程序既能迅速响应用户输入,同时又能在线维护数据以便及时更新。
iPhone 和 Google App Engine 开发人员社区均提供了丰富的资源,可用来加速开发。如果您对面向这两个平台的开发或综合两平台的特性(如本文所示)感兴趣,我们建议您详细阅读官方文档的相关内容。Google 和 Apple 均有很棒的书面教程,某些情况下,也都提供有基于视频的教程。Google App Engine 还在全球范围内举行了 “Hack-A-Thon” 活动,您不妨用 Google 查查,看在您所在地区是否有这样的活动。Apple 的 WWDC 会议也是面向 iPhone SDK 程序员的一个很有价值的资源。
将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)
现有的 Java EE 应用
假定我们已经拥有了一个管理雇员信息的 Java EE 应用,名为 EmployeeMgmt-Server,结构如 图 1 所示:
图 1. Java EE 工程结构
这是一个典型的 Java EE 应用,使用了流行的 Spring 框架。为了简化数据库操作,我们使用了内存数据库 HSQLDB。对这个简单的应用,省略了 DAO,直接在 Façade 中通过 Spring 的 JdbcTemplate 操作数据库。最后,EmployeeMgmt 应用通过 Servlet 和 JSP 页面为用户提供前端界面:
图 2. EmployeeMgmt Web 界面
该界面为传统的 HTML 页面,用户每次点击某个链接都需要刷新页面。由于 Employee Management 系统更接近于传统的桌面应用程序,因此,用 Flex 重新编写界面会带来更好的用户体验。
回页首
集成 BlazeDS
如何将 Flex 集成至该 Java EE 应用呢?现在,我们希望用 Flex 替换掉原有的 Servlet 和 JSP 页面,就需要让 Flex 和 Java EE 后端通信。Flex 支持多种远程调用方式,包括 HTTP,Web Services 和 AMF。不过,针对 Java EE 开发的服务器端应用,可以通过集成 BlazeDS,充分利用 AMF 协议并能轻易与 Flex 前端交换数据,这种方式是 Java EE 应用程序集成 Flex 的首选。
BlazeDS 是 Adobe LifeCycle Data Services 的开源版本,遵循 LGPL v3 授权,可以免费使用。BlazeDS 为 Flex 提供了基于 AMF 二进制协议的远程调用支持,其作用相当于 Java 的 RMI。有了 BlazeDS,通过简单的配置,一个 Java 接口就可以作为服务暴露给 Flex,供其远程调用。
尽管现有的 EmployeeMgmt 应用程序已经有了 Façade 接口,但这个接口是暴露给 Servlet 使用的,最好能再为 Flex 定义另一个接口 FlexService,并隐藏 Java 语言的特定对象(如 清单 1 所示):
清单 1. FlexService interface
public interface FlexService {
Employee createEmployee(String name, String title, boolean gender, Date birth);
void deleteEmployee(String id);
Employee[] queryByName(String name);
Employee[] queryAll();
}
现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成:
清单 2. FlexServiceImpl class
public class FlexServiceImpl implements FlexService {
private static final Employee[] EMPTY_EMPLOYEE_ARRAY = new Employee[0];
private Facade facade;
public void setFacade(Facade facade) {
this.facade = facade;
}
public Employee createEmployee(String name, String title, boolean gender,
Date birth) {
return facade.createEmployee(name, title, gender, birth);
}
public void deleteEmployee(String id) {
facade.deleteEmployee(id);
}
public Employee[] queryAll() {
return facade.queryAll().toArray(EMPTY_EMPLOYEE_ARRAY);
}
public Employee[] queryByName(String name) {
return facade.queryByName(name).toArray(EMPTY_EMPLOYEE_ARRAY);
}
}
然后,我们将 BlazeDS 所需的 jar 包放至 /WEB-INF/lib/。BlazeDS 需要如下的 jar:
清单 3. BlazeDS 依赖的 Jar
backport-util-concurrent.jar
commons-httpclient.jar
commons-logging.jar
flex-messaging-common.jar
flex-messaging-core.jar
flex-messaging-proxy.jar
flex-messaging-remoting.jar
在 web.xml 中添加 HttpFlexSession 和 Servlet 映射。HttpFlexSession 是 BlazeDS 提供的一个 Listener,负责监听 Flex 远程调用请求,并进行一些初始化设置:
清单 4. 定义 Flex Listener
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
MessageBrokerServlet 是真正处理 Flex 远程调用请求的 Servlet,我们需要将其映射到指定的 URL:
清单 5. 定义 Flex servlet
<servlet>
<servlet-name>messageBroker</servlet-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>messageBroker</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
BlazeDS 所需的所有配置文件均放在 /WEB-INF/flex/ 目录下。BlazeDS 将读取 services-config.xml 配置文件,该配置文件又引用了 remoting-config.xml、proxy-config.xml 和 messaging-config.xml 这 3 个配置文件,所以,一共需要 4 个配置文件。
由于 BlazeDS 需要将 Java 接口 FlexService 暴露给 Flex 前端,因此,我们在配置文件 remoting-config.xml 中将 FlexService 接口声明为一个服务:
清单 6. 定义 flexService 服务
<destination id="flexService">
<properties>
<source>org.expressme.employee.mgmt.flex.FlexServiceImpl</source>
<scope>application</scope>
</properties>
</destination>
服务名称通过 destination 的 id 属性指定,Flex 前端通过该服务名称来进行远程调用。scope 指定为 application,表示该对象是一个全局对象。
然而,按照默认的声明,BlazeDS 会去实例化 FlexService 对象。对于一个 Java EE 应用来说,通常这些服务对象都是被容器管理的(例如,Spring 容器或 EJB 容器),更合适的方法是查找该服务对象而非直接实例化。因此,需要告诉 BlazeDS 通过 Factory 来查找指定的 FlexService 对象,修改配置如下:
清单 7. 通过 factory 定义 flexService
<destination id="flexService">
<properties>
<factory>flexFactory</factory>
<source>flexService</source>
<scope>application</scope>
</properties>
</destination>
现在,Flex 如何才能通过 BlazeDS 调用 FlexService 接口呢?由于 FlexService 对象已经被 Spring 管理,因此,我们需要编写一个 FlexFactory 告诉 BlazeDS 如何找到 Spring 管理的 FlexService 的实例。flexFactory 在 services-config.xml 中指定:
清单 8. 定义 flexFactory
<factories>
<factory id="flexFactory" class="org.expressme.employee.mgmt.flex.FlexFactoryImpl"/>
</factories>
FlexFactoryImpl 实现了 FlexFactory 接口,该接口完成两件事情:
创建 FactoryInstance 对象;
通过 FactoryInstance 对象查找我们需要的 FlexService。
因此,需要一个 FactoryInstance 的实现类,我们编写一个 SpringFactoryInstance,以便从 Spring 的容器中查找 FlexService:
清单 9. SpringFactoryInstance class
class SpringFactoryInstance extends FactoryInstance {
private Log log = LogFactory.getLog(getClass());
SpringFactoryInstance(FlexFactory factory, String id, ConfigMap properties) {
super(factory, id, properties);
}
public Object lookup() {
ApplicationContext appContext = WebApplicationContextUtils.
getRequiredWebApplicationContext(
FlexContext.getServletConfig().getServletContext()
);
String beanName = getSource();
try {
log.info("Lookup bean from Spring ApplicationContext: " + beanName);
return appContext.getBean(beanName);
}
catch (NoSuchBeanDefinitionException nex) {
...
}
catch (BeansException bex) {
...
}
catch (Exception ex) {
...
}
}
}
FlexFactoryImpl 负责实例化 SpringFactoryInstance 并通过 SpringFactoryInstance 的 lookup() 方法查找 FlexService 接口对象:
清单 10. FlexFactoryImpl class
public class FlexFactoryImpl implements FlexFactory {
private Log log = LogFactory.getLog(getClass());
public FactoryInstance createFactoryInstance(String id, ConfigMap properties) {
log.info("Create FactoryInstance.");
SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties);
instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId()));
return instance;
}
public Object lookup(FactoryInstance instanceInfo) {
log.info("Lookup service object.");
return instanceInfo.lookup();
}
public void initialize(String id, ConfigMap configMap) {
}
}
以下是 BlazeDS 查找 FlexService 接口的过程:
BlazeDS 将首先创建 FlexFactory 的实例—— FlexFactoryImpl;
当接收到 Flex 前端的远程调用请求时,BlazeDS 通过 FlexFactory 创建 FactoryInstance 对象,并传入请求的 Service ID。在这个应用程序中,被创建的 FactoryInstance 实际对象是 SpringFactoryInstance;
FactoryInstance 的 lookup() 方法被调用,在 SpringFactoryInstance 中,首先查找 Spring 容器,然后,通过 Bean 的 ID 查找 Bean,最终,FlexService 接口的实例被返回。
注意到 destination 的 id 并没有写死在代码中,而是通过以下语句获得的:
清单 11. 获取 destination 的 ID
properties.getPropertyAsString(SOURCE, instance.getId())
Property 的 SOURCE 属性由 BlazeDS 读取 XML 配置文件获得:
清单 12. 配置 destination 的 id
<destination id="flexService">
<properties>
<factory>flexFactory</factory>
<source>flexService</source>
<scope>application</scope>
</properties>
</destination>
如果您没有使用 Spring 框架,也不要紧,只需修改 FactoryInstance 的 lookup() 方法。例如,对于一个 EJB 来说,lookup() 方法应该通过 JNDI 查找返回远程接口。无论应用程序结构如何,我们的最终目标是向 BlazeDS 返回一个 FlexService 的实例对象。
回页首
开发 Flex 客户端
首先安装 Flex Builder 3,可以在 Adobe 的官方网站获得 30 天免费试用版。然后,打开 Flex Builder 3,创建一个新的 Flex Project,命名为 EmployeeMgmt-Flex:
图 3. 新建 Flex 工程 - 第一步
Flex Project 需要指定 Server 端的配置文件地址:
图 4. 新建 Flex 工程 - 第二步
因此,需要填入 EmployeeMgmt-Server 项目的 web 根目录,该目录下必须要存在 /WEB-INF/flex/。点击“Validate Configuration”验证配置文件是否正确,只有通过验证后,才能继续。默认地,Flex Builder 将会把生成的 Flash 文件放到 EmployeeMgmt-Server 项目的 web/EmployeeMgmt-Flex-debug 目录下。
一个 Flex Project 的目录结构如下:
图 5. Flex 工程的目录结构
用 Flex Builder 做出漂亮的用户界面非常容易。Flex Builder 提供了一个可视化的编辑器,通过简单的拖拽,一个毫无经验的开发人员也能够设计出漂亮的布局。如果熟悉一点 XML 的知识,编辑 MXML 也并非难事。我们设计的 Employee Management 系统界面的最终效果如下:
图 6. 用 Flex Builder 的可视化编辑器设计界面
本文不打算讨论如何编写 Flex 界面,而是把重点放在如何实现远程调用。
为了能在 Flex 中实现远程调用,我们需要定义一个 RemoteObject 对象。可以通过 ActionScript 编码创建该对象,也可以直接在 MXML 中定义一个 RemoteObject 对象,并列出其所有的方法:
清单 13. 定义 flexServiceRO
<mx:RemoteObject id="flexServiceRO" destination="flexService">
<mx:method name="queryAll" result="handleQueryAll(result : ResultEvent)"/>
</mx:RemoteObject>
现在,就可以调用这个名为 flexServiceRO 的 RemoteObject 对象的方法了:
清单 14. 调用 FlexServiceRO.queryAll()
flexServiceRO.queryAll(function(result : ResultEvent) {
var employees = result.result as Array;
});
运行该 Flex Application,雇员信息已经被正确获取了:
图 7. 在浏览器中运行 Flex application
回页首
增强 RemoteObject 对象
通过 RemoteObject 进行调用虽然简单,但存在不少问题:首先,RemoteObject 是一个 Dynamic Class,Flex Builder 的编译器无法替我们检查参数类型和参数个数,这样,在编写 ActionScript 代码时极易出错。此外,接口变动时(这种情况常常发生),需要重新修改 RemoteObject 的定义。此外,Flex 团队需要一份随时修订的完整的 FlexService 接口文档才能工作。
因此,最好能使用强类型的 RemoteObject 接口,让 Flex Builder 的编译器及早发现错误。这个强类型的 RemoteObject 最好能通过 Java EE 应用的 FlexService 接口自动生成,这样,就无需再维护 RemoteObject 的定义。
为了能完成自动生成 RemoteObject 对象,我编写了一个 Java2ActionScript 的 Ant 任务来自动转换 FlexService 接口以及相关的所有 JavaBean。JavaInterface2RemoteObjectTask 完成一个 Java 接口对象到 RemoteObject 对象的转换。使用如下的 Ant 脚本:
清单 15. 生成 ActionScript class 的 Ant 脚本
<taskdef name="genactionscript" classname="org.expressme.ant.JavaBean2ActionScriptTask">
<classpath refid="build-classpath" />
</taskdef>
<taskdef name="genremoteobject"
classname="org.expressme.ant.JavaInterface2RemoteObjectTask">
<classpath refid="build-classpath" />
</taskdef>
<genactionscript
packageName="org.expressme.employee.mgmt"
includes="Employee"
orderByName="true"
encoding="UTF-8"
outputDir="${gen.dir}"
/>
<genremoteobject
interfaceClass="org.expressme.employee.mgmt.flex.FlexService"
encoding="UTF-8"
outputDir="${gen.dir}"
destination="flexService"
/>
转换后的 FlexServiceRO 类拥有 Java 接口对应的所有方法,每个方法均为强类型签名,并添加额外的两个可选的函数处理 result 和 fault 事件。例如,queryByName 方法:
清单 16. 自动生成的 queryByName() 方法
public function queryByName(arg1 : String, result : Function = null,
fault : Function = null) : void {
var op : AbstractOperation = ro.getOperation("queryByName");
if (result!=null) {
op.addEventListener(ResultEvent.RESULT, result);
}
if (fault!=null) {
op.addEventListener(FaultEvent.FAULT, fault);
}
var f : Function = function() : void {
op.removeEventListener(ResultEvent.RESULT, f);
op.removeEventListener(FaultEvent.FAULT, f);
if (result!=null) {
op.removeEventListener(ResultEvent.RESULT, result);
}
if (fault!=null) {
op.addEventListener(FaultEvent.FAULT, fault);
}
}
op.addEventListener(ResultEvent.RESULT, f);
op.addEventListener(FaultEvent.FAULT, f);
op.send(arg1);
}
转换 Java 接口是通过 Interface.as 和 InterfaceMethod.as 两个模板文件完成的,此外,所有在 Java EE 后端和 Flex 之间传递的 JavaBean 对象也通过 JavaBean2ActionScriptTask 自动转换成对应的 ActionScript 类,这是通过 Bean.as 模板完成的。
有了 Java 类到 ActionScript 的自动转换,我们在编写 ActionScript 时,就能享受到编译器检查和 ActionScript 类方法的自动提示了:
图 8. Flex Builder 的代码自动补全
唯一的缺憾是通过反射读取 FlexService 接口时,我们失去了方法的参数名称,因此,FlexServiceRO 的方法参数名只能变成 arg1,arg2 …… 等,要读取 FlexService 接口的方法参数名,只能通过解析 Java 源代码实现。
现在,Java EE 后端开发团队和 Flex 前端开发团队只需协商定义好 FlexService 接口,然后,利用 Java2ActionScript,Flex 团队就得到了强类型的 FlexServiceRO 类,而 Java EE 团队则只需集中精力实现 FlexService 接口。
在开发的前期,甚至可以用硬编码的 FlexService 的实现类。每当 FlexService 变动时,只需再次运行 Ant 脚本,就可以获得最新的 FlexServiceRO 类。这样,两个团队都可以立刻开始工作,仅需要通过 FlexService 接口就可以完美地协同开发。
软件设计师教程 清华大学出版社 软考指定教程
软件设计师教程 清华大学出版社 软考指定教程
软件设计师教程 清华大学出版社 软考指定教程
软件设计师教程 清华大学出版社 软考指定教程
信息系统监理师教程 清华大学出版社 软考指定用书
信息系统监理师教程 清华大学出版社 软考指定用书
信息系统监理师教程 清华大学出版社 软考指定用书
信息系统监理师教程 清华大学出版社 软考指定用书
JavaScript 权威指南(第四版).
JavaScript 权威指南(第四版).
JavaScript 权威指南(第四版).
软件测试与质量保证(Testing&SQA)
软件测试与质量保证(Testing&SQA)
软件测试与质量保证(Testing&SQA)
软件测试与质量保证(Testing&SQA)
Java测试与设计.从单元测试到自动Web测试
Java测试与设计.从单元测试到自动Web测试
Java测试与设计.从单元测试到自动Web测试
Java测试与设计.从单元测试到自动Web测试
软件测试与Junit实践
软件测试与Junit实践
软件测试与Junit实践
软件测试与Junit实践
eclipseme j2me手机开发官方最新插件
eclipseme j2me手机开发官方最新插件
eclipseme j2me手机开发官方最新插件
eclipseme j2me手机开发官方最新插件
J2ME手机移动无线开发最新开发包 WTK Java(TM) Wireless Toolkit 2.5
J2ME WTK的内容和目录结构
2.1 安装过程
在说明WTK文件结构之前,让我们首先把它安装起来。
WTK的安装程序与普通程序一样简单,只有一点需要注意,由于WTK自身并没有附带Java的运行环境JDK,所以,在WTK安装之前你需要安装自己的JDK(我们这里选用的是JDK1.4.2)。
WTK会首先自动检测当前系统已有的Java虚拟机:
然后显示出当前虚拟机所在路径
您在确定无误后,就可以继续了,最后安装成功后,您将得到一个包括多种实用工具的开发包。以下是安装显示的菜单项。
2.2 目录结构
无论哪个版本的WTK都会包括以下几个目录:
appdb目录: RMS数据库信息
apps目录: WTK自带的demo程序
bin目录: J2ME开发工具执行文件
docs目录: 各种帮助与说明文件
lib目录: J2ME程序库,Jar包与控制文件
session目录:性能监控保存信息
wtklib目录: JWTK主程序与模拟器外观
WTK是用来开发MIDP的,为了让MIDlet可以顺利编译和执行,WTK必须具有CLDC和MIDP的类库,WTK可以帮助我们省去额外安装调试这些类库的时间。而不同版本的WTK包含的程序库内容是不一样的,比如说2.0中包含了midpapi.jar, wma.jar, mmapi.jar,而在2.1中则变为了cldcapi10. jar, cldcapi11.jar, midpapi10.jar, midpapi20.jar, wma.jar以及mmapi.jar;在2.2中,wma.jar又细分为wma11.jar, wma20.jar。如果您在开发中需要某个特定的jar包而当前的WTK版本又没有时,您可以简单把这个jar包拷贝如当前WTK的lib文件夹即可。
apps目录中包括了许多Demo程序,为我们演示了J2ME的一些技术实例,这些往往是很好的学习材料。
权限管理系统(Struts+Hibernate+Sql2000)
权限管理系统(Struts+Hibernate+Sql2000)
权限管理系统(Struts+Hibernate+Sql2000)
权限管理系统(Struts+Hibernate+Sql2000)
J2ME手机移动开发大全(资料全面)
J2ME手机移动开发大全(资料全面)
J2ME手机移动开发大全(资料全面)
J2ME手机移动开发大全(资料全面)
dwr实现实时刷新实例
dwr实现实时刷新实例
dwr实现实时刷新实例
Dwr 完整实例-------
Dwr完整实例
Dwr完整实例
Dwr完整实例
dwr-Ajax框架开发所需的最新Jar包及源码和实例
dwr-Ajax框架开发所需的最新Jar包及源码和实例
dwr-Ajax框架开发所需的最新Jar包及源码和实例
dwr官方最新war包(经典实例)
放到TomCat服务器的webapps目录下就可以运行
dwr官方最新war包(经典实例)
dwr官方最新war包(经典实例)
dwr官方最新war包(经典实例)
Ajax+Struts应用(完整源码)
Ajax+Struts应用(完整源码)
Ajax+Struts应用(完整源码)
Ajax+Struts应用(完整源码)
Git-2.23.0-64-bit最新版64位
Git-2.23.0-64-bit最新版64位
常用命令如下:
git config --global user.name “xxxx” 设置用户名
git config --global user.email “xxxx” 设置邮箱
git config user.name 查看用户名
git config user.email 查看邮箱
git config --global user.name “xxxx” 修改用户名
git config --global user.email "
[email protected]" 修改邮箱
java实现图片转pdf文件
参考大家学习,使用步骤和例子,压缩包中有,可以将大量图片转成pdf文件,用扫描仪扫到的图片转成pdf必用
Oracle集群数据库最佳应用架构及实现
Oracle集群数据库最佳应用架构及实现
Oracle集群数据库最佳应用架构及实现
Oracle集群数据库最佳应用架构及实现
人力资源管理系统(需求技术项目开发文档)
人力资源管理系统(需求技术项目开发文档).
人力资源管理系统(需求技术项目开发文档).
大学图书管理系统(j2EE)
大学图书管理系统(j2EE)
大学图书管理系统(j2EE)
SSO(单点登录) 技术的实现
SSO(单点登录) 技术的实现
SSO(单点登录) 技术的实现
数据结构试题大全 ----
数据结构试题大全
数据结构试题大全
数据结构试题大全
DebugBar最新版
DebugBar是一款Internet Explorer插件。它可以用于检查DOM,HTTP,Javascript及HTML代码合法性等。
IEWebDeveloper
一款用于IE浏览器的插件,允许直接地在浏览器窗口中浏览、传输和更新HTML DOM。该软件可以实时分析网页并且显示为一种允许你察看表格风格、Java脚本,表格以及其它网页元素的树形风格。该软件还可以在浏览器中交互式地突出显示被选择的网页元素,因此你可以在实际网页中定位其代码。
IEtester 最新绿色版
FirebugHTML查看和编辑、Javascript控制台、网络状况监视于一体,可以说是开发人员必备扩展之一。Firebug从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。
Firebug最新版
FirebugHTML查看和编辑、Javascript控制台、网络状况监视于一体,可以说是开发人员必备扩展之一。Firebug从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。
IETester 官方最新版下载 V0.4.3 支持WIN7 支持IE9 完全排除崩溃
IETester 最新版下载 V0.4.3 支持WIN7 支持IE9 完全排除崩溃 马上下载
IEtesterV0.4.3中文版 – 调试IE6,IE7,IE8,IE9的CSS兼容性的免费工具
IETester可模拟出不同的IE引擎来帮助设计师兼容css代码 ietester.org
JQuery实战:标签页效果
JQuery实战:标签页效果
JQuery实战:标签页效果
JQuery实战:横向纵向菜单
JQuery实战:横向纵向菜单
JQuery实战:横向纵向菜单
JQuery实战:可以编辑的表格
JQuery实战:可以编辑的表格
JQuery实战:可以编辑的表格
Struts2.x 项目实战
Struts2.x 项目实战
Struts2.x 项目实战
Struts2.x 项目实战
JQuery实战视频教程
JQuery实战视频教程SRC&PPT
JQuery实战视频教程SRC&PPT
JQuery实战视频教程SRC&PPT
官方最新的MySQL 5.1.45 GA数据库下载
该版本升级 InnoDB 插件到 1.0.6 版本,目前 1.0.6 版本的 InnoDB 的质量差不多是 RC 候选发行级别的。另外一些命令行工具各自增加了一些参数选项,详情请看这里。MySQL是一个开放源码的关系数据库管理系统,开发者为瑞典MySQL AB公司,现为Sun公司的一部分。
2009年Oracle宣布收购Sun公司,因此MySQL可能成为Oracle旗下产品。MySQL由于性能高、成 本低、可靠性好,已经成为最流行的开源数据库,被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站 和应用,比如维基百科、Google和Facebook。非常流行的开源软件组合LAMP中的M就是指 MySQL。
DB2 性能优化快速入门
本文是针对 DB2® Universal Database(DB2 UDB)的初学者在遇到 DB2 的性能问题的时候不知道从何分析,从何入手的这一问题,从 DB2 的体系结构介绍开始,由浅入深的讲述了 DB2 性能优化的一些基础知识,简单地介绍调优的原理和工具。同时针对性能上的一些典型问题,如 DML 性能问题 ( 查询和插入操作 ), DDL 性能问题(建表,建索引),并发性问题等等,介绍一种渐进的分析方法,同时结合一些具体的优化案例进行分析以及成型的 DB2 调优工具 (DB2 Performance Expert) 的介绍,使得初学者能够在很短的时间内掌握 DB2 性能优化的基本技巧,并且能够在数据库早期设计时考虑到一些性能因素而防范于未然。
DB2 最佳实践: 性能调优和问题诊断最佳实践
大多数 DB2 系统都经过了性能的演变。首先,不论出于硬件还是软件的观点,该系统首先要能被配置。在多数情况下,这将成为系统在实施后如何运行的基础。其次,系统一经发布,勤勉的数据库管理员(DBA)将监控系统的性能,来监测任何可能的开发问题。如果发现任何问题,我们就进入下一个阶段 - 故障诊断阶段。每个阶段都是基于上一阶段,如果没有适当的准备,我们极有可能需要处理比较困难的问题。
本文介绍了 DB2 系统性能的最优方法。我首先涉及到一些有助于我们确保良好软硬件性能的重要原则。然后我们讨论多种在操作和故障诊断的情况下,有助于我们了解系统性能的监控方法。最后,尽管我们做了最好的准备,性能问题仍然可以降临到我们身上,我们讨论如何逐步地处理它们,并有条不紊的进行