国际 Eclipse多年媳妇近日终于熬成了婆——Eclipse Foundation正式成为Java Community Process(JCP)执行委员会的一员。

之所以这么说,是因为SUN是Java技术的创始者而且仍然主导着Java开发的方向,但SUN却不是Eclipse的一员,而SUN却在JCP中占有重要的一席(SUN是JCP的永久执行委员)。

JCP Program Management Office于当地时间本周二公布了2007 JCP执行委员会的投票结果:Eclipse当选为Java SE/EE (Standard Edition/Enterprise Edition)的执行委员。JCP是始于1998年的组织,它监督Java平台的发展,发展和更新Java技术规范、参考实现(RI)、技术兼容包(TCK)并影响着JSRs(Java Specification Requests)。

实际上,Eclipse 加入JCP,而SUN是少数几个持反对态度者之一,因为SUN更加支持NetBeans。在这方面,IBM、Oracle和BEA都与SUN的意见相左。

“我们很荣幸被选为JCP执行委员,”在周二上午由Eclipse 发布的一份声明中Milinkovich 说“JCP长久以来的成功将有助于Eclipse 的长期发展。我万分期待为推动JCP向更开放、更和谐的方向发展做出积极的参与和努力。”

Sun也为竞争对手致上了欢迎辞。“我们很高兴看到Eclipse Foundation成为JCP的一员,”JCP主席、Sun JCP项目的主管说,“Eclipse 带来的开源技术,将更好地推动JCP向更广阔的方向发展。”

新当选的 Java ME (Micro Edition) 执行委员是Time Warner Cable,再次当选的包括 Intel, Orange France SA, Research in Motion和Samsung Electronics。

成员将于本月27号就任并与12月4号参加第一次大会。每个成员的任期为三年。(csdn)

Posted on November 14, 2007 10:04 PM | | Comments (0) | TrackBacks (0)

台湾SUN每年举办的「JavaTwo专业技术大会」,在今年改为「SUN科技日(Sun Tech Days)」,会中说明SUN在企业应用、行动装置、桌上系统、网络服务、SOA、Ajax、Solaris等领域的技术进展。其中JavaFX是开发者好奇的新技术,可看出SUN诉求提供开发者比Java SE学习门坎低的2D设计技术。

JavaFX分为JavaFX Script与JavaFX Mobile
由于大中华区的SUN科技日,由北京的技术团队主讲,所以台湾的讲师只剩3位。虽然SUN在上午的主题演讲强调Solaris开放源码的成果,不过多数学员关心的却是Java的发展,尤其JavaFX更吸引许多学员的好奇。

SUN中国工程研究院技术传教士(Technology Evangelist)李涛表示,JavaFX分为JavaFX Script与JavaFX Mobile两部分。JavaFX Script是类似JavaScript的脚本语言(Script Language)。SUN推出JavaFX Script希望可以兼顾Java跨平台及脚本语言简易开发的好处,提供开发者快速开发RIA(Rich Interactive Application)的应用。

而JavaFX Mobile目前仍处于概念推广阶段,具体的应用尚未成形,李涛认为:「JavaFX Mobile不是要取代Java ME。」Java ME是手机的开发平台,而JavaFX Mobile则是手机的运行环境,对应的竞争对手是Windows ME、Symbian及Palm等作业平台,至于更明确的细节,预计要到明年的JavaOne才会有更明确的说明。

JavaFX大幅降低设计门坎,但仍缺GUI工具
从李涛提出的范例,可以发现JavaFX Script所设计的效果,其实Java SE同样可以做到,但JavaFX将大幅降低视觉效果的设计门坎。从一段「Hello World」的程序代码,可以看出JavaFX Script的语法简洁许多。

此外,李涛针对JavaFX与Flash的比较说明:「事实上Flash的效果, Java 2D的API也同样做得到,只是难度较高,未来若采用JavaFX会简单很多。」

对Java开发者而言,使用JavaFX Script的好处,在于JavaFX Script支持所有Java的函式库(Library),可在JavaFX Script中穿插Java语法,也可以使用Swing及2D的所有组件。

JavaFX Script的部署是透过Java Web Start下载,客户端只要有约1.5MB的JavaFX执行环境(Run Time Environment)即可执行。

现阶段JavaFX Script的发展仍不算成熟,因为目前只有Reportmill公司推出图形用户界面设计工具──JFXBuilder,但仅支持Linux与Unix操作系统。而SUN的NetBeans目前尚未提供图形化设计功能。

诉求开发与设计使用相同语言
另一个引发关注的问题,是网页开发已存在包括JavaScript、Ruby、Python等多种脚本语言,而SUN再推出JavaFX Script,开发者的学习意愿可能不高。

李涛则强调:「SUN推出JavaFX Script的目的,是希望开发者与设计人员可以使用相同的语言,避免双方沟通不良的问题。」

Java SE 6开放源码原则:开放实作,不开放规格
除了JavaFX外,另一个吸引开发者目光的是Java SE的发展。SUN技术传教士沈卓立在主题演讲中展示Java SE的应用,可以设定酷炫的启动屏幕、资料输入的错误提示机制,及有如动画般的数据筛选效果,都是过去无法想象Java SE可以实现的功能。

为此,台湾SUN教育训练技术顾问陈俊亨特别利用一个小时的课程,预告Java SE未来可能的演进。Java SE 6自2006年11月宣布开放源码后,引发社群热烈回响。事实上,SUN为不使Java语言走向分岐,因此虽然开放Java SE及Java ME的实作(Implementation),但并没有开放Java的语言、规格及TCK(Technology Compatibility Kit)。也就是说社群可调校函式的撰写方法,但规格的制定、测试与发布,主导权仍由SUN与JCP组织掌握。

Java SE 6功能改进很多,SUN声称是桌面应用的一大胜利,不过结局仍是备受社群抨击,所以Java SE 7又做了许多优化,希望可以提升开发Java SE应用的意愿。

Java SE 7提出一个新的Superpackage的架构,帮助开发者突破Public、Private及Protect,更进一步地管理程序存取范围。此外,目前Java SE 6透过Rhino平台可以支持JavaScript,到了Java SE 7,ByteCode的型态将有所改变,支持Dynamically Typed Language,有助于推行其他Script语言移植到JDK。

JRE至今最为人垢病的问题,仍在下载的档案大,及安装时间很长。JRE 6甚至超过10MB,于是JRE 7希望改善安装时间,因此JRE将模块化,让使用者只下载更新或需要的部分,不必整包下载。(ITHome)

Posted on November 7, 2007 2:13 PM | | Comments (0) | TrackBacks (0)

国际 红帽正式签约加入SUN的开源Java 标准版(SE)项目——OpenJDK中,为此,红帽将会把自己在Linux上的Java开发成果归入这一项目中。

红帽JBoss首席产品总监Shaun Connolly说,红帽已经签署了SUN的OpenJDK捐献条约,并将其IcedTea项目归入OpenJDK中。

IcedTea本是红帽Java SE JDK方面的一个项目。它将Fedora 项目和Java的核心技术融合在Linux环境下,是OpenJDK项目中少数几个非开源部分的代替者。

红帽同时还签署了OpenJDK Community Test Compatibility Kit (TCK),从而可以构建OpenJDK应用并测试其兼容性。Java SE JDK作为OpenJDK的基础,包括Java运行环境(JRE)以及Java进程和应用的开发具,这个软件服务于Java桌面应用。

作为OpenJDK项目签约的一部分,红帽还将建立与OpenJDK兼容的Enterprise Linux 版本,同时还将使用OpenJDK来为JBoss Enterprise Middleware 创建一个runtime。

起先,红帽与SUN本是竞争对手,尤其在OS市场。但由于红帽在Java开发方面投入了较大精力,而且在开源方面的脚步已不仅限于Linux和JBoss,于是Java也越来越成为红帽整个产品中重要的部分。【CSDN 】

Posted on November 6, 2007 4:50 PM | | Comments (0) | TrackBacks (0)

架构概览

通常一个 Web 搜索引擎的架构分为前端和后端两部分,就如图一中所示。在前端流程中,用户在搜索引擎提供的界面中输入要搜索的关键词,这里提到的用户界面一般是一个带有输入框的 Web 页面,然后应用程序将搜索的关键词解析成搜索引擎可以理解的形式,并在索引文件上进行搜索操作。在排序后,搜索引擎返回搜索结果给用户。在后端流程中,网 络爬虫或者机器人从因特网上获取 Web 页面,然后索引子系统解析这些 Web 页面并存入索引文件中。如果你想利用 Lucene 来创建一个 Web 搜索应用程序,那么它的架构也和上面所描述的类似,就如图一中所示。

Figure 1. Web 搜索引擎架构
Web搜索引擎架构

Continue reading "用 Lucene 加速 Web 搜索应用程序的开发"
Posted on October 26, 2007 3:43 PM | | Comments (0) | TrackBacks (0)

During the past few weeks I've had discussions with my colleague Geva Perry trying to answer the question Why most large-scale Web sites are not written in Java?

There is a lot of information in the blogosphere describing the architecture of many popular sites, such as Google, Amazon, eBay, LinkedIn, TypePad, WikiPedia and others.

The folks at Pingdom compiled some of this information, based on information from High-Scalability:

Scalablewebarchitecture_4

Looking at these architectures some observations come to mind: Most of these sites are using LAMP as the core runtime stack. Some have gone so far as to develop their own file system (Google, GFS). Some are using caching to solve the database bottleneck (memcached and the like). Many of them were forced to develop these solutions themselves, as at the time there was no ready-made alternative that could meet their requirements.

The application stack of these Web applications is very different from the stack that mission-critical applications in the financial world are built with. In the financial world, Java -- and to a lesser degree J2EE -- is used extensively. In recent years scalability requirements in capital markets led to a rapid shift in the middleware stack, introducing Compute Grid solutions for virtualization of CPU resources, enabling parallelization of batch applications. Data Grids were also introduced, enabling the virtualization of memory resources. Spring is becoming the common development framework in this world. At GigaSpaces, we're seeing more and more cases where Spring acts as a complete alternative to J2EE.

If we examine both worlds, we can see that both are facing similar challenges related to scalability. Not surprisingly, both ended up introducing similar solutions for addressing the scalability challenges:

On the Data Tier we see the following:

1. Adding a caching layer to take advantage of memory resources availability and reduce I/O overhead
2. Moving from a database-centric approach to partitioning, aka shards  

On the Business Logic Tier:

3. Adding parallelization semantics to the application tier (e.g., MapReduce)
4. Moving to scale-out application models to achieve linear scalability
5. Moving away from the classic two-phase commit and XA for transaction processing  (See: Lessons from Pat Helland: Life Beyond Distributed Transactions)

While there are many similar challenges, and to a certain degree, similar architectures, it seems that both worlds (Web and Financial) took different routes as it relates to the application stack.

Over at the High-Scalability site, someone posted the question: Why doesn't anyone use j2ee?
The answer given in that post can be summarized as follows:

1. LAMP provides a cost-effective solution (most of it relies on *free* open source stack).
2. Java is still used, but not as the primary language, i.e., it is used as one component either in the back-end or the front-end (e.g., servlets).

I have my own thoughts on this matter, but I'll be very interested to see if anyone has any reasonable explanation for it, before I jump in.

Thoughts?

UPDATE (October 11, 2007): This post generated a very active debate in several places, including TheServerSide, and more recently, on Artima. In this post I respond and give some additional thoughts.

原文链接:http://natishalom.typepad.com/nati_shaloms_blog/2007/10/why-most-scalab.html

Tags:
Posted on October 22, 2007 2:58 PM | | Comments (0) | TrackBacks (0)

10月22日国际报道 Sun的Java牢牢抓住的一个领域是手机,但移动版的Java最终将被标准版Java取代。

Sun副总裁,Java之父James Gosling说,曾经主要在台式机上流行的Java标准版(SE)会逐渐取代Java微型版(ME),将更多计算能力带进小型设备中。

Gosling上周说:“我们正在将一切汇集到Java标准版规范上。手机和电视机顶盒正在壮大。这种集中过程将耗时数年。”

首当其冲的例子是Sun的JavaFX Mobile,尽管它缺失了诸如“公共对象请求代理结构”(CORBA)等少量部件,这套软件包括了几乎全部Java标准版内容。

Sun对Java的预期符合近来的架构趋势,最明显的就是苹果的iPhone,它更多的象缩小了的苹果电脑而非通常的手机。特别是,苹果使用了它普通版的Safari网页浏览器,以便让用户尽可能多的获得桌面互联网体验。

同时,英特尔正在努力将运行PC的x86处理器带进移动设备。它与包括Ubuntu Mobile和Mobile Firefox在内的开源运动一道正在成为气候。

迁移到Java标准版不会在一夜之间完成。Sun软件执行副总裁Rich Green说,他预计,使用移动版Java的智能手机至少会在市场上存在10年。

但这种变化已经在进行。Gosling说:“Java移动版全部工作已经越来越向Java标准版靠拢。”

整合移动Java

转向Java标准版可以解决Java移动版一个老问题:分散性。

Java移动版是一系列功能的集合-基本核心之上是层层的可选层-每层由“Java规范请求”(JSR)来定义、对于Java移动版,存在众多功能的JSR。这种特点给Java最初的宗旨“一次编译,到处运行”造成了挑战。

之所以这么讲,是因为按照Java原则编写出的程序可以在任何安装有Java虚拟机(JVM)的电脑上运行。JVM是一种软件基础,它能够让普通 Java程序在一定的电脑上运行。但是,由于Java移动版扩展的多样性,很难保证针对一种手机编写出来的程序能在另外的手机上运行。

Java标准版具有更丰富的一套功能,因此使用它来代替Java移动版至少可以保证Java软件便携性的一些承诺。

JavaFX Mobile是Sun JavaFX计划的组成部分,它于5月份在JavaOne会上宣布。

Gosling说:“JavaFX可能是Sun迄今为止经历过的最大,最复杂的软件工程开发。”以下就是对JavaFX构成的快速介绍:

Java FX介绍

Java FX术语令人抓狂。Java SE这个词已经存在近10年,我们还能应付它。

Java 6 Update N,它正式名称叫做“用户Java运行时环境”(JRE),它主要通过改进网页浏览器插件来让一般电脑用户能够更容易使用Java标准版。

在Update N功能中,当你碰到一个Java网页,电脑会预载Java以减少你的等待时间。通过装载基本的核心(一般少于4MB)部件,它的安装过程会相当快,随后再升级全部12MB的Java软件集合。它利用了Windows的Direct3D图形功能。并且它还包括了更多图形用户界面,能够在多个操作系统平台上实 现统一的外观,

Sun公司Java SE客户架构部的Chet Haase说,Update N应该在12月进入测试期,几个月之后提供给用户。

然后是JavaFX Script。这是一种新的脚本语言,它专门负责一些迷人的用户界面动作,比如透明化以及其它主流网页浏览器脚本语言,JavaScript很难实现的效果。Gosling说,JavaFX Script更多用于设计用途,而不是工程。

当然,你还需要东西去编译它,JavaFX编译器将人们的代码转化为计算机能够执行的指令。

最后是上面谈到过的Java FX Mobile。Gosling说,这种软件出现的部分原因是回应希望获得更统一基础的Java移动版开发者的请求。另外一个和Java移动版不同的地方 是,Sun将在ava FX中预制二进制程序;ava移动版一般是一套源代码,程序员必须编进有用的东西才行。

竞争

Gosling和Java已经成为一种再度流行起来的理念的先驱:“富因特网应用程序”(RIA),即软件在网页浏览器中运行,但它比一般的网页功能更多,更精彩。

Java已经在运行服务器软件以及手机之上的游戏运行方面开拓出道路出来,但Java当初的一个承诺是将网页浏览器变为复杂软件基础。

利用Ajax,Adobe的综合运行时(代号Apollo)以及微软的Silverlight及Google的Gears,更多的富因特网应用程序正在出现。

Gosling认为,JavaFX也存在机会,他列举出的几点优势是:更丰富的用户界面,更快的性能,更强大更容易被接受的语言,更好的离线功能以及安全性。

Tags:
Posted on October 22, 2007 9:56 AM | | Comments (0) | TrackBacks (0)

FreeMarker概述

  • FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写
  • Template + data model = output
  • Hello world

  • FreeMarkerTest.java
 
import java.io.StringWriter;import java.util.HashMap;import java.util.Locale;
 
import freemarker.template.Configuration;import freemarker.template.Template;
 
publicclass FreeMarkerTest {
 
publicstaticvoid main(String[] args){
FreeMarkerTest test = new FreeMarkerTest();
test.sayHello("Hermit");
}
 
publicvoid sayHello(String name){
Configuration freemarkerCfg = new Configuration();
freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/");
 
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
Template template;
Locale.setDefault(Locale.ENGLISH);
try{
template = freemarkerCfg.getTemplate("Hello.ftl");
template.setEncoding("UTF-8");
HashMap root = newHashMap();
root.put("user", name);
 
StringWriter writer = newStringWriter();
template.process(root, writer);
System.out.println(writer.toString());
}catch(Exception e){
e.printStackTrace();
}}
 
 
 
}
 
  • Hello.ftl
 
 
Hello ${user}!
 
 
  • 输出

Hello Hermit!


空值的处理

在我们的程序中难免会碰到值为空的时候,如果用一个空值直接去替换模板中的标记,freemarker会毫不犹豫的抛出异常,并把错误信息直接写到输出结果里。为了对付这种情况我们有两种写法

  • 模板
 
Hello ${user!}!
Hello ${user?if_exists}
Hello ${user!'your name'}!
Hello ${user?default('your name')}
 
  • 程序
 
test.sayHello(null);
 
  • 输出
 
Hello !
Hello your name!
Hello
Hello your name
 

freemarker国际化模板

freemarker支持多语言国际化,只要把模板名称按照java资源文件的写法就可以了,也就是name_语言_国家地区.ftl 如果找不到对应的语言,就会用默认语言的模板。

  • 程序
 
import java.io.StringWriter;import java.util.HashMap;import java.util.Locale;
 
import freemarker.template.Configuration;import freemarker.template.Template;
 
publicclass FreeMarkerTest {
 
publicstaticvoid main(String[] args){
FreeMarkerTest test = new FreeMarkerTest();
test.sayHello("hermit",Locale.CHINA);
test.sayHello("hermit",Locale.ENGLISH);
}
 
publicvoid sayHello(String name,Locale locale){
Configuration freemarkerCfg = new Configuration();
freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/");
 
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
Template template;
Locale.setDefault(Locale.ENGLISH);
try{
template = freemarkerCfg.getTemplate("Hello.ftl",locale);
template.setEncoding("UTF-8");
HashMap root = newHashMap();
root.put("user", name);
 
StringWriter writer = newStringWriter();
template.process(root, writer);
System.out.println(writer.toString());
}catch(Exception e){
e.printStackTrace();
}
}

  
}
 
  • 默认语言模版:Hello.ftl
Hello ${user!}! 
中文模版:Hello_zh_CN.ftl
你好 ${user!}!

输出
你好 hermit!
Hello hermit!
 

在struts项目中使用freemarker

1、引入freemarker.jar
2、web.xml加入
	<!-- FreeMarker view servlet (to replace JSP) -->
<servlet>
<servlet-name>freemarker</servlet-name><servlet-class>
freemarker.ext.servlet.FreemarkerServlet
</servlet-class>
 
<!-- FreemarkerServlet settings: -->
<init-param>
<param-name>TemplatePath</param-name>
<param-value>
/</param-value>
</init-param>
<init-param>
<param-name>NoCache</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>ContentType</param-name>
<param-value>text/html</param-value>
</init-param>

 
<!-- FreeMarker settings: --><init-param><param-name>template_update_delay</param-name><param-value>0</param-value>
<!-- 0 is for development only! Use higher value otherwise. -->

</init-param>
<init-param><param-name>default_encoding</param-name>
<param-value>
utf-8</param-value></init-param>
<init-param><param-name>locale</param-name><param-value>en_US</param-value></init-param>
<init-param>
<param-name>number_format</param-name><param-value>0.##########</param-value></init-param>
 
<load-on-startup>1</load-on-startup></servlet>
 
<servlet-mapping><servlet-name>freemarker</servlet-name><url-pattern>*.ftl</url-pattern></servlet-mapping>
 
3、一个示例页面
 
<html><head><title>Say Hello</title><METAHTTP-EQUIV="Content-Type"CONTENT="text/html; charset=utf-8"></head><body><h1>Hello ${user}!</h1></body></html>
 

我们完全可以用freemarker的模板取代JSP页面。用freemarker的模板看起更简洁,可读性更强。比如现在struts2的UI标签就是用freemarker做的。

freemarker用struts标签做国际化

  • 示例模板
<#assign  html =JspTaglibs["/WEB-INF/struts-html.tld"]><#assign  bean =JspTaglibs["/WEB-INF/struts-bean.tld"]><#assign  logic =JspTaglibs["/WEB-INF/struts-logic.tld"]><html><head><title> FreeMarker Struts Example </title><metahttp-equiv ="Content-type"content ="text/html; charset=utf-8"></ head ><body><@bean.message key ="hello"  arg0 ="hermit"/></body></html> 

主要是引入标签的时候要这样写:

<#assign  html =JspTaglibs["/WEB-INF/struts-html.tld"]> 

freemarker直接使用资源文件进行多语言国际化

  • 程序
import java.io.StringWriter;import java.util.HashMap;import java.util.Locale;import java.util.ResourceBundle;
 
import freemarker.ext.beans.BeansWrapper;import freemarker.ext.beans.ResourceBundleModel;import freemarker.template.Configuration;import freemarker.template.Template;
 
publicclass FreeMarkerTest {
 
publicstaticvoid main(String[] args){
FreeMarkerTest test = new FreeMarkerTest();
test.sayHello("hermit",Locale.CHINA);
test.sayHello("hermit",Locale.ENGLISH);
}
 
publicvoid sayHello(String name,Locale locale){
Configuration freemarkerCfg = new Configuration();
freemarkerCfg.setClassForTemplateLoading(this.getClass(), "/");
 
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
Template template;
Locale.setDefault(Locale.ENGLISH);
try{
template = freemarkerCfg.getTemplate("Hello.ftl");
template.setEncoding("UTF-8");
HashMap root = newHashMap();
root.put("user", name);
ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("ApplicationResources",locale);
ResourceBundleModel rsbm = new ResourceBundleModel(RESOURCE_BUNDLE,new BeansWrapper());
root.put("bundle", rsbm);
StringWriter writer = newStringWriter();
template.process(root, writer);
System.out.println(writer.toString());
}catch(Exception e){
e.printStackTrace();
}}
 
 
 
}

模板
${bundle("hello","hermit")} 

默认语言资源文件
hello=Hello {0}\! 

中文资源文件

hello=你好 {0}\!
  • 输出
你好 hermit!
Hello hermit!

关键的地方就是用ResourceBundleModel把ResourceBundle转换一下。

常用的2种加载模板的方式

  • 普通java类根据当前class上下文环境加载模板
cfg.setClassForTemplateLoading(this.getClass(), "/");
  • 在web项目中根据servlet上下文环境加载模板
cfg.setServletContextForTemplateLoading(this.getServlet().getServletContext(), "/");
Posted on October 21, 2007 5:50 PM | | Comments (0) | TrackBacks (0)

Quercus is Caucho Technology's 100% Java implementation of PHP 5 released under the Open Source GPL license. Quercus comes with many PHP modules and extensions like PDF, PDO, MySQL, and JSON. Quercus allows for tight integration of Java services with PHP scripts, so using PHP with JMS or Grails is a quick and painless endeavor.

With Quercus, PHP applications automatically take advantage of Java application server features just as connection pooling and clustered sessions.

Quercus implements PHP 5 and a growing list of PHP extensions including APC, iconv, GD, gettext, JSON, MySQL, Oracle, PDF, and Postgres. Many popular PHP application will run as well as, if not better, than the standard PHP interpreter straight out of the box. The growing list of PHP software certified running on Quercus includes DokuWiki, Drupal, Gallery2, Joomla, Mambo, Mantis, MediaWiki, Phorum, phpBB, phpMyAdmin, PHP-Nuke, Wordpress and XOOPS.

Quercus presents a new mixed Java/PHP approach to web applications and services where Java and PHP tightly integrate with each other. PHP applications can choose to use Java libraries and technologies like JMS, EJB, SOA frameworks, Hibernate, and Spring. This revolutionary capability is made possible because 1) PHP code is interpreted/compiled into Java and 2) Quercus and its libraries are written entirely in Java. This architecture allows PHP applications and Java libraries to talk directly with one another at the program level. To facilitate this new Java/PHP architecture, Quercus provides and API and interface to expose Java libraries to PHP.

The Quercus .war file can be run on Java application servers such as Glassfish, i.e. it can be run outside of Resin. This .war file includes the Quercus interpreter and the PHP libraries.

http://quercus.caucho.com/

Posted on October 17, 2007 11:27 AM | | Comments (0) | TrackBacks (0)

FeedBurner(以下简称FB,呵呵)我想应该是大家耳熟能详的一个名字,在国内我们有一个同样的服务商,叫做FeedSky。在2004年7 月份,FB的流量是300kbps,托管是5600个源,到2005年4月份,流量已经增长到5Mbps,托管了47700个源;到2005年9月份流量 增长到20M,托管了109200个源,而到2006年4月份,流量已经到了115Mbps,270000个源,每天点击量一亿次。
  
  FB的服务使用Java实现,使用了Mysql数据库。我们下面来看一下FB在发展的过程中碰到的问题,以及解决的方案。
  
  在2004年8月份,FB的硬件设备包括3台Web服务器,3台应用服务器和两台数据库服务器,使用DNS轮循分布服务负载,将前端请求分布到三台 Web服务器上。说实话,如果不考虑稳定性,给5600个源提供服务应该用不了这么多服务器。现在的问题是即使用了这么多服务器他们还是无法避免单点问 题,单点问题将至少影响到1/3的用户。FB采用了监控的办法来解决,当监控到有问题出现时及时重启来避免更多用户受到影响。FB采用了Cacti (http://www.cacti.net)和Nagios(http://www.nagios.org)来做监控。
  
  FB碰到的第二个问题是访问统计和管理。可以想象,每当我们在RSS阅读器里点击FB发布的内容,都需要做实时的统计,这个工作量是多么的巨大。大量 写操作将导致系统的效率急剧下降,如果是Myisam表的话还会导致表的死锁。FB一方面采用异步写入机制,通过创建执行池来缓冲写操作;只对本日的数据 进行实时统计,而以前的数据以统计结果形式存储,进而避免每次查看访问统计时的重复计算。所以每一天第一次访问统计信息时速度可能会慢,这个时候应该是 FB在分析整理前一天的数据,而接下来的访问由于只针对当日数据进行分析,数据量小很多,当然也会快很多。FB的Presentation是这样写,但我 发现好像我的 FB里并没有今天实时的统计,也许是我观察的不够仔细-_-!
  
  现在第三个问题出现了,由于大多数的操作都集中在主数据库上,数据库服务器的读写出现了冲突,前面提到过Myiasm类型的数据库在写入的时候会锁 表,这样就导致了读写的冲突。在开始的时候由于读写操作比较少这个问题可能并不明显,但现在已经到了不能忽视的程度。解决方案是平衡读写的负载,以及扩展 HibernateDaoSupport,区分只读与读写操作,以实现针对读写操作的不同处理。
  
  现在是第四个问题:数据库全面负载过高。由于使用数据库做为缓存,同时数据库被所有的应用服务器共享,速度越来越慢,而这时数据库大小也到了 Myisam的上限-4GB,FB的同学们自己都觉得自己有点懒。解决方案是使用内存做缓存,而非数据库,他们同样使用了我们前面推荐的 memcached,同时他们还使用了Ehcache(http://ehcache.sourceforge.net/),一款基于Java的分布式缓 存工具。
  
  第五个问题:流行rss源带来大量重复请求,导致系统待处理请求的堆积。同时我们注意到在RSS源小图标有时候会显示有多少用户订阅了这一RSS源, 这同样需要服务器去处理,而目前所有的订阅数都在同一时间进行计算,导致对系统资源的大量占用。解决方案,把计算时间错开,同时在晚间处理堆积下来的请 求,但这仍然不够。
  
  问题六:状态统计写入数据库又一次出问题了。越来越多的辅助数据(包括广告统计,文章点击统计,订阅统计)需要写入数据库,导致太多的写操作。解决方案:每天晚上处理完堆积下来的请求后对子表进行截断操作:
  
  – FLUSH TABLES; TRUNCATE TABLE ad_stats0;
  
  这样的操作对Master数据库是成功的,但对Slave会失败,正确的截断子表方法是:
  
  – ALTER TABLE ad_stats TYPE=MERGE UNION=(ad_stats1,ad_stats2);
  
  – TRUNCATE TABLE ad_stats0;
  
  – ALTER TABLE ad_stats TYPE=MERGE UNION=(ad_stats0,ad_stats1,ad_stats2);
  
  解决方案的另外一部分就是我们最常用的水平分割数据库。把最常用的表分出去,单独做集群,例如广告啊,订阅计算啊,
  
  第七个问题,问题还真多,主数据库服务器的单点问题。虽然采用了Master-Slave模式,但主数据库Master和Slave都只有一台,当 Master出问题的时候需要太长的时间进行Myisam的修复,而Slave又无法很快的切换成为Master。FB试了好多办法,最终的解决方案好像 也不是非常完美。从他们的实验过程来看,并没有试验Master-Master的结构,我想Live Journal的Master-Master方案对他们来说应该有用,当然要实现Master-Master需要改应用,还有有些麻烦的。
  
  第八个问题,停电!芝加哥地区的供电状况看来不是很好,不过不管好不好,做好备份是最重要的,大家各显神通吧。
  
  这个Presentation好像比较偏重数据库,当然了,谁让这是在Mysql Con上的发言,不过总给人一种不过瘾的感觉。另外一个感觉,FB的NO们一直在救火,没有做系统的分析和设计。
  
  最后FB的运维总监Joe Kottke给了四点建议:
  
  1、 监控网站数据库负载。
  
  2、 “explain”所有的SQL语句。
  
  3、 缓存所有能缓存的东西。
  
  4、 归档好代码。
  
  最后,FB用到的软件都不是最新的,够用就好,包括:Tomcat5.0,Mysql 4.1,Hibernate 2.1,Spring,DBCP。
  
  文章参考了Joe Kottke在MySQL Users Conference 2006上的发言。

Posted on October 17, 2007 10:37 AM | | Comments (0) | TrackBacks (0)

Spring Framework 【Java开源 J2EE框架】
Spring 是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的 Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了 Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。 Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的 aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器 集成的强大而灵活的MVC Web框架。【SpringIDE:Eclipse平台下一个辅助开发插件】.

WebWork 【Java开源 Web框架】
WebWork 是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.1,现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。 Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。 Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。 WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成 Action(业务层Action类), session(会话)application(应用程序)范围的映射,request请求参数映射。WebWork2支持多视图表示,视图部分可以使用 JSP, Velocity, FreeMarker, JasperReports,XML等。在WebWork2.2中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上. 【EclipseWork:用于WebWork辅助开发的一个Eclipse插件】

Struts 【Java开源 Web框架】
Struts 是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一 年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个 非常不错的应用框架。【StrutsIDE:用于Struts辅助开发的一个Eclipse插件】

Hibernate 【Java开源 持久层框架】
Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命 意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Eclipse平台下的Hibernate辅助开发工 具:【Hibernate Synchronizer】【MiddlegenIDE】

Quartz 【Java开源 日程安排(Job Schedulers)】
Quartz 是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个, 甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 1.5.0。

Velocity 【Java开源 模板引擎】
Velocity 是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循 MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码 从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当 作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。 【VeloEclipse :Velocity在Eclipse平台下的一个辅助开发插件】

IBATIS 【Java开源 持久层框架】
使 用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。相对Hibernate等 “全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显 得别具意义。

Compiere ERP 【Java开源 ERP与客户关系管理】
这一高价值的商业应用程序,易于安装、易于实 施、易于使用。只需要短短几个小时,您就可以使用申购-采购-发票-付款、报价-订单-发票-收款、产品与定价、资产管理、客户关系、供应商关系、员工关 系、经营业绩分析等强大功能了!功能未减,实施时间缩减到 4 小时。最重要的是:这一高价值的商业应用程序是免费的!可以自行安装和实施这套系统(如果您略懂 Oracle 和 Java 技术)。
中文站点:
http://www.compiere-china.com/

Roller Weblogger   【Java开源 博客(Blog)】
这 个weblogging 设计得比较精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模 板,RSS syndication,blogroll管理和提供一个XML-RPC 接口。

displytag 【Java开源 Jsp标签库】
与Struts结合使用最出名的一个tag主要是显示表格数据很漂亮、完善。

JFreeChart 【Java开源 报表制作】
JFreeChart它主要是用来制作各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

Eclipse 【Java开源 开发工具】
Eclipse平台是IBM向开发源码社区捐赠的开发框架,它之所以出名并不是因为IBM宣称投入开发的资金总数 —4千万美元,而是因为如此巨大的投入所带来的成果:一个成熟的、精心设计的以及可扩展的体系结构。

Liferay 【Java开源 门户系统】
代 表了完整的J2EE应用,使用了Web、EJB以及JMS等技术,特别是其前台界面部分使用Struts 框架技术,基于XML的portlet配置文件可以自由地动态扩展,使用了Web Services来支持一些远程信息的获取,使用 Apahce Lucene实现全文检索功能。
主要特点:
  1、提供单一登陆接口,多认证模式(LDAP或SQL);
  2、管理员能通过用户界面轻松管理用户,组,角色;
  3、用户能可以根据需要定制个性化的portal layout;
  4、能够在主流的J2EE应用服务器上运行,如JBoss+Jetty/Tomcat,JOnAS;
  5、支持主流的数据库,如PostgreSQL,MySQL;
  6、使用了第三放的开源项目,如Hibernate, Lucene, Struts;
  7、支持包括中文在内的多种语言;
  8、采用最先进的技术 Java, EJB, JMS, SOAP, XML;

JetSpeed 【Java开源 门户系统】
Jetspeed 是一个开放源代码的企业信息门户(EIP)的实现, 使用的技术是Java和XML. 用户可以使用浏览器, 支持WAP协议的手机或者其它的设备访问Jetspeed架设的信息门户获取信息. Jetspeed扮演着信息集中器的角色, 它能够把信息集中起来并且很容易地提供给用户.
Jetspeed具有如下的特征:

* 即将成为标准化的Java Portlet API
* 基于模板的布局, 包括JSP和Velocity
* 通过开放的内容同步技术支持远程XML内容交换
* 定制默认的主页
* 使用数据库进行用户认证
* 内存缓存技术, 加快页面的响应
* 通过Rich Site Summary技术, 支持同步内容
* 和Cocoon, WebMacro, Velocity集成.
* Wireless Markup Language (WML) 支持
* 使用XML格式的配置文件注册portlet.
* 完整的Web Application Archive (WAR) 支持
* Web应用程序开发的基础设施
* 可以在本地缓存远程内容
* 与Avantgo同步
* 可移植到所有支持JDK1.2和Servlet 2.2的平台
* 与Turbine模块和服务集成
* 可以根据用户, 安装媒体类型和语言的不同设定, 产生不同的个性化服务
* 持续化服务使得所由的portlet能够容易的存储每个用户的状态, 页面和portlet
* 使用皮肤技术使得用户可以选择portlet的颜色和显示属性
* 自定义功能是的管理员可以选择portlet以及定义个人页面的布局
* 在数据库中存储PSML
* 通过Jetspeed的安全portlets管理用户, 组,角色和权限
* 基于角色对访问portlet进行控制


JOnAS 【Java开源 EJB服务器】
JOnAS 是一个开放源代码的J2EE实现,在ObjectWeb协会中开发。整合了Tomcat或Jetty成为它的Web容器,以确保符合Servlet 2.3和JSP 1.2规范。JOnAS服务器依赖或实现以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail 。

Turbine 【Java开源 Web框架】
Turbine是基 于Servlet的框架包,也是开放源代码Jakarta项目。目前还没有关于Turbine的大量文档。它类似于Struts,但是有一些主要区别。突 出的一点就是它并没有与JSP耦合。Turbine的特点是它提供了大量可重用的组件。此框架包中包含了大量组件,但是这些组件是离散的。它似乎应该给出 更多的组件库,但是由于它缺少文档,所以很难掌握完整的体系结构。

Tapestry 【Java开源 Web框架】
Tapestry 是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html 标记。其中jwc的意思是Java Web Component。Tapestry使得java代码与html完全分离,利用这个框架开发大型应用变得轻而易举。并且开发的应用很容易维护和升级。 Tapestry支持本地化,其错误报告也很详细。Tapestry主要利用javabean和xml技术进行开发。【Spindle:Tapestry 辅助开发Eclipse插件】.

Lucene 【Java开源 搜索引擎】
Apache Lucene是一个开放源程序的搜寻器引擎,利用它可以轻易地为Java软件加入全文搜寻功能。Lucene的最主要工作是替文件的每一个字作索引,索引 让搜寻的效率比传统的逐字比较大大提高,Lucen提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是 使使用者可以随时应自已需要自订其功能。

iText 【Java开源 PDF类库】
iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。

Beanshell 【Java开源 脚本语言】
Beanshell 是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性。BeanShell执行标准Java语句和 表达式,另外包括一些脚本命令和语法。它将脚本化对象看作简单闭包方法(simple method closure)来支持,就如同在Perl和JavaScript中的一样。 它具有以下的一些特点:使用Java反射API以提供Java语句和表达式 的实时解释执行;可以透明地访问任何Java对象和API;可以在命令行模式、控制台模式、小程序模式和远程线程服务器模式等四种模式下面运行;与在应用 程序中一样,可以在小程序中(Applet)正常运行(无需编译器或者类装载器);非常精简的解释器jar文件大小为175k

OpenCms 【Java开源 内容管理系统(CMS)】
OpenCms 是一个J2EE的产品,它是用Java写成的。它和Tomcat捆绑在一起。但是也能够使用ATG Dynamo、WebLogic和WebSphere。OpenCms支持多种RDBMS来保存内容,包括Oracle、SQL Server、Sybase和mySQL。新版本提供了一个新的模板引擎,JSP支持,一种新的连接管理系统,提高了稳定性。

JUnit 【Java开源 Java测试工具】
JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功 能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

opencrx 【Java开源 ERP与客户关系管理】
opencrx 很容易与你现存的系统集成 (ERP, IVR, CTI, ...)是你对你以前投资的最大保护而且openCRX支持大多数通用技术,例如 RMI, CORBA, JMS, SOAP, 以及 JCA; openCRX也包括了支持典型插件的智能前台,例如文档管理,库存跟踪, 设备管理,等. openCRX 可以运行于任意J2EE兼容的应用服务器 (e.g. JBoss, BEA WebLogic or IBM WebSphere) 和主流数据库 (e.g. MaxDB, Firebird, PostgreSQL, MS SQL, Oracle, or IBM DB2). 容易定制 基于 XML 的定制:径直的,迅速的以及可行的(包括多语言特性) 容易扩展写下你自己的工作流,或者发展可扩展的—得益于openCRX的基于组件的体系和像 J2EE,MDA 等的开放标准,这是一个很简单的任务。(摘自
http://www.opencrx.com.cn/crx/

BlueJ 【Java开源 开发工具】
BlueJ是一个专门为入门级教学设计的JavaTM 开发环境。它是由澳大利亚墨尔本Monash大学BlueJ小组设计并开发的。

XWiki 【Java开源 Wiki引擎】
XWiki是一个强大的Java开源的Wiki引擎。它支持一些受欢迎的特性如:
* 内容管理(浏览/编辑/预览/保存),
* 支持附件,
* 版本控制,
* 全文本搜索,
* 权限管理
* 使用Hibernate进行数据存储,
* RSS输出与显示外部的RSS feeds,
* 多语言支持,
* 提供XML/RPC的API,
* WYSIWYG HTML编辑器,
* 导出为PDF
* Groovy脚本支持等等....。

EJBCA 【Java开源 网络服务器】
EJBCA是一个全功能的CA系统软件,它基于J2EE技术,并提供了一个强大的、高性能并基于组件的CA。EJBCA兼具灵活性和平台独立性,能够独立使用,也能和任何J2EE应用程序集成。

Laszlo 【Java开源 XML用户界面工具包】
利用OpenLaszlo免费平台可以快速地,简单地开发漂亮Web 应用程序。这些Web应用程序可以运行在当前任何流行的浏览器与桌面操作系统。它只需要一个XML文件。【IDE4Laszlo:Eclipse下的辅助开发工具】

JXTA 【Java开源 其它开源项目】
Sun微系统公司公开了旨在建立P2P(Peer to Peer)通用技术基础的JXTA计划。JXTA技术是网络编程和计算的平台,用以解决现代分布计算尤其是点对点(P2P)计算中出现的问题。
JXTA 将建立核心的网络计算技术,提供支持在任何平台、任何地方以及任何时间实现P2P计算的一整套简单、小巧和灵活的机制。JXTA首先将归纳目前P2P的功 能特别,而后建立核心的技术来表达目前的P2P计算的局限性。其重点是创建基本的机制,而具体的策略选择权则交给应用的开发者。JXTA将充分利用 XML、Java等开放技术,使得UNIX操作系统更强大和灵活,比如利用管道(Pipes)传输Shell命令实现复杂的计算任务。JXTA支持P2P 应用的基本功能来建立一个P2P系统,还将努力证实这些可以成为建立更高层功能的基础构造模块。JXTA架构可以分为三个层面:JXTA核心层、JXTA 业务层和JXTA应用层。

Continue reading "Java开源软件汇总"
Posted on September 25, 2007 5:15 PM | | Comments (0) | TrackBacks (0)
上一页 1 2 3 4 5 6 7