随笔-7  评论-15  文章-0  trackbacks-0
  2009年10月22日
Quartz特点:
􀁺 Quartz能嵌入到任何独立的应用中运行。
􀁺 Quartz能在应用服务器或者Servlet容器中实例化,并且能够参与XA事务。
􀁺 Quartz能够以独立的方式运行(在它自己的Java虚拟机中),可以通过RMI使用Quartz。
􀁺 Quartz可以被实例化为独立程序的集群(有负载均衡和容错能力)。
Job Scheduling(任务日程安排)
任务在给定的触发器(Trigger)触发时执行。触发器可以通过几乎以下所有形式的组合方式进行创建:
􀁺 在一天中的任意时刻(可以精确到毫秒)。
􀁺 一周中特定的一些天。
􀁺 一个月中特定的一些天。
􀁺 一年中特定的一些天
􀁺 不在日历列表中注册的一些天(比如节假日)。
􀁺 循环特定的次数。
􀁺 循环到特定的时间。
􀁺 无限循环。
􀁺 按照一定的时间间隔循环。
Job Execution(任务执行)
• 任务是任何实现简单Job接口的Java 类,这样开发者能够执行任何完成他们工作的任务。
• 任务类的实例可以由Quartz实例化,也可以由你的程序框架实例化。
当触发器被触发时,日程管理器将会通知某个或者多个实现了JobListener 或TriggerListener的对象(监听器可以是简单的Java对象,或者EJBs,或者JMS消息发布器,等等)。这些监听器在任务执行完毕后也会接到通知。
• 任务被完成后,他们会返回一个“任务完成码(JobCompletionCode)”,这个“任务完成码”告知日程管理器任务执行的结果是成功还是失败。日程管理器会根据成功或者失败码来采取措施,比如:立即重新执行任务。
Job Persistence(任务持久化)
• Quartz设计中包括了一个JobStore接口,这样,实现这个接口的Job类可以以多种机制实现Job的存储。
• 通过使用JDBCJobStore,所有的Jobs和Triggers被配置为“non-volatile”(不轻快)的方式。即,通过JDBC存储在关系数据库中。
• 通过使用RAMJobStore,所有Jobs和Triggers被存储在RAM。因此,在程序执行中没有被持久化,但这种方式的优点就是不需要外部数据库。
Transactions(事务)
• Quartz通过JobStoreCMT(JDBCJobStore的一个子类)可参与JTA事务。
• Quartz可以管理JTA事务(开始或者提交事务)。
Clustering(集群)
• Fail-over.(容错)
• Load balancing.(负载均衡)
Listeners & Plug-Ins(监听器及插件)
• 应用可以通过实现一个或者多个监听器接口来实现捕捉日程事件,以监视或控制任务/触发器的行为。
• 可以通过插件的机制来扩展Quartz 的功能。例如:记录任务执行历史的日志,或者从文件中载入任务和触发器的定义。
posted @ 2009-10-22 23:21 脚踏实地 阅读(1086) | 评论 (0)编辑 收藏
  2009年10月7日
xquery语法
posted @ 2009-10-07 17:51 脚踏实地 阅读(278) | 评论 (0)编辑 收藏
 

一些基本的语法规则:

·         XQuery对大小写敏感

·         XQuery的元素、属性以及变量必须是合法的XML名称。

·         XQuery字符串值可使用单引号或双引号。

·         XQuery变量由“$”并跟随一个名称来进行定义,举例,$bookstore

·         XQuery注释被(:和:)分割,举例,(: XQuery 注释 :)

XQuery 条件表达式

"If-Then-Else"可以在XQuery中使用。

请看下面的例子:

for $x in doc("books.xml")/bookstore/book

return if ($x/@category="CHILDREN")

 then <child>{data($x/title)}</child>

 else <adult>{data($x/title)}</adult>

请注意"If-Then-Else"的语法:if表达式后的圆括号是必需的。else也是必需的,不过仅仅写“else ()”也是可以的。

上面的例子的结果:

<adult>Everyday Italian</adult>

<child>Harry Potter</child>

<adult>Learning XML</adult>

<adult>XQuery Kick Start</adult>


 

XQuery 比较

XQuery中,有两种方法来比较值。
 

1.  通用比较:=, !=, <, <=, >, >=

 

2. 值的比较:eq、ne、lt、le、gt、ge

 

请看下面的XQuery表达式:

$bookstore//book/@q > 10

如果q属性的值大于10,上面的表达式的返回值为true

$bookstore//book/@q gt 10

如果仅返回一个q,且它的值大于10,那么表达式返回true。如果不止一个q被返回,则会发生错误。

 

向结果添加元素和属性

正如在前面一节看到的,我们可以在结果中引用输入文件中的元素和属性:

for $x in doc("books.xml")/bookstore/book/title

order by $x

return $x

上面的XQuery表达式会在结果中引用title元素和lang属性,就像这样:

<title lang="en">Everyday Italian</title>

<title lang="en">Harry Potter</title>

<title lang="en">Learning XML</title>

<title lang="en">XQuery Kick Start</title>

以上XQuery表达式返回title元素的方式和它们在输入文档中被描述的方式的相同的。

现在我们要向结果添加我们自己的元素和属性!

添加HTML元素和文本

现在,我们要向结果添加HTML元素。我们会把结果放在一个HTML列表中 - Now, we want to add some HTML elements to the result. We will put the result in an HTML list - together with some text:

<html>

<body>

<h1>Bookstore</h1>

<ul>

{

for $x in doc("books.xml")/bookstore/book

order by $x/title

return <li>{data($x/title)}. Category: {data($x/@category)}</li>>

}

</ul>

</body>

</html

以上XQuery表达式会生成下面的结果:    

<html>

<body>

<h1>Bookstore</h1>

<ul>

<li>Everyday Italian. Category: COOKING</li>

<li>Harry Potter. Category: CHILDREN</li>

<li>Learning XML. Category: WEB</li>

<li>XQuery Kick Start. Category: WEB</li>

</ul>

</body>

</html>

 

选择和过滤元素

正如在前面的章节看到的,我们使用路径表达式或FLWOR表达式来选去和过滤元素。

请看下面的FLWOR表达式:

for $x in doc("books.xml")/bookstore/book

where $x/price>30

order by $x/title

return $x/title

for

(可选) 向每个由in表达式返回的项目捆绑一个变量

let

(可选)

where

(可选) 设定一个条件

order by

(可选) 设定结果的排列顺序

return

规定在结果中返回的内容

for 语句

for语句可将变量捆绑到由in表达式返回的每个项目。for可产生迭代。在同一个FLWOR表达式中可存在多重for语句。

如需在一个for语句中循环指定的次数,您可使用关键词to:     

for $x in (1 to 5)

return <test>{$x}</test>

结果:

<test>1</test>

<test>2</test>

<test>3</test>

<test>4</test>

<test>5</test>

关键词at可被用来计算迭代:

for $x at $i in doc("books.xml")/bookstore/book/title

return <book>{$i}. {data($x)}</book>

结果:

<book>1. Everyday Italian</book>

<book>2. Harry Potter</book>

<book>3. XQuery Kick Start</book>

<book>4. Learning XML</book>

在for语句中同样允许多个in表达式。请使用逗号来分割每一个in表达式:

for $x in (10,20), $y in (100,200)

return <test>x={$x} and y={$y}</test>

结果:

<test>x=10 and y=100</test>

<test>x=10 and y=200</test>

<test>x=20 and y=100</test>

<test>x=20 and y=200</test>

 

let 语句

let语句可完成变量分配,并可避免多次重复相同的表达式。let语句不回导致迭代。

let $x := (1 to 5)

return <test>{$x}</test>   

结果   

<test>1 2 3 4 5</test>   

where 语句

where语句用于为结果设定一个或多个条件(criteria)。

where $x/price>30 and $x/price<100

order by 语句

order by语句用于规定结果的排序次序。此处,我们要根据category和title来对结果进行排序:

for $x in doc("books.xml")/bookstore/book

order by $x/@category, $x/title

return $x/title

结果:

<title lang="en">Harry Potter</title>

<title lang="en">Everyday Italian</title>

<title lang="en">Learning XML</title>

<title lang="en">XQuery Kick Start</title>

return 语句:

    

return语句规定要返回的内容。

for $x in doc("books.xml")/bookstore/book

return $x/title

结果:

<title lang="en">Everyday Italian</title>

<title lang="en">Harry Potter</title>

<title lang="en">XQuery Kick Start</title>

<title lang="en">Learning XML</title>

posted @ 2009-10-07 17:46 脚踏实地 阅读(1609) | 评论 (1)编辑 收藏
 

在介绍语法的时候,例子中使用的XML文档是"books.xml":

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
            <title lang="en">Everyday Italian</title>
            <author>Giada De Laurentiis</author>
            <year>2005</year>
            <price>30.00</price>
</book>

<book category="CHILDREN">
            <title lang="en">Harry Potter</title>
            <author>J K. Rowling</author>
            <year>2005</year>
            <price>29.99</price>
</book>
<book category="WEB">
            <title lang="en">XQuery Kick Start</title>
            <author>James McGovern</author>
            <author>Per Bothner</author>
            <author>Kurt Cagle</author>
            <author>James Linn</author>
            <author>Vaidyanathan Nagarajan</author>
            <year>2003</year>
            <price>49.99</price>
</book>
<book category="WEB">
            <title lang="en">Learning XML</title>
            <author>Erik T. Ray</author>
            <year>2003</year>
            <price>39.95</price>
</book>
</bookstore>


 

 

一、函数

XQuery使用函数来提取XML文档中的数据。

doc()用于打开"books.xml"文件:

doc("books.xml")


二、路径表达式

XQuery使用路径表达式在XML文档中通过元素进行导航。

下面的路径表达式用于在"books.xml"文件中选取所有的title元素:

doc("books.xml")/bookstore/book/title

(/bookstore选取bookstore元素,/book选取bookstore元素下的所有book元素,而/title选取每个book元素下的所有title元素)

上面的XQuery可提取以下数据:

<title lang="en">Everyday Italian</title>

<title lang="en">Harry Potter</title>

<title lang="en">XQuery Kick Start</title>

<title lang="en">Learning XML</title>

三、谓语

XQuery使用谓语来限定从XML文档所提取的数据。

下面的谓语用于选取bookstore元素下的所有book元素,并且所选取的book元素下的price元素的值必须小于30:

doc("books.xml")/bookstore/book[price<30]

上面的XQuery可提取到下面的数据:

<book category="CHILDREN">

            <title lang="en">Harry Potter</title>

            <author>J K. Rowling</author>

            <year>2005</year>

            <price>29.99</price>

</book>

四、使用FLWOR"books.xml"选取节点
 

FLWOR是"For, Let, Where, Order by, Return"的只取首字母缩写。

for语句把bookstore元素下的所有book元素提取到名为$x的变量中。

where语句选取了price元素值大于30book元素。

order by语句定义了排序次序。将根据title元素进行排序。

return语句规定返回什么内容。在此返回的是title元素。

 

请看下面这个路径表达式:

doc("books.xml")/bookstore/book[price>30]/title

上面这个表达式可选取bookstore元素下的book元素下所有的title元素,并且其中的price元素的值必须大于30。

下面这个FLWOR表达式所选取的数据和上面的路径表达式是相同的:

for $x in doc("books.xml")/bookstore/book

where $x/price>30

return $x/title

结果是:

<title lang="en">XQuery Kick Start</title>

<title lang="en">Learning XML</title>

通过FLWOR,您可以对结果进行排序:

for $x in doc("books.xml")/bookstore/book

where $x/price>30

order by $x/title

return $x/title


上面的XQuery表达式的结果:

<title lang="en">Learning XML</title>

<title lang="en">XQuery Kick Start</title>



在一个HTML列表中提交结果

请看下面的XQuery FLWOR表达式:

for $x in doc("books.xml")/bookstore/book/title

order by $x

return $x

上面的表达式会选取bookstore元素下的book元素下的所有title元素,并以字母顺序返回title元素。

现在,我们希望使用HTML列表列出我们的书店中所有的书目。我们向FLWOR表达式添加<ul>和<li>标签:

<ul>

{

for $x in doc("books.xml")/bookstore/book/title

order by $x

return <li>{$x}</li>

}

</ul>

以上代码的结果:

<ul>

<li><title lang="en">Everyday Italian</title></li>

<li><title lang="en">Harry Potter</title></li>

<li><title lang="en">Learning XML</title></li>

<li><title lang="en">XQuery Kick Start</title></li>

</ul>

现在我们希望去除title元素,而仅仅显示title元素内的数据。

<ul>

{

for $x in doc("books.xml")/bookstore/book/title

order by $x

return <li>{data($x)}</li>

}

</ul>

结果将是一个HTML列表:

<ul>

<li>Everyday Italian</li>

<li>Harry Potter</li>

<li>Learning XML</li>

<li>XQuery Kick Start</li>

</ul>

posted @ 2009-10-07 17:26 脚踏实地 阅读(360) | 评论 (0)编辑 收藏

一、使用eclipse新建一个java project
二、把saxon的jar包放入classpath(我用的jar包是saxon9ee.jar)
三、新建package,然后新建一个xml文件(cd_catalog.xml),其内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
    <CATALOG>
         <CD>
              <TITLE>Empire Burlesque</TITLE>
              <ARTIST>Bob Dylan</ARTIST>
              <COUNTRY>USA</COUNTRY>
               <COMPANY>Columbia</COMPANY>
              <PRICE>10.90</PRICE>
              <YEAR>1985</YEAR>
         </CD>
         <CD>
              <TITLE>Hide your heart</TITLE>
              <ARTIST>Bonnie Tyler</ARTIST>
              <COUNTRY>UK</COUNTRY>
              <COMPANY>CBS Records</COMPANY>
              <PRICE>9.90</PRICE>
              <YEAR>1988</YEAR>
         </CD>
         <CD>
              <TITLE>Greatest Hits</TITLE>
              <ARTIST>Dolly Parton</ARTIST>
              <COUNTRY>USA</COUNTRY>
              <COMPANY>RCA</COMPANY>
              <PRICE>9.90</PRICE>
              <YEAR>1982</YEAR>
         </CD>
         <CD>
              <TITLE>Still got the blues</TITLE>
              <ARTIST>Gary Moore</ARTIST>
              <COUNTRY>UK</COUNTRY>
              <COMPANY>Virgin records</COMPANY>
              <PRICE>10.20</PRICE>
              <YEAR>1990</YEAR>
         </CD>
         <CD>
              <TITLE>Eros</TITLE>
              <ARTIST>Eros Ramazzotti</ARTIST>
              <COUNTRY>EU</COUNTRY>
              <COMPANY>BMG</COMPANY>
              <PRICE>9.90</PRICE>
              <YEAR>1997</YEAR>
         </CD>
         <CD>
              <TITLE>One night only</TITLE>
              <ARTIST>Bee Gees</ARTIST>
              <COUNTRY>UK</COUNTRY>
              <COMPANY>Polydor</COMPANY>
              <PRICE>10.90</PRICE>
              <YEAR>1998</YEAR>
         </CD>
         <CD>
              <TITLE>Sylvias Mother</TITLE>
              <ARTIST>Dr.Hook</ARTIST>
              <COUNTRY>UK</COUNTRY>
              <COMPANY>CBS</COMPANY>
              <PRICE>8.10</PRICE>
              <YEAR>1973</YEAR>
         </CD>
         <CD>
                <TITLE>Maggie May</TITLE>
              <ARTIST>Rod Stewart</ARTIST>
              <COUNTRY>UK</COUNTRY>
              <COMPANY>Pickwick</COMPANY>
              <PRICE>8.50</PRICE>
              <YEAR>1990</YEAR>
         </CD>
         <CD>
               <TITLE>Romanza</TITLE>
              <ARTIST>Andrea Bocelli</ARTIST>
              <COUNTRY>EU</COUNTRY>
              <COMPANY>Polydor</COMPANY>
              <PRICE>10.80</PRICE>
              <YEAR>1996</YEAR>
       </CD>
         <CD>
              <TITLE>When a man loves a woman</TITLE>
              <ARTIST>Percy Sledge</ARTIST>
              <COUNTRY>USA</COUNTRY>
              <COMPANY>Atlantic</COMPANY>
              <PRICE>8.70</PRICE>
              <YEAR>1987</YEAR>
         </CD>
   </CATALOG>
        
四、新建一个java class(XqueryTest.java)

import java.io.IOException;
import java.util.Properties;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import net.sf.saxon.Configuration;
import net.sf.saxon.dom.*;
import net.sf.saxon.query.DynamicQueryContext;
import net.sf.saxon.query.StaticQueryContext;
import net.sf.saxon.query.XQueryExpression;
import net.sf.saxon.trans.XPathException;

public class XqueryTest {
 /**
  * 执行查询
  */
 public static void select(){
  //文件
  String fileString = "src/study/xquery/cd_catalog.xml";
  //查询语句
  String query = " for $s in //CD/TITLE "
    + " return $s";
  //生产文档对象
  Document document = getDocument(fileString);
  Configuration configuration = new Configuration();
  StaticQueryContext context = new StaticQueryContext(configuration, false);
  //查询表达式对象
  XQueryExpression expression = null;
  try {
   expression = context.compileQuery(query);
   DynamicQueryContext context2 = new DynamicQueryContext(configuration);
   context2.setContextItem(new DocumentWrapper(document,null,configuration));
   
   final Properties props = new Properties();
            props.setProperty(OutputKeys.METHOD, "xml");
            props.setProperty(OutputKeys.INDENT, "yes");
            //执行查询,并输出查询结果
            expression.run(context2, new StreamResult(System.out), props);
  } catch (XPathException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }
 /**
  * 生产文档对象
  *
  * @param xml   文件名
  * @return
  */
 public static Document getDocument(String xml){
  DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder;
  Document document = null;
  try {
   builder = builderFactory.newDocumentBuilder();
   document = builder.parse(xml);
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  document.normalize();
  return document;
 }
 /**
  * 输入生成的文档内容
  *
  * @param doc
  */
 public static void output(Document doc){
  TransformerFactory factory = TransformerFactory.newInstance();
  Transformer transformer = null;
  try {
   transformer = factory.newTransformer();
   Properties properties = transformer.getOutputProperties();
   properties.setProperty(OutputKeys.INDENT, "yes");
            properties.setProperty(OutputKeys.ENCODING, "GB2312");
            properties.setProperty(OutputKeys.METHOD, "xml");
            properties.setProperty(OutputKeys.VERSION, "1.0");
            transformer.setOutputProperties(properties);
           
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(System.out);
            transformer.transform(source, result);
   
  } catch (TransformerConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (TransformerException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public static void main(String[] args) {
  select();
 }
}


五、运行结果
<?xml version="1.0" encoding="UTF-8"?>
<TITLE>Empire Burlesque</TITLE>
<TITLE>Hide your heart</TITLE>
<TITLE>Greatest Hits</TITLE>
<TITLE>Still got the blues</TITLE>
<TITLE>Eros</TITLE>
<TITLE>One night only</TITLE>
<TITLE>Sylvias Mother</TITLE>
<TITLE>Maggie May</TITLE>
<TITLE>Romanza</TITLE>
<TITLE>When a man loves a woman</TITLE>
posted @ 2009-10-07 17:14 脚踏实地 阅读(1177) | 评论 (0)编辑 收藏

        要使用xquery进行查询,需要一个xquery的处理器,在此我们使用saxon处理器。
      Saxon是一个内存处理器。无论使用XSLT还是XQuery,Saxon被设计来处理在内存中装配好的源。

    用法:
    1.下载saxon压缩包
        http://saxon.sourceforge.net/   
    只需要里面的jar包
    2.jdk1.4以上即可
posted @ 2009-10-07 16:55 脚踏实地 阅读(1029) | 评论 (0)编辑 收藏
  2009年10月5日
       参加工作一年了,总觉得人生缺了点什么。现在回想一下过去,想象自己曾经在学校的拼搏和努力,很多时候都是没有明确的目标,对未来要做什么,要成为什么样的人,没有一个明确的定位,导致自己的付出没有得到相应的回报。职业生涯规划,在学校的时候经常接触,也曾经进行了职业规划,但是没有朝那个方向坚持下去。做为一个IT人,做为一个有追求的人,不能再迷茫下去了。
        在毕业后工作过的第一家公司,我也进行过职业规划,希望2--3年后能做个BSE(桥梁工程师),于是努力的学日语。我的日语进步很快,令很多新同事羡慕。进入项目后,感觉学习日语遇到了瓶颈,学习日语的时间越来越少了,那几个月天天加班到晚上11点,没有周末,那段时间,发现视力下降很多,人也瘦了。抽空学一下日语,发现没什么效果,感觉这样下去,日语的进步将会非常的缓慢,职业规划的目标不知道什么时候才能达到。
        我是不太赞成经常跳槽的,但是我也是为了自己的发展,不得已而为之。7月中旬辞职,面试通过后,进了另一家公司。为了自己的未来,再次进行职业规划。我的项目经理在问我的职业规划的时候,我说还没有想好,其实我早已有自己的职业规划,但自己又不是很肯定,因为未来的不可知,也害怕自己如果不适合自己的职业规划,到时候从头再来就太浪费时间了,这一生就没得时间折腾了,并且到那个时候对自己我相信也是一种非常大的打击。我对项目经理说我还没有想好,另一方面是想让他给我提点意见,指导一下。有时候自己对自己的认知和定位会不准确,而身边的朋友和上司也许提出一些自己还不明确的地方。我的项目经理指出了我几个劣势或缺点:1、技术不好,知识面太窄;2、缺少沟通;3、不会做记录;4、缺乏思考。
        我自己很喜欢从事技术方面的工作,喜欢软件事业。喜欢各种各样的体育活动。性格比较随和,不太善于和不熟悉的人打交道,和熟悉的朋友一般都很谈得来。我学习并使用java进行开发有两年时间了,java技术也不差。对软件工程的理论也有掌握。经常思考问题。
       我懂的技术比较少,不会写文章做记录,有时候比较沉默寡言。对java技术掌握的不深。
        目前工作环境比较宽松,同事关系融洽,公司发展迅速,经济效益高。
        结合以上对自己的一个评估和职业环境的评估,我想走技术路线。
        近期目标:用大约一年的时间多了解多学习一些技术,扩展技术面。
       短期目标:努力钻研技术,把技术提升到更高的层次,达到中级级程序员水平
        中期目标:3--5年达到高级程序员水平,能够做项目的核心模块。
    为了达到预期目标,主动学习j2ee相关技术,多看技术网站,逐步扩大学习的技术范围,了解新技术和发展方向,勤思考,多记笔记,敢于发表观点,多写程序。
        
posted @ 2009-10-05 10:33 脚踏实地 阅读(2191) | 评论 (14)编辑 收藏
仅列出标题