SIGMOD: ACM SIGMOD Conf on Management of Data PODS: ACM SIGMOD Conf on Principles of DB Systems VLDB: Very Large Data Bases ICDE: Intl Conf on Data Engineering
CIKM: Intl. Conf on Information and Knowledge Management ICDT: Intl Conf on Database Theory
Rank 2:
SSD: Intl Symp on Large Spatial Databases DEXA: Database and Expert System Applications FODO: Intl Conf on Foundation on Data Organization EDBT: Extending DB Technology DOOD: Deductive and Object-Oriented Databases DASFAA: Database Systems for Advanced Applications SSDBM: Intl Conf on Scientific and Statistical DB Mgmt CoopIS - Conference on Cooperative Information Systems ER - Intl Conf on Conceptual Modeling (ER) 参考 http://www3.ntu.edu.sg/home/assourav/crank.htm
SSD: Intl Symp on Large Spatial Databases DEXA: Database and Expert System Applications FODO: Intl Conf on Foundation on Data Organization EDBT: Extending DB Technology DOOD: Deductive and Object-Oriented Databases DASFAA: Database Systems for Advanced Applications SSDBM: Intl Conf on Scientific and Statistical DB Mgmt CoopIS - Conference on Cooperative Information Systems ER - Intl Conf on Conceptual Modeling (ER)
参考 http://www3.ntu.edu.sg/home/assourav/crank.htm
//*******************The Log classimport java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.uitl.Date;import java.text.DateFormat;
public class Log{ private static final String filePath = PropertyReader.getResource("Log_File_Path");//Supposing we have define in the last ProperyReader class and the file public static final String EXCEPTION = "Exception"; public static final String CREATE_STAFF = "Create Staff"; public static final String EDIT_STAFF = "Edit Staff"; public static final String DELETE_STAFF = "Delete Staff"; public static final String RECORD_HAS_EXIST = "Record Has Exist";
public static void log(String msg_type, Exception e){ StringBuffer errMsg = new StringBuffer(e.toString); for(int i=0;i<e.getStackTrace().length;i++){ errMsg.append("\n\t at"); errMsg.append(e.getStackTrace()[i].toString); } log(msg_type,errMsg.toString()); OptionPanel.showErrMsg("Sorry,System may have an error \n System will exit"); System.exit(-1); }
public static void log(String msg.type,Staff staff){ String msg = null; if(msg_type == CREATE_STAFF){ msg = staff.toString() + "has benn created"; }else if(msg_type == EDIT_STAFF){ msg = staff.toString() + "has been Changed"; }else if(msg_type == DELETE_STAFF){ msg = staff.toString() + "has been Deleted"; }else if(msg_type == RECORD_HAS_EXIST){ msg = staff.toString() + "has exist in the database"; } log(msg_type,msg); }
private static void log(String msg_type,String msg){ BufferedWriter out = null; DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); try{ out = new BufferedWriter(new FileWriter(getLogFilePath(),true));//如果为 true,则将字节写入文件末尾处,而不是写入文件开始处 out.write("["+df.format(new Date()) + "] <" + msg_type + "> :" + msg); out.newline(); out.newline(); }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(out!=null){ out.close(); } }catch(IOException e){ e.printStackTrace(); } } }
private static String getLogFilePath(){ File logDir = new File(filePath); if(!logDir.exists()){ logDir.mkdir(); } int i = 1; String fileName = filePath + "log_"; File file = new File(fileName + i + ".txt"); while(file.exists() && file.length() > 30000L) { i++; file = new File(fileName + i + ".txt"); } return fileName + i + ".txt" }}
//*****************************The OptionPanel Dialog Class for the Log Classimport javax.swing.JOptionPane;
public class OptionPanel { private static final String appTitle = PropertyReader.getResource("App_Title");//suposing the file has been established and the property app-title stands for the name of application private static final MainFrame frame = MainFrame.getMainFrame();
public static void showWarningMsg(String msg){ JOptionPane.showMessageDialog(frame,msg,appTitle,JOptionPane.WARNING_MESSAGE); } public static void showErrMsg(String msg){ JOptionPane.showMessageDialog(frame,msg,appTitle,JOptionPane.Error_MESSAGE); } public static int showConfirmMsg(String msg){ return JOptionPane.showConfirmDialog(frame,msg,appTitle,JOptionPane.YES_NO_OPTON,JOptionPane.QUESTION_MESSAGE); }}
In a project, we can write a class to read the properties.As following,import java.io.InputStream;import java.io.IOException;import java.util.Properties;
public class PropertyReader{ private static Properties property = null; static{ InputSteam stream = null; try{ stream=PropertyReader.class.getResourceAsStream("/resource/properties.properties"); property = new Properties(); property.load(stream); }catch(IOException e){ e.printStackTrace(); }finally{ if(stream != null){ try{ stream.close(); }catch(IOException e){ e.printStackTrace(); } } } } public static String getResource(String key){ if(property == null){ return null;// init error; } return property.getProperty(key); }}
<1>Module Usually,in enterprise software,it presents the logic of the commercial bean.To the SE Swing GUI,it contains data and the rules that govern access to and updates of this data. <2>View It specifies exactly how the module data should be presented,changing with the model data.<3>Controller Controller defines all the methods connecting to the user action which are called by the View.
Most developers have heard of, and possibly used, scripting languages such as Ruby, JavaScript, and Python. These dynamic languages are enjoying a resurgence in popularity, largely because of their flexibility and simplicity, and the productivity gains they promise.
Java 6 comes with built-in support for scripting languages. You can embed scripts in various scripting languages into your Java applications, passing parameters, evaluating expressions, and retrieving results. And you can do it all pretty seamlessly.
First of all, you obtain a new ScriptEngine object from a ScriptEngineManager, as shown here:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Each scripting language has its own unique identifier. The "js" here means you're dealing with JavaScript.
Now you can start having some fun. Interacting with a script is easy and intuitive. You can assign scripting variables using the put() method and evaluate the script using the eval() method,. which returns the most recently evaluated expression processed by the script. And that pretty much covers the essentials. Here's an example that puts it all together:
engine.put("cost", 1000);String decision = (String) engine.eval("if ( cost >= 100){ " +"decision = 'Ask the boss'; " +"} else {" +"decision = 'Buy it'; " +"}");assert ("Ask the boss".equals(decision));
You can do more than just pass variables to your scripts— you can also invoke Java classes from within your scripts. Using the importPackage() function enables you to import Java packages, as shown here:
engine.eval("importPackage(java.util); " + "today = new Date(); " + "print('Today is ' + today);");
Another cool feature is the Invocable interface, which lets you invoke a function by name within a script. This lets you write libraries in scripting languages, which you can use by calling key functions from your Java application. You just pass the name of the function you want to call, an array of Objects for the parameters, and you're done! Here's an example:
engine.eval("function calculateInsurancePremium(age) {...}"); Invocable invocable = (Invocable) engine; Object result = invocable.invokeFunction("calculateInsurancePremium", new Object[] {37});
You actually can do a fair bit more than what I've shown here. For example, you can pass a Reader object to the eval() method, which makes it easy to store scripts in external files, or bind several Java objects to JavaScript variables using a Map-like Binding object. You can also compile some scripting languages to speed up processing. But you probably get the idea that the integration with Java is smooth and well thought-out.
前几天好不容易下到了JDK6mustang,今天恰好有时间升级了一下Netbeans默认的JDK版本。这里简单的说明一下升级的方法。如果我 们不修改Netbeans的属性,需要在JavaPlatform manager中加入另一版本的类库。新建工程后如果要修改类库,还需要修改项目的类库属性,现在通过修改默认的JDK类库,便可方便很多,更不需要重新 安装NB。
我的NB装在D盘中,可以在该路径找到文件D:\Netbeans-5.5\etc\Netbeans.conf,我们将原有的默认类库netbeans_jdkhome="D:\Java\jdk1.5.0_07"修改为 netbeans_jdkhome="D:\Java\jdk1.6.0"便轻松的完成了升级,当然在tools-〉JavaPlatform manager〉中当然也可以将我们惯用的D:\Java\jdk1.5.0_07加入为可选用类库。
第三步,输入启动类。输入带有 main 方法的类名
表格 A: 字符匹配
操作
解释
例子
结果
.
单个字符匹配
.ord
匹配 “ford”, “lord”, “2ord”,
[ ]
多个字符列表
[cng]
只会匹配 “cord”, “nord”, 和 “gord”
[^ ]
不出现字符列表
[^cn]
匹配 “lord”, “2ord”, 等. 但不会匹配 “cord” or “nord”
[a-zA-Z]
匹配 “aord”, “bord”, “Aord”, “Bord”等
[^0-9]
匹配 “Aord”, “aord”, 等. 但不会匹配“2ord”, 等.
表格 B: 重复操作符
?
匹配0次或1次
“?erd”
匹配 “berd”, “herd”“erd”等
*
匹配0次以上
“n*rd”
匹配 “nerd”, “nrd”, “neard”, 等.
+
匹配1次以上
“[n]+erd”
匹配 “nerd”, “nnerd”, 等., 但不匹配 “erd”
{n}
匹配n次
“[a-z]{2}erd”
匹配“cherd”, “blerd”, 等. 但不匹配 “nerd”, “erd”, “buzzerd”, 等.
{n,}
匹配n次以上
“.{2,}erd”
匹配 “cherd” and “buzzerd”, but not “nerd”
{n,N}
匹配n-N次
“n[e]{1,2}rd”
匹配 “nerd” and “neerd”等
October 20, 2006 - Anyone who believes college students today are lacking in initiative, creativity, or work ethic should take a close look at the recent accomplishments of a team of students at the Ecole de Technologie Superieure (ETS) in Montreal, Quebec. Over the past three years, this team of 12 has been heads-down working on the mechanical design, electrical system, and Java™ control and navigation software for an AUV—a submarine—and preparing it for the International Autonomous Underwater Competition sponsored by the Association for Unmanned Vehicles Systems International (AUVSI) and the Office of Naval Research (ONR) in San Diego, California.
For no college credits, no pay, and no guarantee of success, the ETS team designed and built an AUV that could meet the complex and demanding mission requirements of the competition. Detailed in an 18-page document, these requirements included the ability to autonomously pass through a gate, detect a flashing light, find and connect with a docking station, locate a pipe and drop material into a bin—all underwater and with no communication with the team.
The submarine is called SONIA, which stands for Système d’Opérations Nautiques Intelligent et Autonome, and is just over one meter long, with a dry weight of 20 kg and a unique box-shaped design. It is equipped with sensors and two color video cameras. Navigation data input is provided by a compass and two gyroscopes as well as active and passive sonar arrays.
SONIA outperformed all but two of the 21 entries in the student competition, securing a place for ETS on the podium for a fourth year in a row. With an overall budget of just $15,000 U.S. (provided by ETS and a variety of corporate sponsors), the ETS team scored higher than teams with six-figure budgets. The competition was won by the University of Florida, but the ETS team came out ahead of renowned engineering schools such as MIT, Georgia Tech, and Virginia Tech.
Innovative Design, Expert Software Engineering
Two of the characteristics that set SONIA apart from competitors were its innovative box-shaped design and the sophistication of its core software systems.
The ETS team’s expertise with Java software proved a decisive advantage. Martin Morissette, software team leader of the SONIA team, is currently entering his third year in software engineering, and recently completed a six-month internship at Sun Labs, where he worked on the “Squawk VM,” a small J2ME™ virtual machine (VM) written almost entirely in Java. The Squawk VM provides the ability to run wireless transducer applications directly on the CPU without any underlying OS, saving overhead and improving performance.
“I learned a great deal during my time with Sun Labs that was extremely useful in the development of the navigation software for SONIA,” said Morissette. “The fact is, Java is an excellent programming language for robotics. All schools teach Java, so everyone on the software team knows how to use it. It’s object-oriented; it’s portable so it runs on Macs, PCs, Linux, whatever; it’s very efficient so we don’t have to worry about memory management; and there are lots of APIs available. And if you know how to write your applications properly, it can be very fast.”
The ETS team used Java for mission control and SONIA’s control systems, Java Management Extensions (JMX) for management, and a Java 3-D Simulator to simulate a broad range of mission scenarios. The team is now investigating the possibilities of Real-time Java, introduced at this year’s JavaOne Conference, for AUV and other robotics applications.
Consensus Building and Peer Review
According to Mr. Mercier, teamwork was every bit as important as technology in the ETS team’s success. “I can’t stress strongly enough that our ability to work together was the key to our success in the competition,” he said. “This is not about 12 individuals working on separate tasks by themselves. Every step of the way, we worked as a team and built consensus, so in the end everyone learned more. And that’s what this is really all about.”
For example, each software change was subject to peer review. All team members would receive an e-mail containing the previous version of the software, the new version incorporating a proposed change, and the rationale behind the change. Far from slowing the process down, the peer review concept got more team members more actively engaged, and ultimately resulted in far higher quality, according to Mr. Mercier. These peer reviews also ease the integration of new team members. Being a volunteer based project, volunteers come and go on a regular basis.
At the same time, the team shared tips and tricks with peers at other educational institutions. “This is more of a friendly rivalry than a dog-eat-dog competition,” said Tennessee Carmel-Veilleux, electrical team leader of the SONIA team. “We like to exchange information with some of the other teams, keep in touch with them. Who knows—we may all be working together some day.”
In recognition of the team’s willingness to work with other teams, and for achievements at the Unmanned Underwater Vehicle Competition, Felix Pageau, team captain, won the Andy Estabrook Award for "initiative and vision in the unmanned underwater systems.” Given for the first time to a student, the award was presented by the Lindbergh Chapter, San Diego, CA, of the AUVSI. Andy Estabrook was a pioneer in unmanned robotics and this award was created to honor his accomplishments in the advance of unmanned systems technology.
What’s next for the ETS team? The team itself is growing rapidly, thanks in part to the success at this year’s competition. The team leaders now find themselves in management roles as the team’s ranks have swollen to 34. “We’re going to compete again next year, and we’re going to focus on making our software more stable, more reliable, and faster,” said Mr. Morissette. In the mean time, the team leaders will be presenting their work at a variety of conferences worldwide—from Florida and Washington D.C. to Cologne, Germany.
And when will they get around to more traditional college activities such as frat parties and beer runs? “Probably never,” said Mr. Mercier. “We’re geeks. We’re doing what we love.”
For more information:
SPARC 平台
x86/x64 平台
Solaris OS
Solaris 8、9 和 10 操作系统整个 Solaris 软件组、整个 Solaris 软件组加 OEM 支持或者开发人员 Solaris 软件组
Linux OS
免许可费的运行时库 (.so) 分发
您应承诺软件不会被设计、许可或计划用于任何核设施的设计、修建、操作或维护。
C:
C++:
Fortran:
GNU Compiler Collection(Linux 平台)
源和目标级与以前版本的兼容性以及 GNU C/C++ 兼容性功能,简化升级和采用。
Sun发布Solaris ZFS-全球最先进的文档系统 Solaris 10 OS最新升级版包括Solaris ZFS 1.0文档系统 提供了端到端的数据完整性,重新定义缩放能力,大大降低数据管理成本
(2006年5月25日讯) Sun Microsystems公司发布了一个具有革命性的新的文档系统Solaris ZFS 1.0,它提供了多项突破性的功能,包括公共管理任务的自动化、保护数据免受非法行为的侵害,以及提供实际上无限的缩放能力。Solaris ZFS 1.0将作为我们这个星球上最先进的操作系统Solaris 10 OS的下一个商业版本的一个组成部分在今年6月份对外正式提供。此外,Solaris 10 OS的最新版本Solaris 10 6/06将先进的前摄性自愈技术和联网技术,与对PostgreSQL开源数据库的全面支持结合起来,进一步强化了Solaris 10 OS作为宿主高性能的关键数据库解决方案的首选平台的地位。 作为世界上最先进的文档系统,Solaris ZFS可以自动检测和修改细小的数据错误或遭遇意外侵害的数据,以提供信息的完整性。Solaris ZFS还因为不需要卷宗管理器而大大简化了数据的管理,而卷宗管理器是今天数据管理事务中最耗时、最费钱的部分。例如,今天,一项典型的系统管理任务可能 需要40多分钟来完成,但是采用Solaris ZFS,仅仅需要几秒钟的时间,且没有系统宕机的危险,从而大大降低了数据管理的成本费用。此外,Solaris ZFS还是世界上第一个128位的文档系统,这使系统具有了实际上无限的数据容量。Solaris ZFS提供的先进的缩放能力和管理能力,使它成为许许多多传统UNIX?文档系统的理想替代品。 Solaris是宿主高性能数据库的杰出平台。最近,Oracle指名Solaris 10 OS作为其开源64位开发和部署环境的理想平台。现在,Sun还将开源PostgreSQL数据库集成在Solaris 10 OS的最新版本内,对PostgreSQL数据库提供全面支持。Sun与PostgreSQL社团开展合作,让他们采用Solaris 10 OS提供的各种先进技术,如前摄性自愈技术、Solaris分区特性和Solaris动态跟踪能力(DTrace)等。
“面对不断增长的依顺性要求,今天的数据量每9~12个月就要翻番,但今天的文档系统还植根在上世纪70年代的技术之中,”Sun公司主管系统软件部的 副总裁Tom Goguen说,“Solaris ZFS从设计之初就是要迎接今天数据管理的挑战,它的预期寿命是20~30年。这一128位的文档系统所能存储的自愈数据是今天已有文档系统的160亿 倍,同时还大大简化了卷宗的管理。Solaris ZFS将是今年内发布的最重要的创新技术之一。” Solaris 10是我们这个星球上最先进的操作系统,它可在650多款SPARC和x64/x86平台上运行,获得来自独立软件厂商的2,200多种应用程序的支持。 其无与伦比的功能性和硬件平台的支持,加上它所提供的行业唯一的应用兼容性保证,加快了Solaris 10 OS在全球的应用步伐,目前Solaris 10 OS的注册许可数已超过450万。具有革命性的新的文档系统技术 Solaris ZFS 1.0具有任何其他商用文档系统技术所无法匹敌的优异性能。客户可以从Solaris ZFS技术中享用到先进的数据完整性技术、使用和管理的简易性、难以置信的高性能,以及实际上无限的缩放能力。
Sun公司简介 一个独具特色的理念――“网络就是计算机”,指引着Sun各项技术的发展,为全球各个重要的市场增添活力。Sun共享创新和创建社团的思想体系处于新 一代网络计算-参与时代-的最前沿。Sun的足迹遍及全球100多个国家和地区,其互联网的网址为http://www.sun.com。Sun公司的中 文网址为http://www.sun.com.cn。
ZFS是第一个128位的文件系统,同时ZFS又被Sun Microsystems称作史上最后一个文件系统。因为这个文件系统含有多项创新技术,不仅成功地解决现有文件系统的问题和陋习,而且前瞻性地考量了未 来对存储空间的需求,单个文件系统可以达到256 quadrillion(264) Zettabytes(221)。 ZFS不仅符合POSIX文件系统的标准,而且提供了许多高级功能比如:Quota(配额),Reservation(预留), Compression(压缩), Snapshot(快照),Clone(克隆)等。如果你还在坚持使用现有32位或者64位的文件系统,如果你还在“痛并不快乐着”地用着各式各样的 Volume Manager,那就很值得看看这里列出的使用ZFS的十条理由。1. 再也不需要fsck, scandisk 不管你是在用Linux,UNIX还是Windows,相信大家都有过类似的体会:当系统意外断电或者非法关机,系统重起后发现文件系统有 inconsistent的问题,这时 候就需要fsck或者scandisk 来修复,这段时间是非常耗时而且最后不一定能够修复成功。更糟糕的是,如果这是一台服务器需要做fsck的时候,只能offline(下线),而且现有应 用往往都是大硬盘,相应fsck修 复时间也很长,这对许多使用该服务器的用户来说几乎不能忍受的。而使用ZFS后大家可以彻底抛弃fsck这种工具,因为ZFS是一个基于COW(Copy on Write)机制的文件系统。COW是不会对硬盘上现有的文件进行重写,保证所有硬盘上的文件都是有效的。所以不会有这种inconsistent的概 念,自然就不需要这种工具了。2. 管理简单 ZFS作为一个全新的文件系统,全面抛弃传统File System + Volume Manager + Storage的架构,所有的存储设备是通过ZFS Pool进行管理,只要把各种存储设备加 入同一个ZFS Pool,大家就可以轻松的在这个ZFS Pool管理配置文件系统。大家再也不用牢记各种专业概念,各种命令newfs, metinit及各种Volume Manager的用法。在ZFS中我们只需要两个命令,zpool(针 对ZFS Pool管理)和zfs(针对ZFS文件系统的管理),就可以轻松管理128位的文件系统。举个例子,我们经常会遇到系统数据增长过 快,现有存储容量不够,需要添加硬盘,如果依照传统的Volume Manager管理方式,那我 们需要预先要考虑很多现有因素,还要预先根据应用计算出需要配置的各种参数。在ZFS情况下,我们的系统管理员可以彻底解放,再也不需要这种人为的复杂 考虑和计算,我们可以把这些交给ZFS,因为ZFS Pool会自动调节,动态适应需求。我们只需一个简单的命令为 这个ZFS Pool加入新的硬盘就可以了:zpool add zfs_pool mirror c4t0d0 c5t0d0 基于这个动态调节的ZFS Pool之上的所有的文件系统就可以立即使用到这个新的硬盘,并且会自动的选择最优化的参数。 而且ZFS同时也提供图形化的管理界面,下面是一个ZFS图形化管理的一个截屏:[attachment=2119]3. 没有任何容量限制 ZFS(Zettabyte File System)文件系统就如其名字所预示,可以提供真正的海量存储,在现实中几乎不可能遇到容量问题。在现有的64位kernel(内 核)下,它可以容纳达到16 Exabytes(264)大小的单个文件,可以使用264个存储设备,可以创建264个文件系统。4. 完全保证 数据 的正确和完整 由于ZFS所有的数据操作都是基 于Transaction(事务),一组相应的操作会被ZFS解 析为一个事务操作,事务的操作就代表着一组操作要么一起失败,要么一起成功。而且如前所说,ZFS对 所有的操作是基于COW(Copy on Write), 从而保证设备上的数 据始终都是有效的,再也不会因为系统崩溃或者意外掉电导致数据文件的inconsistent。 还有一种潜在威胁 数据的可能是来自于硬件设备的问题,比如磁 盘,RAID卡的硬件问题或者驱动bug。现有文件系统通常遇到这个问题,往往只是简单的把错误数据直接交给上层应用,通常我们把这个问题称作 Silent Data Corruption。而在ZFS中,对所有数据不管是用户数据还是文件系统自身的metadata数 据都进行256位的Checksum(校 验),当ZFS在提交数据时会进行校验,彻底杜绝这种Silent Data Corruption情况。5. 提供优异 性能和扩展性 和传统File System + Volume Manager + Storage架构不同,ZFS则是直接基于存储设备提供所有的功能,因此有自己独有的创新特性,性能自然非比寻常。 * Dynamic Striping vs. Static Striping 由于ZFS是基于COW和一个全局动态的ZFS Pool,任何一次写 操作,都是对一块新数据块(Block)的一次写操作。ZFS从ZFS Pool中动态挑选出一个最优的设备,并且以一个transaction(事 务)线性写入,充分有效地利用了现有设备的带宽,我们把这个特性称为Dynamic Striping。而相对应的Static Striping则是传统文件系统所使用的方式,Static Striping需要管理员预先对这组Stripe进行正确地计算人为 设置,而且如果加入新的设备则需要再次人为的计算和设置,更为严重的是如果人为计算错误,则会直接影响系统的性能。而在使用Dynamic Striping这种特性之后,我们根本不需要人为介入,ZFS会自动调整,智能的为你 提供最佳的设备,最快的操作方式。 * 支持多种 大小的数据块(Multiple Block Size) ZFS支持多种大小的数据块定义,从512字节到1M字节。和传统文件系统往往都是固定大小数据块不同,ZFS则是可以动态的根据不同 大小的文件进行计算,动态的选择最佳的数据块。 因为不同大小数据 块,直接影响到实际使用硬盘容量和读取速度。如果使用较小的数据块,存储文件所导致的碎片则较少,读写小文件更快一些,但是会导致需要创建更多的 metadata,读写大文件则会更费时。如果使用较大的数据块,使用的metadata较少,更利于读写大文件,但是会导致更多的碎片。ZFS根据实际 调查现有文件使 用的情况,分析出一个选择数据块大小的算法,动态的根据实际文件大小确定最佳的数据块。所以ZFS是 非常智能的,在不需要系统管理员介入,就可以得到一个自我调优的结果。当然ZFS也支持用户对单个文件或者整个文件系统 所使用的数据块大小的自定义设置。 * 智能预读取(Intelligent Prefetch) 多数的操作系 统都 有这种将数据预先读取的功能,而ZFS则是建立在文件系统上直接提供的一种更加智能的数据预读取功能。它不仅可以智能地识别出多种读取模式, 进 行提前读取数据,而且可以对每个读取数据流进行这种预读取智能识别,这个对许多流媒体提供者来说是件非常好的事情。 在扩展性上,和现有文件系统多是基于一个受限的静态模型不同,ZFS是采用ZFS Pool这个动态概念,它的metadata也是动态,并且读写操作都是可并行的,并且具有优先级概念,所以即使在大数据量,多设备的情况下仍可以保证性能的线性增长。6. 自我修复功能 * ZFS Mirror 和 RAID-Z 传统的硬盘Mirror及RAID 4,RAID 5阵列方式都会遇到前面提到过的问题:Silent Data Corruption。如果发生了某块硬盘物理问题导致数据错误,现有的Mirror,包括RAID 4,RAID 5阵列会默默地把这个错误数据提交给上层应用。如果这个错误发生在Metadata中,则会直接导致系统的Panic。 而且还有一种更为严重的情况是:在RAID 4和RAID 5阵列中,如果系统正在计算Parity数值,并再次写入新数据和新Parity值的时候发生断电,那么整个阵列的所有存储的数据都毫无意义了。 在ZFS中则提出了相对应的ZFS Mirror和RAID-Z方式,它在负责读取数据的时候会自动和256位校验码进行校验,会主动发现这种Silent Data Corruption,然后通过相应的Mirror硬 盘或者通过RAID-Z阵列中其他硬盘得到正确的数据返回给上层应用,并且同时自动修复原硬盘的Data Corruption 。 * Fault Manager 在Solaris 10中,包含 一个ZFS诊断引擎和Solaris的 Fault Manager(这也是Solaris 10的 另一个新特性)交互,可以实时地诊断分析并且报告ZFS Pool和存储设备的错误,用户可以通过Fault Manager及时得到一个非常友善的消息。这个诊断引擎虽然不会采取主动的行为去修复或者解决 问题,但是会在消息中提示系统管理员可采取的动作。类似下面一个ZFS报错消息,其中REC-ACTION就是建议采取的动作:SUNW-MSG-ID: ZFS-8000-D3, TYPE: Fault, VER: 1, SEVERITY: MajorEVENT-TIME: Fri Mar 10 11:09:06 MST 2006PLATFORM: SUNW,Ultra-60, CSN: -, HOSTNAME: neoSOURCE: zfs-diagnosis, REV: 1.0EVENT-ID: b55ee13b-cd74-4dff-8aff-ad575c372ef8DESC: A ZFS device failed. Refer to http://sun.com/msg/ZFS-8000-D3 for more information.AUTO-RESPONSE: No automated response will occur.IMPACT: Fault tolerance of the pool maybe compromised.REC-ACTION: Run ’zpool status -x’ and replace the bad device.7. 安全 在安全上,ZFS支持类似NT风格NFSv4版的ACL(读取控制列表)。而且前面所提到的256位验证码,用户可选择多种验证方式,包括SHA-256验证算法,从而在物理存储单元级别上保证数据的安全性。8. 超强功能 ZFS作为“最后一个文件系统”,涵盖了基本的文件系统和Volume管理的功能,同时 一并提供许多企业级别的超强功能:Quota(配额),Reservation(预留), Compression(压 缩), Snapshot(快照),Clone(克隆)。并且速度非常快。有了这个文件系统,大家再也不需要任何Volume Manager了。9. 兼容性 ZFS是一个完全兼容POSIX规范的文件系统,所以处于上层的应用程序是完全不受影响。ZFS也提供一个Emulated Volume模块,可以把任何一个ZFS文件系统作为普通的块设备使用。同时ZFS也可以使用基于Volume Manager构建的Volume作为存储设备单 元。这样在不需要修改应用程序,不修改已有文件系统下,给了大家最大的自由度去获得ZFS提供的各 种特性。10. 开源 ZFS是Sun Microsystems公 司作为OpenSolaris的一个开源项目运作并且完全免费使用,点击这里(http://www.opensolaris.org/os/community/zfs/source/) 可以直接浏览到ZFS的代码。 这就代表着我们不仅同时可以享受商业公司的高质量,也可以获得开源模式的优点。 虽然目前只有Solaris支持该文件系统,但是这种开源的模式必定会促进更多基于ZFS的应用。现在已经有国外开发者正在将ZFS移植到Linux和 Mac OS上来。如果想要体验一下ZFS,由于目前它和Solaris 10绑定在一起,所以需要下载最新版的Solaris 10 6/06 (http://www.sun.com/software/solaris/get.jsp)。参考:Solaris ZFS Administration Guide: http://docs.sun.com/app/docs/doc/819-5461?l=zh&q=ZFSSolaris 10 Zone FAQ: http://www.sun.com/software/solaris/faqs/zfs.xmlAutomatic Performance Tuning in the Zettabyte File System: http://tesla.hpl.hp.com/self-manage03/Finals/henson-self-tune.pdf
只对5以上的版本有效,官方网站上有的,不过很多人没看到罢了
This tech tip shows you how you can spice up your NetBeans IDE 5.0's look and feel with color themes, custom button-shapes and watermarks (wallpapers) using Kirill's Substance plug-in. To use Substance with IDE 4.1 or any other Swing-based application, refer to Spicing Up Your Swing GUI With Substance.
To install the substance-netbeans plugin into NetBeans IDE 5.0,
http://www.netbeans.org/kb/50/substance-look-and-feel.html#creating
在Java中,我们只要利用BigInteger类,可以完成同样功能;这里也测试了异常以及Dialog的产生。
开发环境:Windows Server 2003 Standard Edition SP1, J2SDK 1.5.0_06, Eclipse 3.1.2源代码如下:
//Factorial.javaimport java.math.BigInteger;import javax.swing.*; /** * 计算任意正整数的阶乘 * * */public class Factorial { public static void main(String[] args) { BigInteger x = BigInteger.valueOf(1); //存储结果 int num = 1; //待计算的整数 String s = null; boolean correct = false; do { try { s = JOptionPane.showInputDialog(null, "请输入要计算的数(正整数):"); if (s == null) break; else { num = Integer.parseInt(s); if (num < 0) throw new IllegalArgumentException(); else correct = true; } } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, "数据格式错误!"); continue; } catch (IllegalArgumentException e) { JOptionPane.showMessageDialog(null,"请输入一个正整数!"); continue; } break; } while (true); if (correct == true) { for (int i = 1; i <= num; i++) x = x.multiply(BigInteger.valueOf(i)); JTextArea textArea = new JTextArea(x.toString(), 5, 30); textArea.setEditable(false); textArea.setLineWrap(true); Object[] object = {num + " ! : ",new JScrollPane(textArea)}; JDialog dialog = new JOptionPane(object).createDialog(null,"阶乘的结果"); dialog.setVisible(true); } System.exit(0); }}
//Factorial.javaimport java.math.BigInteger;import javax.swing.*;
/** * 计算任意正整数的阶乘 * * */public class Factorial { public static void main(String[] args) { BigInteger x = BigInteger.valueOf(1); //存储结果 int num = 1; //待计算的整数 String s = null; boolean correct = false; do { try { s = JOptionPane.showInputDialog(null, "请输入要计算的数(正整数):"); if (s == null) break; else { num = Integer.parseInt(s); if (num < 0) throw new IllegalArgumentException(); else correct = true; } } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, "数据格式错误!"); continue; } catch (IllegalArgumentException e) { JOptionPane.showMessageDialog(null,"请输入一个正整数!"); continue; } break; } while (true); if (correct == true) { for (int i = 1; i <= num; i++) x = x.multiply(BigInteger.valueOf(i)); JTextArea textArea = new JTextArea(x.toString(), 5, 30); textArea.setEditable(false); textArea.setLineWrap(true); Object[] object = {num + " ! : ",new JScrollPane(textArea)}; JDialog dialog = new JOptionPane(object).createDialog(null,"阶乘的结果"); dialog.setVisible(true); } System.exit(0); }}
运行结果如下:
通常我们学习一门语言的时候,第一个写的程序是输出"Hello,World!",C/C++/Java中的入口都是main方法。实际上,在Java中,即便没有main方法,我们也可以输出Hello,程序如下:
/** * @(#)Hello.java * 没有main方法,输出Hello,World! * 本程序请直接用javac编译,java解释运行 * 经测试,如果在Eclipse中试图运行,默认情况下,会启动失败 * * @version J2SDK 1.4.2_10-b03 */public class Hello { static { System.out.println("Hello,World!"); System.exit(0); //!如果缺少这一句,会出现运行期异常 }}
假使我们为Hello类增加一个main方法,虽然它也是static的,但是静态初始化块会在main之前被执行。
一、Robocode简介:Robocode是一位IBM的工程师Mat Nelson用Java语言所创造的机器人战斗仿真引擎。Robocode不是一个完整游戏,它是个半成品,你所做的就是为你的机器人坦克编写智能程序, 让它能够移动、进攻、防御、躲避、开火。只用几十行代码,就能立刻创造出一个简单但完整机器人,你可以立即将它装入Robocode 引擎中,再从Robocode 自带的那些水平不一的示例机器人中选取一个进行一番对战,还可以在网上下载由其他程序员编写的水平更高的机器人,与它们比试一下,看看自己的水平到底如 何。 开发Robocode,也是一个极佳的学习Java 语言的过程。随着你的机器人的”智力”水平的提高,你的编程能力也就跟着水涨船高了。
二、如果您想了解更多的细节,请查看如下的资料: 1.有关Robocode的详细资料,请查看如下的pdf文档,内含Robocode的详细介绍、Robocode安装、高水平机器人的代码分析、高级瞄 准策略、Robocode内核分析等7篇文章,帮助你入门,全部资料来自《程序员》2003年合订本配套光盘,请点击这里:http://www.loujing.com/mywork/java/Robocode/RobocodeBrief.pdf,(首先请确保你计算机内安装了pdf文档阅读器,可自Adobe的网站自由下载,http://www.chinese-s.adobe.com/products/acrobat/readstep2.html)。 2.如果您需要了解Robocode更详细的信息,可参看如下网站: Robocode在IBM的官方网站为:http://www.alphaworks.ibm.com/tech/robocode;另外,现在Robocode项目已经终止,成为开源项目,您可以从如下站点下载其源代码:http://robocode.sourceforge.net/。 3.您可以自我的网站下载Robocode的1.0.6版本,下载地址为:http://www.loujing.com/mywork/java/Robocode/Robocode.rar,下载解压后双击其中的install.bat即可安装。当然,请首先确保您的机器里安装了J2SE SDK(Java软件开发包),如果您不知道如何设置Java运行环境,请参考本人的另一篇文章:ShowArticle.asp?ArticleID=31。 4.如果您是在Eclipse里进行Robocode的开发,您可以参考我的这篇文章http://www.loujing.com/Article/ShowArticle.asp?ArticleID=33。
/** * 程序运行当年的日历,程序运行当日以*号表示 */
import java.util.*;
倘若说看到标题后,以为jb真的提供了一种把java应用程序打包成exe文件的主流方法的话 , 你会失望的,下面的一个小技巧只是一个技巧而已。 使用JBuilder来制作可执行文件 这个是Borland不公开的使用技巧,能够通过JBuilder来制作exe文件来启动Java文件。JBui lder并不支持本地编译机制。但是有一个隐藏的技巧可以让你从可执行文件来启动Java程序 ,可以出现或者不出现console窗口。想做到这些,需要JBuilder的bin目录下的这些文件: JBuilder.exe JBuilderW.exe (可选) JBuilder.config jdk.config JavaLauncher.dll “JBuilder.exe”是一个通用的可执行外壳文件,用以启动Java程序,”JBuilderW.exe“ 好 像是javaw.exe一样,它把”JBuilder.exe”包装起来,但是运行时候不显示那个console的 窗口。使用这些文件的关键是文件名。“JBuilder.exe”查找一个文件叫”JBuilder.confi g”的配置文件,里面包含了运行Java程序的必须信息。同样的”JBuilderW.exe”查找”JB uilder.exe”来启动不带Console窗口的Java程序。如果把JBuilder.exe重命名为”foo.exe ”,那”foo.exe”将去寻找”foo.config”配置文件,同样”JBuilderW.exe”被重命名为 ”fooW.exe”,它会去寻找”foo.exe”文件。 说到这里,聪明的读者应该猜到怎样利用JBuilder.exe来启动应用程序了。只要把JBuilder .exe,JBuilerW.exe,JBuilder.config改名成相应的文件名,在JBuilder.config里面指定主 类和类路径,就能够通过执行JBuilder.exe(或者被改名后的exe文件)来启动Java应用程序 了 。下面是用本机为例。 Borland JBuilder 5被安装在E:\jbuilder5\目录下,在E:\jbuilder5\bin\下建立一个temp 目录,然后把JBuilder.exe,JBuilder.config,JavaLauncher.dll,jdk.config四个文件拷贝 到E:\jbuilder5\bin\temp\目录下,然后在这个目录下建立一个hello目录,在这个目录下 生 成一个hello.java文件,即E:\jbuilder5\bin\temp\hello\hello.java文件, file://hello.javapackage hello; public class hello{ public static void main(String s[]){ System.out.println("Hello, Exe file!"); } } 编译成class文件 编译所有java文件 然后打开Jbuilder.config文件,作相应的修改: 在JBuilder.config里面找到下面两行 # Start JBuilder using the its main class mainclass com.borland.jbuilder.JBuilder 修改为 # Start JBuilder using the its main class mainclass hello.hello addpath E:/jbuilder5/bin/temp/ addpath命令是把目录加入类路径中,这个命令和其它config里面可以识别的命令可以在JBu ilder/bin目录下的config_readme.txt里面找到详细说明。 然后将jdk.config里面的javapath修改成相对的路径,例如原来是 javapath ../jdk1.3/bin/java 修改成 javapath ../../jdk1.3/bin/java 最后 将JBuilder.exe,JBuilder.config修改成所需要的文件名,例如foo.exe和foo.config文件 。 现在执行foo.exe文件 可以看到执行的结果 执行foo.exe后的运行结果 至此,通过修改JBuilder来使用exe文件启动自己的Java应用程序已经完成了。 但是好玩的地方并不在这个地方,下面的小技巧可能更有趣,将Jar文件打包进入exe文件! 假设利用上面的文件,生成hello.jar包,执行过程和运行结果jar cvf hello.jar hello\*.class 将类文件打包成exe文件 然后将jar包附加到JBuilder.exe后面去,执行过程copy /b ..\JBuilder.exe+hello.jar foo.exe 将jar文件转化成exe文件 在foo.config(JBuilder.config)文件里面把前面加入的类路径去掉,并加入下面的路径: addpath E:/jbuilder5/bin/temp/foo.exe 然后执行,执行结果foo.exe 变成exe文件的jar文件执行结果 看到了么?一个含jar包的exe文件被执行了! 这个过程的大致原理是:exe文件的重要信息都在文件头部,所以把乱七八糟的东西放exe文 件尾部是不要紧的;而jar/zip文件的重要信息是在文件尾部的,这样它们两不相干,能够 容 易的被执行。 请注意:读者如果使用这个功能,得自己承担可能带来的风险,因为Borland对这个功能不 提 供官方的支持!
在中文的Windows下面安装JBuilder后,在IDE的代码编辑器里面光标定位会不准确,很多人通过修改Editor的缺省字体来修改这个问题,但是JBuilder预设的字体是最美观的。鱼与熊掌不能兼得,那么改怎么办才好呢?
其实最简单的办法就是把JBuilder的Editor里面的缺省字体里面的语法高亮列表里面"Reserved word"的Bold的属性去掉,就可以了,而且字体还更漂亮!
具体路径:"Editor Option"->"Color"->"Screen Element"->"Reserved word"->"Attributes"->"Bold",把"Bold"uncheck就可以了!
Enjoy it!!二,如何在Jbuilder中使用自定义的Server.xml文件?这个问题相信困扰很多人了,解决办法如下1,在jbuilder中运行web app2,在输出窗口察看server0808的输出目录我的jbuilder7是C:/myapp/Tomcat/conf/server8080.xml3,把这个文件备份,其中有这样一行
4,删除这一行,停止web app5,此时Tomcat目录下没有conf目录了,建立这个目录,将删除了3中这句话的文件放在conf目录,还叫做server8080.xml,把自己需要的连接池等信息加入
6,运行web app,我在jbuilder7中不会替换这个文件。
ok...........................
Using a Custom server.xml file with Tomcat in JBuilder Question: How do a use a custom server.xml with Tomcat in JBuilder 4,5 and 6?
Answer:Make a copy of the JBuilder-generated server.xml file while your Web app is running, modify the line which says the file was generated by JBuilder,make you mods, and then AFTER you quit the Web app you were just running, save your modified copy back to server.xml. After that, JBuilder won't modify that file.
Note: Remember that when you shut down Tomcat you'll need to recreate the directory that the server.xml file was in before you can save it back out. After you've made the above modifications, JBuilder will leave the directory alone. 三,如何修改jbuilderx的字体#1: 安装JBX#2: 改变一下,Editor|Display 里面的字体,主要是让jbx搜索系统字体#3: 关闭JBX#4: 用户主目录下(我的是:C:\Documents and Settings\Administrator\).primetimeX/user_zh.properties
添加一行:editor.display;fixed_fonts.3=\u5b8b\u4f53
就可以啦!同样也可以添加其它字体,只要在editor.display;known_fonts列表中有的,都可以添加,顺序编号就行了