<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Sprouting</title>
    <description> 拿了MVP 带了冠军戒指 实在是很酷的啊 
 </description>
    <link>http://ikeel.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>IBM实习第一天</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/212003" style="color:red;">http://ikeel.javaeye.com/blog/212003</a>&nbsp;
          发表时间: 2008年07月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          4号下午终于到公司报到了，IBM中国研究院给我的第一个印象可能就是：高效，自由。<br /><br />   虽然我是下午才报到，但是很快就可以进入工作状态，感觉比较轻松自由。再就是牛人真的很多，我们组的mentor分别来自华工和北大，很幸运在这里遇到了华工的校友。<br /><br />   下午我到后就一起讨论了一会，初步了解我们要做什么。从这个交流中，我想我会有机会了解到很多关于business的东西。 我了解到，我们以后的工作可能要跟客户有比较多的交流，了解他们的需求，这对我来说也是一个挑战。再就是每个组员都会承担一个角色，尽力发挥个人的价值，mentor告诉我要做Architect的角色，所以也还是感觉到压力。不过我的校友已经是这个组大部分solution的架构设计者了，所以我想会从他那里得到很多帮助的。<br /><br /> 下个周一就要正式的开始做事了，希望一切顺利，或者是通过努力之后能做到~
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/212003#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 06 Jul 2008 11:04:31 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/212003</link>
        <guid>http://ikeel.javaeye.com/blog/212003</guid>
      </item>
      <item>
        <title>中国雄起，四川加油</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/195619" style="color:red;">http://ikeel.javaeye.com/blog/195619</a>&nbsp;
          发表时间: 2008年05月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近看到的一切让人很压抑，感觉在自然面前人类的脆弱，远远的看着那么多人经历着痛苦，甚至失去了生命，我心痛又感觉到无力。 不忍心去看但是又不得不去看那些最前线的场景，只能默默的祈祷，哀悼，然后尽自己所能献出自己的爱心。最近也有很多人心理上会有些问题，那些从前线回去的人更是如此，而对于我们，心理上也似乎蒙上了一些什么，这个时候献出更多的爱心或许会让自己觉得好受一些，我在网上也看到某些专家如是建议。比如捐款，捐物，去献血，或者在激动的时候喊出一句“中国雄起”，“四川，加油”.....
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/195619#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 22 May 2008 13:11:01 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/195619</link>
        <guid>http://ikeel.javaeye.com/blog/195619</guid>
      </item>
      <item>
        <title>来自佛家的养生智慧</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/189255" style="color:red;">http://ikeel.javaeye.com/blog/189255</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          佛教文化是中国传统文化的一部分,就养生而言,可以概括为“五福”，即：长寿、富贵、康宁、好德、善终。<br /><br />    现代人类社会,科学技术日益发达,物质生活越来越丰富，人们对自身的生存状态也重视起来，尤其是健康状况。而来自社会的、家庭的、单位的、情感的等等方面压力，使我们的情绪时好时坏,疲于奔命，它带给我们烦躁、急功近利、感官刺激、忧郁压抑，自我封闭乃至生命的夭折。而通过对佛教文化的了解，又可以使我们获得快乐、安逸、坦然、安详和健康。<br /><br />    世事的纷扰，内心的挣扎，总使人觉得人生是多么的寂寞无助，总是不由自主地陷入无可名状的忧伤中。很多无奈苦恼的事，我们很难摆脱；世上有太多的忙碌紧张，我们无法逃避。名利是生存的需要，我们必须去孜孜以求，欲望却是人性的膨胀，为了达到目的所付出的心计劳力，比起单纯的物质需求还要让人疲惫憔悴。内心那股压迫人心的力量，使我们一天到晚就像陀螺一样转个不停，因而时时感到焦躁不安，此时理想与爱情成为多余，成为梦中美丽的幻象，心灵的安宁被物质被欲望所奴役，心态的失衡使人生走向悲哀无助，若到极处，甚至可能铤而走险。<br /><br />    因此，拥有一颗平常心就愈加显得珍贵了。<br /><br />    平常心是对生命透彻的领悟，古人曰：生命薄如蝉翼，存在就该满足，这是有一定道理的，在此气象之下，一切烦恼困顿，均可弃之流水，领悟生命的真谛，知晓弥足珍贵，就会以一颗宁静的心善待一切。<br /><br />    日本学者铃木大拙说：“井边的牵牛花缠住我的木桶，我借水喝。”这是多么博大恢宏的心境，又是多么荡人心魄的情怀，为了珍惜一个弱小的生命，宁愿去借水喝，如果没有一颗悲悯的平常心，是难以做到的。<br /><br />    平常心是一种境界，在达到这种境界之前，心路常常有极为坎坷的历程，历了险峰，经了幽谷，才发现世事沧桑，如梦、如幻。<br /><br />    一切从生命出发，我们便可以做出最合理的选择，一面对生命尽心呵护，一面又悉心体验，东涌西没，毫无蔽障，对人宽容平和，随方就圆。<br />    因此，平常心不仅使人具有大海一样的气度，还使人稳重如山。狂风暴雨之中，惊涛骇浪，松林翻滚，可大海深处平静如昨，山岿然不动，以如此胸怀去实践人生，就无所畏惧。对困难也绝不能退避，诸葛亮曰：淡泊以明志，宁静以致远。淡然面对人间是是非非，保持心灵宁静的同时，不忘对理想的追求，对宝贵生命的敬畏，长此以往，定可令生命发扬光大。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/189255#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 12:41:34 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/189255</link>
        <guid>http://ikeel.javaeye.com/blog/189255</guid>
      </item>
      <item>
        <title>五星红旗很多很壮观</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/186904" style="color:red;">http://ikeel.javaeye.com/blog/186904</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天看见很多宿舍的窗户挂起了五星红旗~很多很壮观~
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/186904#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 18:07:49 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/186904</link>
        <guid>http://ikeel.javaeye.com/blog/186904</guid>
      </item>
      <item>
        <title>MyEclipse 中开发SCA应用入门</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/186339" style="color:red;">http://ikeel.javaeye.com/blog/186339</a>&nbsp;
          发表时间: 2008年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          SCA：service component architectur<br />   这是一种面向服务的基础架构设计，方便了在此基础上实现SOA的应用。SCA只是一个规范，对这个规范的实现有多种，其中Apache的Tuscany SCA就是其中一种。<br />   首先，我只是结合我自己的理解简单介绍一下SCA，然后在把我自己写的一个最简单的HelloWorld如何搭建起来的做一个描述。<br />    借助Tuscany的实现描述SCA 运行时：<br />首先是运行环境：包括操作系统，虚拟机，容器等等。诚挚为Hosting Platforms<br />在此之上是运行时的Core 和Extension部分，这个设计是微内核的，Core就是这个核，Core提供的功能，运行时实现，以及提供Extension的机制。<br />在Core之外提供Extension：比如Apache tuscany 提供的SDO，DAS都是这种Extension。 这样一种相当于插件机制的设计增加了灵活性。<br />在Core和extension之上就是：Tuscany API，提供给开发者更多的方便。<br /><br /> 在SCA中有几个很重要的概念：<br />Component：具有独立功能的程序模块。<br />Service：component提供给外部的服务。<br />Referrence：对其他服务的引用。<br />Composite：多个component的高一层次封装。<br />Wire：链接Referrence和component。<br />Promote：同一个composite内多个component之间的链接。<br />Domain： 一个composite是一个最简单的Domain。Domain是对n个composite组织的高一层次封装。<br /><br />  基本的概念就只描述这些了，下面看看如何把最简单的SCA HelloWorld运行起来。<br />  <br /> 1，到Apache官方网站下载Tuscany SCA binary package 和对应源码。<br /> 2，在MyEclipse中新建UserLibrary，把binary package下的jar包全部加入到其中，并关联下载的源代码到sca-all.jar<br /> 3,新建工程，并引入刚才建立的UserLibrary。<br /> 4，其实运行HelloWorld很简单：<br />   建立接口：<br /><br /> <br /><pre name="code" class="java">
package Hello;

import org.osoa.sca.annotations.Remotable;
 
public interface IHello {
 public String show(String name);
}

</pre><br /><br />然后实现接口：<br /><pre name="code" class="java">
package Hello;

public class HelloImpl  implements IHello{
	
	public String show(String name)
	{
		  return "Hello"+name;
	}

}

</pre><br /><br />接下来就是要写一个Hello.composite 配置文件：<br /><pre name="code" class="xml">
&lt;?xml version="1.0" encoding="UTF-8"?>
 &lt;composite  xmlns="http://www.osoa.org/xmlns/sca/1.0" name="hello">
 ＜component name="Hello"＞
＜implementation.java class="Hello.HelloImpl"/＞
＜service name="Hello"＞
＜binding.ws uri="hello-there"/＞
＜t:binding.jsonrpc uri="hello-nicer"/＞
＜/service＞
＜/component＞
&lt;/composite>
</pre><br />    这个文件其实就对应了Composite ，component，service 等概念。比较容易明白。<br /><br />还需要一个Client来调用这个composite：<br /><br /><pre name="code" class="java">
package Hello;

import org.apache.tuscany.sca.host.embedded.SCADomain;
public class HelloClient {

	public static void main(String[] args)
	{
	SCADomain domain=SCADomain.newInstance("hello.composite");
	IHello ihello=	domain.getService(IHello.class, "Hello");
  if(ihello!=null)
	  ihello.show("ccx");
  domain.close();
	}
	
}

</pre><br /><br />这个HelloClient从配置文件Hello.composite读取配置并建立了domain，然后或得Hello服务接口，并完成对服务的调用。<br /><br />这个例子很简单，但也可以对SCA中一些最基本的概念有所了解。有了这个的基础上，可以再深入学习更多的东西了。<br /><br /> 将持续关注SCA。and OSGI
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/186339#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Apr 2008 12:47:01 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/186339</link>
        <guid>http://ikeel.javaeye.com/blog/186339</guid>
      </item>
      <item>
        <title>纵有Wade，Heat无望</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/184553" style="color:red;">http://ikeel.javaeye.com/blog/184553</a>&nbsp;
          发表时间: 2008年04月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          07-08赛季，16胜66负，热火结束了这个赛季所有的比赛，不用说了与季后赛无缘， 1988-89赛季热火曾打出过常规赛15胜67负的成绩。<br />关注Heat是从Wade开始，还记得战胜小牛摘取总冠军戒指时Wade的神勇，但是06-07赛季热火保持了他的阵容，一个让人担忧的老年化阵容。尽管06/07赛季,热火卫冕不成，但是我们还是记住了在伤病的折磨下依然坚强的为卫冕冠军而努力所有队员。<br />07-08，希望再次破灭，球队阵容有所调整，但是哈达威似乎也不是当初的便士，奥尼尔还在的时候也总是会招来一些疑义：年纪大了，还有多大本事？ 赛季中期拿鲨鱼交易了太阳的马里昂， 且不说马里昂离开了Nash能做些什么，他的伤病也让他缺席很多长比赛。 靠Wade么？Wade 这个赛季出场51次，首发49次，平均得分24.6，并且膝伤在身，纵使闪电侠，也真的“难救主”,这个词被很多次用到，热火不能靠谁去救主，是需要换点新血液了。所以最近听说莱利的去留成了一个议题。希望Wade走得更好，希望Heat走得更好。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/184553#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 20 Apr 2008 12:53:58 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/184553</link>
        <guid>http://ikeel.javaeye.com/blog/184553</guid>
      </item>
      <item>
        <title>把我的头像换成了红心</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/184259" style="color:red;">http://ikeel.javaeye.com/blog/184259</a>&nbsp;
          发表时间: 2008年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          对以ZD分子，对于西方媒体的曲解谩骂，对于国内反“反华”呼声的高起,引起一系列讨论和思考。<br />  对于Carrefour，我个人觉得持抵制态度是吧不合理的，尤其是不希望发生暴力事件，毕竟最终受害的还有大批的中国人，用经济的方式反击政治上的攻击是否合适呢？<br />   我还是把我的头像换成了红心~<br /><br />    我觉得下面的关于媒体丑化中国的分析是有道理的：<br /> <br />　　西方媒体丑化中国原因有五﹕ <br /><br />　　一 缺乏对中国历史、文化、社会和政治深刻认识，往往以西方的价值观看中国，刻意批评攻击中国社会，塑造所谓的中国问题。 <br /><br />　　二迎合西方社会对中国近年经济成长的嫉妒，片面报导中国产品的问题，肆意打击中国产品。然而，对西方厂家的设计和价格要求，品质监管的责任，或西方政府对入口货物的检查则絶口不提。 <br /><br />　　三西方媒体竞争激烈，不惜摒弃一贯专业操守来抢先报导新闻，因而没有严谨把关，认真检查新闻真伪，草率地即时报导，导致报导的偏差和谬误。 <br /><br />　　四迎合西方主流社会一贯的白人优越感，西方媒体动辄有选择地报道中国社会落後，或丑恶的一面，譁众取宠，满足看轻中国，自高自大的心态。 <br /><br />　　五 近年来西方盛行「现境电视」(Reality TV)，侧重煽动观众的情绪，满足官感，内容流於肤浅空洞。歪风所及，原本应该是保持客观的新闻报导亦走向煽情(sensational)。中国的部份社会民情遂时常成为被抺黑丑化的对象。 <br /><br />　　面对西方媒体的片面、偏颇或谬误的报道，应对的方法有五﹕ <br /><br />　　一 中国驻外大使馆或领事馆应该及时和多方留意西方媒体的报导，并且不时召开记者招待会，主动发布新闻来澄清失实的报导。 <br /><br />　　二中国国务院及外交部应该多多了解西方的历史、社会文化、价值观、政治制度，从而有意识和有效地引述西方历史或社会事件回答西方媒体的提问，使其更明白中国事务与西方事务的共通和差异之处。 <br /><br />　　三中国应该成立西方新闻分析研究中心，有系统地仔细检查，办识西方媒体新闻报导的谬误，如果有诽谤不实之处，可以投诉发布新闻的单位，要求更正，亦可循当地的法律途径，将对方告上法庭，拨乱反正，以正视听。 <br /><br />　　四海外华人应该多多回应失实或偏差的报导，防止道听途说的一再发生。二次大战期间，日本发动太平洋战争，北美媒体制造「反日情绪」。殃及日裔美国或加拿大公民，家园财产被政府剥夺，更被拘禁入集中营里，饱受艰苦。又有纳粹德国制造「反犹情绪」，大肆杀戮犹裔德国公民。故此，近日的「反华风潮」与海外华人息息相关，不容忽视。 <br /><br />　　五 全球华人亦可尽其本份，利用互联网之便，随时浏览西方媒体的报导，一旦发现有失实谬误之处，立刻留言反驳，以正视听。 <br /><br /><br />所以，把头像换成了红心，代表我在思考，我在关心，为了我的国，我的家，我能尽力做点什么。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/184259#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 19 Apr 2008 08:48:52 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/184259</link>
        <guid>http://ikeel.javaeye.com/blog/184259</guid>
      </item>
      <item>
        <title>图像纹理描述中的共生矩阵</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/183158" style="color:red;">http://ikeel.javaeye.com/blog/183158</a>&nbsp;
          发表时间: 2008年04月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在对图像纹理特征进行分析的时候，一种可用的方法是做共生矩阵分析，共生矩阵用两个位置的象素的联合概率密度来定义：涉及到的参数有：灰度值，方向，距离。<br />可以这样描述：共生矩阵描述了点A的灰度级为i,在与A距离d和角度a的点B的灰度级为j的频率。所以如果灰度级为N，共生矩就是一个N*N的矩阵。<br />定义表达式：<br />设f(x,y)为一幅二维数字图象，其大小为M×N，灰度级别为N,则满足一定空间关系的灰度共生矩阵为<br />P(i,j)=Count｛(x1,y1),(x2,y2)∈M×N｜f(x1,y1)=i,f(x2,y2)=j｝<br />Count表示统计的像素点数。<br /><br />若(x1,y1)与(x2,y2)间距离为d,两者与坐标横轴的夹角为θ，则可以得到各种间距及角度的灰度共生矩阵P(i,j,d,θ)。通常θ方向为:0°,45°,90°,135°4个方向.<br />对粗纹理的区域，其灰度共生矩阵中的比较大的值较集中于主对角线附近。因为对于粗纹理，像素对趋于具有相同的灰度。而对于细纹理的区域，其灰度共生矩阵中的值则散布在各处。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/183158#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Apr 2008 10:07:47 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/183158</link>
        <guid>http://ikeel.javaeye.com/blog/183158</guid>
      </item>
      <item>
        <title>加速matlab运行</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/182942" style="color:red;">http://ikeel.javaeye.com/blog/182942</a>&nbsp;
          发表时间: 2008年04月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一、 遵守Performance Acceleration的规则<br />二、 遵守三条规则<br /> <br /><br /><br /><br /><br /><br />一、 遵守Performance Acceleration的规则<br />关于什么是“Performance Acceleration”请参阅matlab的帮助文件。我只简要的将<br />其规则总结如下7条：1、只有使用以下数据类型，matlab才会对其加速：logical,char,int8,uint8,int16,uint16,int32,uint32,double<br />而语句中如果使用了非以上的数据类型则不会加速，如：numeric,cell,structure,single,<br />function handle,java classes,user classes,int64,uint64<br />2、matlab不会对超过三维的数组进行加速。3、当使用for循环时，只有遵守以下规则才会被加速：a、for循环的范围只用标量值<br />来表示；<br />b、for循环内部的每一条语句都要满足上面的两条规则，即只使用支持加速的数<br />据类型，只使用<br />三维以下的数组；c、循环内只调用了内建函数（build-in function）。4、当使用if、elseif、while和switch时，其条件测试语句中只使用了标量值时，将<br />加速运行。<br />5、不要在一行中写入多条操作，这样会减慢运行速度。即不要有这样的语句：<br />x = a.name; for k=1:10000, sin(A(k)), end;<br />6、当某条操作改变了原来变量的数据类型或形状（大小，维数）时将会减慢运行速<br />度。<br />7、应该这样使用复常量x = 7 + 2i，而不应该这样使用：x = 7 + 2*i,后者会降低<br />运行速度。<br /><br />二、 遵守三条规则<br />1、尽量避免使用循环,MATLAB的文档中写到“MATLAB is a matrix language, which means it is designed<br />for vector and matrix operations. You can often speed up your M-file c<br />ode by using<br />vectorizing algorithms that take advantage of this design. Vectorizati<br />on means converting<br />for and while loops to equivalent vector or matrix operations.”。改进<br />这样的状况有两种方法：<br />a、尽量用向量化的运算来代替循环操作。如将下面的程序：<br />i=0;<br />for t = 0:.01:10<br />i = i+1;<br />y(i) = sin(t);<br />end<br />替换为：<br />t = 0:.01:10;<br />y = sin(t);<br />速度将会大大加快。最常用的使用vectorizing技术的函数有：All、diff、ipermute、permute、reshape、squeeze、any、find、logical、prod、shiftdim、sub2ind、cumsum、ind2sub、ndgrid、repmat、sort、sum 等。<br />请注意matlan文档中还有这样一句补充：“Before taking the time to<br />vectorize your code, read the section on Performance Acceleration.<br />You may be able to<br />speed up your program by just as much using the MATLAB JIT Accelera<br />tor instead of<br />vectorizing.”。何去何从，自己把握。<br />b、在必须使用多重循环时下，如果两个循环执行的次数不同，则在循环的外环执<br />行循环次数少的，<br />内环执行循环次数多的。这样可以显著提高速度。<br />2、a、预分配矩阵空间，即事先确定变量的大小，维数。这一类的函数有zeros、ones、cell、struct、repmat等。<br />b、当要预分配一个非double型变量时使用repmat函数以加速，如将以下代码：<br />A = int8(zeros(100));<br />换成：<br />A = repmat(int8(0), 100, 100);<br />c、当需要扩充一个变量的大小、维数时使用repmat函数。<br />3、a、优先使用matlab内建函数，将耗时的循环编写进MEX-File中以获得加速。b、使用Functions而不是Scripts 。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/182942#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Apr 2008 16:02:28 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/182942</link>
        <guid>http://ikeel.javaeye.com/blog/182942</guid>
      </item>
      <item>
        <title>被FCKeditor给弄的快疯掉了！！</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/182581" style="color:red;">http://ikeel.javaeye.com/blog/182581</a>&nbsp;
          发表时间: 2008年04月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          FCKEditor显示在页面上总是只有一个TextArea，折腾了差不多十多个小时，还是周导一句话就解决了，FCKeditor是默认搜索路径，不需要自己再配置这个路径。。。。。。尤其是，找不到文档描述。<br />  无语。。。。。<br />  开始极其反感网络上照搬其他人文章的人了，因为我google出来介绍FCK JSF 的文章几乎全是同一篇文章。<br />  明白了，要尽早请教，交流中会发现问题的。。。。。。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/182581#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 14 Apr 2008 14:44:49 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/182581</link>
        <guid>http://ikeel.javaeye.com/blog/182581</guid>
      </item>
      <item>
        <title>XP Solaris 双系统安装经历</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/181955" style="color:red;">http://ikeel.javaeye.com/blog/181955</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天把硬盘整了一下，想装个Solaris玩玩， 不过还是比较担心会挂掉的，所以呢首先就有所准备。<br />下了一些工具：PQmagic  BootMagic   DiskMan<br />首先用DiskMan备份分区表：DiskMan要在纯Dos下运行的，所以呢要先弄个Dos系统，下了一个VFloppy的小软件，很简单就加入了Dos系统，然后就可以从Dos启动运行DiskMan。备份好分区表之后，最好自己记录下分区参数。可以用DiskMan对分区进行调整，建立主分区，不过我还是重新进入XP用pqmagic。 <br />用pqmagic建立主分区。<br />运行BootMagic，将刚才的分区加入到启动选项中。<br />重启安装系统，选择刚才分出的主分区。<br />接着是漫长的等待。<br />之后在进入XP设置BootMagic启动选项。<br />现在两个系统都可以引导的。<br /><br />如果过程中有意外，DiskMan就是救星了，用它恢复分区表或许还可以挽回点损失。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/181955#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 22:05:28 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/181955</link>
        <guid>http://ikeel.javaeye.com/blog/181955</guid>
      </item>
      <item>
        <title>SWT的Table对单元格添加可编辑属性</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/181035" style="color:red;">http://ikeel.javaeye.com/blog/181035</a>&nbsp;
          发表时间: 2008年04月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先是初始化Display ， shell ，然后建立table，初始化table：<br />主要代码贴在下面了：<br />display = new Display();<br />		font1=new Font(display,"宋体",10,SWT.BOLD);<br />		font2=new Font(display,"宋体",12, SWT.ITALIC);<br />		font3=new Font(display,"宋体",12,SWT.BOLD );<br />		shell = new Shell(display);<br />		shell.setBounds(0, 0, 950, 600);<br />		shell.setText("电信系学生信息管理系统(Designed By Ikeel)");<br />		shell.setImage(new Image(null, "image/book.jpg"));<br />		shell.setBackgroundImage(new Image(null, "image/13.jpg"));<br />        shell.setBackgroundMode(SWT.MOD1);<br /><br /><br /><br />初始化Table：<br /><br />table = new Table(group, SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE<br />				| SWT.FULL_SELECTION | SWT.CHECK);<br />		table.setHeaderVisible(true);<br />		table.setLinesVisible(true);<br />		 table.setBounds(15,45,695, 290);<br />		table.setItemCount(Itemcount);<br />		table.setBackground(display.getSystemColor(SWT.COLOR_WHITE));<br />        table.setFont(Display.getCurrent().getSystemFont());<br />        TableColumn[]  columns=new TableColumn[headers.length];<br />		for (int i = 0; i &lt; headers.length; i++) {<br />		    columns[i] = new TableColumn(table, SWT.CENTER);<br />			columns[i].setText(headers[i]);<br />			columns[i].setResizable(Boolean.TRUE);<br />			columns[i].setWidth(Width[i]);<br />		}<br /><br /><br /><br />Table的初始化基本就这些了，然后是推每个TableItem增加Listener，当有Selection事件时，根据行和列可以定位到每一个Cell，然后就可以处理事件，为一个Cell添加可编辑的方法是增加一个TableEditor：代码如下：<br /><br /> table.addListener(SWT.MouseDoubleClick, new Listener()<br /><br />		{<br />			public void handleEvent(Event event) {<br />				Point point = new Point(event.x, event.y);<br />			final	TableItem item = table.getItem(point);<br /><br />				if (item == null)<br />					return;<br />				for (int i = 0; i &lt; columnsize; i++) {<br />					Rectangle rectang = item.getBounds(i);<br />					if (rectang.contains(point)) {<br />EDITABLECOLUMN = i;<br />final TableEditor editor = new TableEditor(<br />										table);<br />								Control oldEditor = editor.getEditor();<br />								if (oldEditor != null)<br />									oldEditor.dispose();<br />//添加Editor<br />final Text texteditor = new Text(table,<br />										SWT.NONE);<br />								texteditor.computeSize(SWT.DEFAULT, table<br />										.getItemHeight());<br />								editor.grabHorizontal = true;<br />								editor.minimumHeight = texteditor.getSize().y;<br />								editor.minimumWidth = texteditor.getSize().x;<br />								editor.setEditor(texteditor, item,<br />										EDITABLECOLUMN);<br />								texteditor.setFont(new Font(display,"宋体",12, SWT.ITALIC));<br /><br />								texteditor.setText(item<br />										.getText(EDITABLECOLUMN));<br />								texteditor.forceFocus();<br />								texteditor<br />										.addModifyListener(new ModifyListener() {<br /><br />				//开始编辑的事件							public void modifyText(<br />													ModifyEvent event) {<br />												Text text = (Text) editor<br />														.getEditor();<br />												text.setForeground(display.getSystemColor(SWT.COLOR_RED));<br />												editor.getItem().setText(<br />														EDITABLECOLUMN,<br />														text.getText());<br />											}<br />										});<br />                                <br /> texteditor<br />										.addFocusListener(new org.eclipse.swt.events.FocusAdapter() {<br />											public void focusLost(<br />													org.eclipse.swt.events.FocusEvent e) {<br /><br />///这里写的是当编辑后失去焦点后做的处理<br />}<br /><br /><br /><br />}   <br /><br /><br />这个编辑器贴代码不是很方便啊，就不再贴了，不过添加表格单元格编辑的基本的方法的代码已经在上面了。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/181035#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Apr 2008 22:02:46 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/181035</link>
        <guid>http://ikeel.javaeye.com/blog/181035</guid>
      </item>
      <item>
        <title>JVM_8080 Already In use 暴力解决方法</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/180955" style="color:red;">http://ikeel.javaeye.com/blog/180955</a>&nbsp;
          发表时间: 2008年04月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在Myeclipse中启动tomcat报错： JVM——8080 Already in use .<br /> 以前都是去找tomcat配置文件修改端口，但是很麻烦。想直接把8080端口给停用了。只知道有netstat命令可以查看端口使用状况： netstat -ano  可以看到是哪个PID使用了8080端口。<br /> 然后用到一个命令： ntsd -c q -p PID 就可以直接Kill掉占用端口的进程。<br /><br /> 这个过程中还发现另外一个命令，tasklist 可以查看进程。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/180955#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Apr 2008 18:57:06 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/180955</link>
        <guid>http://ikeel.javaeye.com/blog/180955</guid>
      </item>
      <item>
        <title>SWT开发的一个简单的信息管理软件</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/180284" style="color:red;">http://ikeel.javaeye.com/blog/180284</a>&nbsp;
          发表时间: 2008年04月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          花了两天时间做了个简单的信息管理软件，界面开发采用了SWT，之所以选SWT呢，是因为据说它美观和效率较之awt和swing有优势。<br /> 这个也算是我学习SWT的一次练习了。<br /> 在这个过程中，还是学到的比较多的东西。<br />1，由于要考虑双向链表实现，所以对JRE的LinkedList等集合类的关系和实现有一些了解。<br />2，SWT的常用控件：Button ，Text ，Table ，TableEditor，Combo，Group等等，对SWT中两个最基本元素：Shell，Display对象有了一些理解。<br />3， 学习SWT的事件处理机制，怀念C#中那个好用的Delegate的了。<br />4，把我写的东西打个包发在这里，希望能给想学习SWT的朋友有所帮助。<br /><br />我还会抽点时间总结一下SWT的一些基础知识和技巧。<br /><br />怎么上传附件总是失败呢...??
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/180284#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Apr 2008 21:35:34 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/180284</link>
        <guid>http://ikeel.javaeye.com/blog/180284</guid>
      </item>
      <item>
        <title>用MyEclipse开发OSGi的例子</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/179478" style="color:red;">http://ikeel.javaeye.com/blog/179478</a>&nbsp;
          发表时间: 2008年04月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          OSGi：Open Service GateWay Initiative。<br />熟悉Myeclipse的开发者肯定会喜欢它的插件机制的，在这种可扩展的机制后面，就是OSGi 的支持。Equinox就是一个OSGI规范的实现。我在MyEclipse下做了个小小的例子。通过这个例子，能对OSGI有个直观的感受。<br /><br />1，建立插件工程：名称为：com.systemmanagement.services<br />选择目标平台的时候要注意选择OSGi Framework，Standard和Equinox都可以。<br />然后就是在这个工程下建立一个服务接口：<br /><br />package com.systemmanagement.services.monitor;<br /><br /> <br />public interface SysMonitor {<br /><br />	 public String showCPUInfo();<br />}<br /><br />为了让这个接口能作为服务被导出，需要在Manifest文件中做点修改：<br />加入这句：<strong>Export-Package: com.systemmanagement.services.monitor</strong><br /><br />2，再新建一个插件工程，名称为，com.systemmanagement.cpumonitor.建立这个工程的过程中选中自动生成Activator。<br />这个工程中有一个CpuMonitor类实现了SysMonitor接口。这个类的代码如下：<br />package com.systemmanagement.cpumonitor;<br /><br />import com.systemmanagement.services.monitor.SysMonitor;<br /><br />public class CpuMonitor  implements SysMonitor{<br /><br />	public String showCPUInfo()<br />	{<br />		return "CPU is in a good state ,don't worry";<br />	}<br />}<br /><br />同样的要对Manifest文件做修改：<br />加入：<strong>Import-Package: com.systemmanagement.services.monitor,org.osgi.framework;version="1.3.0"</strong><br /><br />自动生成的Activator类的代码有start和stop方法要实现：<br />代码如下：<br /><br />package com.systemmanagement.cpumonitor;<br /><br />import org.osgi.framework.BundleActivator;<br />import org.osgi.framework.BundleContext;<br />import com.systemmanagement.services.monitor.SysMonitor;<br />import com.systemmanagement.cpumonitor.CpuMonitor;<br />import org.osgi.framework.ServiceRegistration;<br />import java.util.Properties;<br /><br />public class Activator implements BundleActivator {<br /><br />	/*<br />	 * (non-Javadoc)<br />	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)<br />	 */<br />	BundleContext context=null;<br />	ServiceRegistration sr=null;<br />	public void start(BundleContext context) throws Exception {<br />		this.context=context;<br />		CpuMonitor cpumonitor=new CpuMonitor();<br />		Properties pro=new Properties();<br />		pro.put("device", "cpu");<br />		sr=this.context.registerService(SysMonitor.class.getName(), cpumonitor, pro);<br />		<br />	}<br /><br />	/*<br />	 * (non-Javadoc)<br />	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)<br />	 */<br />	public void stop(BundleContext context) throws Exception {<br />		sr.unregister();<br />        context=null;<br /><br />	}<br /><br />}<br /><br />3，还要再建立第三个插件工程，命名为com.systemmanagement.console。<br />先修改Manifest：Import-Package: com.systemmanagement.services.monitor, org.osgi.util.tracker,  org.osgi.framework;version="1.3.0" <br /><br />这个工程中有一下几个Class：<br /><br />package com.systemmanagement.console;<br /><br />import java.util.HashSet;<br />import java.util.Iterator;<br />import com.systemmanagement.services.monitor.SysMonitor;<br /><br />public class ConsoleThread extends Thread{<br /><br />	private HashSet&lt;SysMonitor> monitor=new HashSet&lt;SysMonitor>();<br />	private boolean running= Boolean.TRUE;<br />	<br />	public ConsoleThread()<br />	{}<br />	<br />	public void addService(SysMonitor service)<br />	{<br />		this.monitor.add(service);<br />	}<br />	<br />	public void removeService(SysMonitor service)<br />	{<br />		this.monitor.remove(service);<br />	}<br />	<br />	public void run()<br />	{<br />		while(running)<br />		{<br />			for (Iterator&lt;SysMonitor> sysit=monitor.iterator();sysit.hasNext();)<br />			{<br />			 SysMonitor sysmonitor=sysit.next();<br />			 System.out.println(sysmonitor.showCPUInfo());<br />				<br />			}<br />			try<br />			{<br />				Thread.sleep(5000);<br />			}<br />			catch(Exception e)<br />			{<br />				System.out.println("Thread Exception");<br />			}<br />		}<br />	}<br />	<br />	public void stopThread()<br />	<br />	{<br />		this.running=false;<br />		try<br />		{<br />			this.join();<br />		}<br />		catch(Exception e)<br />		{<br />			System.out.println(e.getLocalizedMessage());<br />		}<br />	}<br />	<br />}<br /><br /><br />MonitorServiceTracker：<br /><br />package com.systemmanagement.console;<br /><br />import org.osgi.framework.ServiceReference;<br />import org.osgi.util.tracker.*;<br />import org.osgi.framework.*;<br />import com.systemmanagement.services.monitor.*;<br /><br />public class MonitorServiceTracker implements ServiceTrackerCustomizer {<br /><br />	private BundleContext bctx;<br />	private ConsoleThread thread;<br />	<br />	public MonitorServiceTracker(BundleContext ctx,ConsoleThread th)<br />	{<br />		this.bctx=ctx;<br />		this.thread=th;<br />		<br />	}<br />	public Object addingService(ServiceReference arg0) {<br />		// TODO Auto-generated method stub<br />		SysMonitor service=(SysMonitor)bctx.getService(arg0);<br />		thread.addService(service);<br />		return service;<br />	}<br /><br />	public void modifiedService(ServiceReference arg0, Object arg1) {<br />		// TODO Auto-generated method stub<br />		SysMonitor service=(SysMonitor)bctx.getService(arg0);<br />		thread.addService(service);<br />		<br />	}<br /><br />	public void removedService(ServiceReference arg0, Object arg1) {<br />		// TODO Auto-generated method stub<br />		SysMonitor service=(SysMonitor)bctx.getService(arg0);<br />		thread.removeService(service);<br />	}<br /><br />	<br />}<br /><br /><br />还有一个Activator：<br /><br />package com.systemmanagement.console;<br /><br />import org.osgi.framework.BundleActivator;<br />import org.osgi.framework.BundleContext;<br />import org.osgi.util.tracker.*;<br />import com.systemmanagement.services.monitor.*;<br /><br />public class Activator implements BundleActivator {<br /><br />	/*<br />	 * (non-Javadoc)<br />	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)<br />	 */<br />	private BundleContext context;<br />	private ServiceTracker servicetrack;<br />	private ConsoleThread thread=new ConsoleThread();<br />	<br />	public void start(BundleContext context) throws Exception {<br />		<br />		this.context=context;<br />		servicetrack=new ServiceTracker(context,SysMonitor.class.getName(),new MonitorServiceTracker(context,thread));<br />		servicetrack.open();<br />		this.thread.start();<br />	}<br />	<br /><br />	/*<br />	 * (non-Javadoc)<br />	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)<br />	 */<br />	public void stop(BundleContext context) throws Exception {<br />	<br />	servicetrack.close();<br />	this.thread.stopThread();<br />	}<br /><br />}<br /><br />4,要用到的代码就这些了，下面来看看效果吧。<br />上面我们建立的三个插件工程其实就是SOGI概念中的Bundle，那么这些bundle需要在OSGI框架下运行和管理，如果你装了Eclipse那么Equinox就是一个现有的SOGi框架了，在你的硬盘上找出这个包：org.eclipse.osgi.jar  版本可以是其他的。<br />我把它copy到了一个简单的目录下：F：commonLib/osgi下面；<br />然后在命令下进入到上述目录，运行：java -jar org.eclipse.osgi.jar -console<br />出现了 osgi-> 然后就可以运行sogi的命令了：<br /> 运行help可以查看到可用的命令，列举如下：<br /><br />osgi> help<br /><br />Valid commands:<br />---Controlling the OSGi framework---<br />        launch - start the OSGi Framework<br />        shutdown - shutdown the OSGi Framework<br />        close - shutdown and exit<br />        exit - exit immediately (System.exit)<br />        init - uninstall all bundles<br />        setprop &lt;key>=&lt;value> - set the OSGi property<br />---Controlling Bundles---<br />        install - install and optionally start bundle from the given URL<br />        uninstall - uninstall the specified bundle(s)<br />        start - start the specified bundle(s)<br />        stop - stop the specified bundle(s)<br />        refresh - refresh the packages of the specified bundles<br />        update - update the specified bundle(s)<br />---Displaying Status---<br />        status [-s [&lt;comma separated list of bundle states>]  [&lt;segment of bsn>]<br />] - display installed bundles and registered services<br />        ss [-s [&lt;comma separated list of bundle states>]  [&lt;segment of bsn>]] -<br />display installed bundles (short status)<br />        services {filter} - display registered service details<br />        packages {&lt;pkgname>|&lt;id>|&lt;location>} - display imported/exported package<br /> details<br />        bundles [-s [&lt;comma separated list of bundle states>]  [&lt;segment of bsn><br />]] - display details for all installed bundles<br />        bundle (&lt;id>|&lt;location>) - display details for the specified bundle(s)<br />        headers (&lt;id>|&lt;location>) - print bundle headers<br />        log (&lt;id>|&lt;location>) - display log entries<br />---Extras---<br />        exec &lt;command> - execute a command in a separate process and wait<br />        fork &lt;command> - execute a command in a separate process<br />        gc - perform a garbage collection<br />        getprop  { name } - displays the system properties with the given name,<br />or all of them.<br />---Controlling Start Level---<br />        sl {(&lt;id>|&lt;location>)} - display the start level for the specified bundl<br />e, or for the framework if no bundle specified<br />        setfwsl &lt;start level> - set the framework start level<br />        setbsl &lt;start level> (&lt;id>|&lt;location>) - set the start level for the bun<br />dle(s)<br />        setibsl &lt;start level> - set the initial bundle start level<br />---Controlling the Profiling---<br />        profilelog - Display & flush the profile log messages<br /><br />---Eclipse Runtime commands.---<br />        diag - Displays unsatisfied constraints for the specified bundle(s).<br />---Controlling the Console---<br />        more - More prompt for console output<br /><br />然后就install我们刚才写的那几个Bundles吧；<br />第一步是打包刚才写的bundle：在myeclipse里面通过export，然后仅选择我们自己写的三个和osgi framework这四个，然后选择一个路径，finish之后，就自动生成了jar包。<br /><br />接下来就可以运行install命令了：install ：file:///youpath/service.jar<br />依次装载三个jar 。<br />然后在用ss查看状态和序号，<br />分别运行：start 2 ； start 3； start4 ；<br />好了你看到想要的结果了。然后体验osgi吧。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/179478#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Apr 2008 10:51:49 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/179478</link>
        <guid>http://ikeel.javaeye.com/blog/179478</guid>
      </item>
      <item>
        <title>jar命令加入Main-Class描述</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/179298" style="color:red;">http://ikeel.javaeye.com/blog/179298</a>&nbsp;
          发表时间: 2008年04月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          想在Jar包的Manifest文件中加入Main-Class描述符，在网上查了一下，大都是说要自己写一个manifest文件，在里面定义Main-Class，然后运行：jar cvf ikeel.jar mymanifest.mf src/.<br />但是我发现我试了几次总是不行，查看Manifest文件，其实并没有加入Main-class定义。<br />后来看来一下jar命令的参数选项，发现有一个e参数，是用来定义Main-Class的。<br />所以我就执行了：jar cvfe ikeel.jar test.Entry src/. 再次查看Manifest文件，已经加入了Main-Class的定义。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/179298#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Apr 2008 15:58:16 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/179298</link>
        <guid>http://ikeel.javaeye.com/blog/179298</guid>
      </item>
      <item>
        <title>Spring2.5中可以用Annotation代替xml配置bean了</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/178792" style="color:red;">http://ikeel.javaeye.com/blog/178792</a>&nbsp;
          发表时间: 2008年04月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          xml配置文件中bean的定义可以去掉了，xml配置主要内容如下：<br /><br /> &lt;beans><br />     &lt;context:annotation-config/><br />     &lt;context:component-scan base-package="org.example"/><br />     <br />&lt;/beans><br /><br /><br /><br />有了这个配置文件，org.example包下的Annotation标注的类就会被识别。<br /><br />基本的语法：<br />@Service<br />public class ExamleA  这等效于在xml配置中的&lt;bean class='exampleA'><br /><br />在其他地方引用ExampleA的方法还是没变。<br />这只是一个最基本的标注，还有更多具体的Annotatioin。比如<br />@Autowired(required = false) 指定一个注入bean<br />@Qualifier("chineseMan") 区别同一个包下不同的bean<br /><br />有待进一步学习.
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/178792#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Apr 2008 13:28:18 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/178792</link>
        <guid>http://ikeel.javaeye.com/blog/178792</guid>
      </item>
      <item>
        <title>Hibernae+Spring+Annotation 的一个Demo</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/178781" style="color:red;">http://ikeel.javaeye.com/blog/178781</a>&nbsp;
          发表时间: 2008年04月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1,今天在用Annotation+Hibernate做的一个Demo中加进了Spring。<br />2，基本的一些过程如下：<br /><br />3，首先要引入支持包，Spring Core ，Spring Persistence Core，Spring AOP，还要引入Commons Pool。<br />4， 然后从配置文件开始：<br /><br />   myspringcontext.xml: 对于原来的Hibernate配置文件，我采取了保留原来配置的方法，因为在Spring中配置Hibernate的一些属性感觉不方便。<br />  内容如下：<br /><br />&lt;?xml version="1.0" encoding="UTF-8"?><br />&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><br /><br /><br /><br />	&lt;bean id="annotationsessionFactory"<br />		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><br /><br /><br />		&lt;property name="configLocation"<br />			value="file:src/annotationhibernate.cfg.xml"><br />		&lt;/property><br />	&lt;/bean><br /><br />	&lt;bean id="PictureProxy" class="dian.ikeel.DAL.PictureDAL"><br />		&lt;property name="sessionFactory"><br />			&lt;ref local="annotationsessionFactory" /><br />		&lt;/property><br />	&lt;/bean><br /><br />&lt;/beans><br /><br />这里需要注意的就是应该用AnnotationSessionFactoryBean。<br />指向的hibernate.cfg.xml 在Step By Step （2）中有详细内容，可以参看。<br /><br />&lt;property name="sessionFactory"><br />			&lt;ref local="annotationsessionFactory" /><br />		&lt;/property><br /><br />这句配置的作用我想就是，在getBean获取PictureProxy的时候，把他绑定到了一个SessionFactory提供的Session。省去了我们自己编码或得Session的过程了<br /><br />5，我的程序其他部分逻辑是这样的：<br /><br /> A， 持久化层： Picture.java :用Annotatioin标注，在Step By Step （2）中有详细。<br /><br /> B，数据访问接口：IPictureDAL ：<br />   代码：<br /><br />package dian.ikeel.IDAL;<br /><br />import dian.ikeel.annotation.*;<br />public interface IPictureDAL {<br /><br />	public void insertPicture(Picture pic);<br />}<br /><br /><br />C，数据访问接口的实现：PictureDAL，实现了IPictureDAL ，同时继承了HibernateDAOSupport. 因为我们要用到getTemplate。如果PictureDAL没有实现接口的话，会出现类型转换错误。这涉及到动态代理的原理。<br />代码如下：<br />package dian.ikeel.DAL;<br /><br />import dian.ikeel.annotation.*;<br />import dian.ikeel.IDAL.*;<br />import org.springframework.orm.hibernate3.support.HibernateDaoSupport;<br /><br /> <br />public class PictureDAL extends HibernateDaoSupport implements IPictureDAL {<br /><br />	public void insertPicture(Picture pic)<br />	{<br />		getHibernateTemplate().save(pic);<br />	}<br />}<br /><br /><br />D，然后就是程序入口了：<br /><br />public static void main(String[] args) {<br />		<br />		<br />		Resource rs=new FileSystemResource("src/myspringcontext.xml");<br />		BeanFactory bf=new XmlBeanFactory(rs);<br />		<br />		<br />		IPictureDAL pic = (IPictureDAL)bf.getBean("PictureProxy");<br />		Picture pic1 = new Picture();<br />		pic1.setPicname("liang");<br />		pic1.setPicsize(123);<br />		pic.insertPicture(pic1);<br />		System.out.println("AnnotationEntry excuted");<br />	}<br /><br /> 这样就基本完成了最简单的Hibernate+Spring with Annotation的例子。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/178781#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Apr 2008 13:00:03 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/178781</link>
        <guid>http://ikeel.javaeye.com/blog/178781</guid>
      </item>
      <item>
        <title>使用Myeclipse的一个小技巧</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/178364" style="color:red;">http://ikeel.javaeye.com/blog/178364</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用Eclipse开发的过程中，经常用到的一个功能就是为一个新建的工程增加某些新的特性，比如增加Hibernate支持，其实就是引入一组包，这些包是一起放在某个包目录下的。<br />但是有时候我想修改其中某个Jar包为不同的版本，但是又不能单独删除一个Jar，这个时候可以去修改一个配置，其实就是一个ClassPath Container的配置。<br />首先，在myeclipse包组上右键，选择config,可以看到ClassPath Container变量的名称。记下它为Path。<br />然后，在安装目录下搜索出preferrence.ini这个文件，在文件中找到Path变量，这样就可以配置了。把你想要的Jar包拷贝到相应的目录就OK了。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/178364#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Apr 2008 12:55:15 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/178364</link>
        <guid>http://ikeel.javaeye.com/blog/178364</guid>
      </item>
      <item>
        <title>Hibernate Step By Step (2)</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/178160" style="color:red;">http://ikeel.javaeye.com/blog/178160</a>&nbsp;
          发表时间: 2008年03月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          考虑把通过xxx.hbm.xml转换为用Annotation从而省去配置文件。<br /><br />首先假定已经可以在hbm.xml配置方式下运行成功 ，Step by step 1中已经描述。接下来需要在原来的方案上的改变如下：<br /><br /> 1，首先，引入包，在保证hbm.xml方式运行的包的基础上，还需要:ejb3-persistence.jar(不要以为它是EJB的专用了)，hibernate-annotation.jar。如果你用myeclipse开发，在hibernate相关目录下都可以找到的。 <br />  这一步有一些需要特别注意的地方：版本问题。因为我因为这个问题碰到过麻烦。下面也简单的介绍一下。<br />  hibernate-annotation.jar 用的3.2.0.CR2版本，是比较新的版本了。<br />  开始时hibernate我是用的hibernate-3.2.5版本的。<br />  于是我把hibernate3.2.5换作了3.1 ,又发现另外一些类比如NativeSqlQueryReurn找不到...<br />  最后再尝试用hibernate3.2.0.cr4 ，终于看到了我想要的。所以在这一步要比较小心。<br /><br />  其中一步我发现会报如下错误：SqlresultsetMappings Not found 。解决方法是引入Java EE 5的库。后来发现，如果引入了Java EE 5的库以后，就不用再引入ejb3-persistence.jar了 。因为Java EE 5已经把这个部分包含了，不再是EJB独有的了。<br /><br />2，要用到的库文件就这些了，接下来开始写配置文件(Hibernate.cfg.xml这个配置还是需要的)。<br />hibernate.cfg.xml和用hbm.xml方式的区别是，mapping字段不再用resource，而改用 class=Myclass.  <br />内容如下：<br />&lt;?xml version='1.0' encoding='UTF-8'?><br />&lt;!DOCTYPE hibernate-configuration PUBLIC<br />          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><br /> <br />&lt;hibernate-configuration><br />&lt;session-factory><br />	&lt;property name="connection.driver_class"><br />		org.hsqldb.jdbcDriver<br />	&lt;/property><br />	&lt;property name="connection.url"><br />		jdbc:hsqldb:hsql://localhost<br />	&lt;/property><br />	&lt;property name="connection.username">SA&lt;/property><br />	&lt;property name="connection.password">&lt;/property><br />	&lt;property name="dialect"><br />		org.hibernate.dialect.HSQLDialect<br />	&lt;/property><br />	&lt;property name="connection.pool_size">3&lt;/property><br />	&lt;property name="show_sql">true&lt;/property><br /><br />	&lt;property name="hbm2ddl.auto">create&lt;/property><br />	&lt;property name="current_session_context_class">thread&lt;/property><br />	&lt;mapping class="dian.ikeel.annotation.Picture"/><br /><br /><br />&lt;/session-factory><br />&lt;/hibernate-configuration><br /><br /><br /><br />3，开始写Java类了，注意要用到Annotation的：<br /><br />package dian.ikeel.annotation;<br /><br />import javax.persistence.*;<br />import org.hibernate.annotations.AccessType;<br /><br />@Entity<br />@Table(name="Pics")<br />@AccessType("property")<br /> <br />public class Picture {<br /><br />	<br />	private long picid;<br />	private String picname;<br />	private int picsize;<br />	<br />	@Id<br />	@GeneratedValue(strategy=GenerationType.AUTO)<br />	public long getPicid() {<br />		return picid;<br />	}<br />	<br />	public void setPicid(long picid) {<br />		this.picid = picid;<br />	}<br />	public String getPicname() {<br />		return picname;<br />	}<br />	public void setPicname(String picname) {<br />		this.picname = picname;<br />	}<br />	public int getPicsize() {<br />		return picsize;<br />	}<br />	public void setPicsize(int picsize) {<br />		this.picsize = picsize;<br />	}<br />	<br />	<br />	<br />	<br />}<br /><br /><br />我就不详细解释每个标注的意思了。<br /><br /><br />4，下面该关心如何或得SessionFactory了，跟以前的方式的区别只有一点点，我们用到了AnnotationConfiguration;<br /><br />代码如下：<br /><br />package dian.ikeel.hibernate.util.SessionFactory;<br /> <br />import org.hibernate.HibernateException;<br />import org.hibernate.Session;<br />//import org.hibernate.cfg.Configuration;<br />import org.hibernate.cfg.AnnotationConfiguration;<br /><br /><br /><br />/**<br /> * Configures and provides access to Hibernate sessions, tied to the<br /> * current thread of execution.  Follows the Thread Local Session<br /> * pattern, see {@link http://hibernate.org/42.html }.<br /> */<br />public class AnnotationSessionFactory {<br /><br />    /** <br />     * Location of hibernate.cfg.xml file.<br />     * Location should be on the classpath as Hibernate uses  <br />     * #resourceAsStream style lookup for its configuration file. <br />     * The default classpath location of the hibernate config file is <br />     * in the default package. Use #setConfigFile() to update <br />     * the location of the configuration file for the current session.   <br />     */<br />    private static String CONFIG_FILE_LOCATION = "/annotationhibernate.cfg.xml";<br />	private static final ThreadLocal&lt;Session> threadLocal = new ThreadLocal&lt;Session>();<br />    private  static AnnotationConfiguration configuration = new AnnotationConfiguration();<br />    private static org.hibernate.SessionFactory sessionFactory;<br />    private static String configFile = CONFIG_FILE_LOCATION;<br /><br />	static {<br />    	try {<br />			 configuration.configure(configFile);<br />			sessionFactory = configuration.buildSessionFactory();<br />    	}catch (Exception e) {<br />			System.err<br />					.println("%%%% Error Creating SessionFactory %%%%"+e.getLocalizedMessage());<br />			e.printStackTrace();<br />		}<br />    }<br />    <br />	<br />	/**<br />     * Returns the ThreadLocal Session instance.  Lazy initialize<br />     * the &lt;code>SessionFactory&lt;/code> if needed.<br />     *<br />     *  @return Session<br />     *  @throws HibernateException<br />     */<br />    public static Session getSession() throws HibernateException {<br />        Session session = (Session) threadLocal.get();<br /><br />		if (session == null || !session.isOpen()) {<br />			if (sessionFactory == null) {<br />				rebuildSessionFactory();<br />			}<br />			session = (sessionFactory != null) ? sessionFactory.openSession()<br />					: null;<br />			threadLocal.set(session);<br />		}<br /><br />        return session;<br />    }<br /><br />	/**<br />     *  Rebuild hibernate session factory<br />     *<br />     */<br />	public static void rebuildSessionFactory() {<br />		try {<br />			configuration.configure(configFile);<br />			sessionFactory = configuration.buildSessionFactory();<br />		} catch (Exception e) {<br />			System.err<br />					.println("%%%% Error Creating SessionFactory %%%%");<br />			e.printStackTrace();<br />		}<br />	}<br /><br />	/**<br />     *  Close the single hibernate session instance.<br />     *<br />     *  @throws HibernateException<br />     */<br />    public static void closeSession() throws HibernateException {<br />        Session session = (Session) threadLocal.get();<br />        threadLocal.set(null);<br /><br />        if (session != null) {<br />            session.close();<br />        }<br />    }<br /><br />	/**<br />     *  return session factory<br />     *<br />     */<br />	public static org.hibernate.SessionFactory getSessionFactory() {<br />		return sessionFactory;<br />	}<br /><br />	/**<br />     *  return session factory<br />     *<br />     *	session factory will be rebuilded in the next call<br />     */<br />	public static void setConfigFile(String configFile) {<br />		AnnotationSessionFactory.configFile = configFile;<br />		sessionFactory = null;<br />	}<br /><br />	/**<br />     *  return hibernate configuration<br />     *<br />     */<br />	public static AnnotationConfiguration getConfiguration() {<br />		return configuration;<br />	}<br /><br />}<br /><br /><br /><br />5，接下来，启动数据库，我用的是hsql。然后给一个入口点就OK了。<br /><br />最简单的入口函数：<br />package dian.ikeel.hibernate.BLL;<br /><br />import org.hibernate.Session;<br /><br />import dian.ikeel.annotation.Picture;<br />import dian.ikeel.hibernate.util.SessionFactory.*; <br />import org.hibernate.cfg.AnnotationConfiguration;;<br />public class AnnotationEntry {<br /><br />	/**<br />	 * @param args<br />	 */<br />	public static void main(String[] args) {<br />		 Session  session=AnnotationSessionFactory.getSessionFactory().getCurrentSession();<br />	 <br />		 session.beginTransaction();<br />		<br />	      Picture  pic=new Picture();<br />	       pic.setPicname("heat3");<br />	       pic.setPicsize(123);<br />	       session.save(pic);<br />	      session.getTransaction().commit();<br />	      System.out.println("AnnotationEntry excuted");<br />	}<br /><br />}<br /><br /><br />6，这样就算是最简单的Annotation 的Demo运行通过了。再去研究一下某些步骤是不是一定得那么做。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/178160#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 31 Mar 2008 18:59:55 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/178160</link>
        <guid>http://ikeel.javaeye.com/blog/178160</guid>
      </item>
      <item>
        <title>hibernate Step By Step (1)</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/178015" style="color:red;">http://ikeel.javaeye.com/blog/178015</a>&nbsp;
          发表时间: 2008年03月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Hibernate的第一个例子，用hibernate3.0  数据库用Hsql(因为运行起来简单)<br /> 描述我要达到的目的：完成一个最简单的功能:在表User中插入一条记录。<br /><br />1，新建工程，添加Hibernate支持，可以用Myeclipse自带的加入Hibernate支持功能。不过这里我想自己引入包：&lt;url>http://ikeel.javaeye.com/admin/blogs/174641&lt;/url>可以参考这篇文章。<br />然后为了使用Hsql还要引入hsql.jar<br />2,有这样几个配置文件：<br /><br />log4j.properties;<br />hibernate.cfg.xml;<br />xxx.hbm.xml;<br /><br />分别说明：<br />log4j:位于src根目录下，不用多说，但是如果不加入这个配置会报警告的。并且也看不到执行过程中的日志记录。<br />内容：<br /><br />log4j.rootLogger=WARN, Console<br /><br />log4j.appender.Console=org.apache.log4j.ConsoleAppender<br />log4j.appender.Console.layout=org.apache.log4j.PatternLayout<br />log4j.appender.Console.layout.ConversionPattern=(%r ms) [%t] %-5p: %c#%M %x: %m%n<br /><br />log4j.logger.com.genuitec.eclipse.sqlexplorer=DEBUG<br />log4j.logger.org.apache=WARN<br />log4j.logger.org.hibernate=WARN <br /><br /><br />hibernate.cfg.xml:<br />位于src根目录下。<br />&lt;?xml version='1.0' encoding='UTF-8'?><br />&lt;!DOCTYPE hibernate-configuration PUBLIC<br />          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><br /><br />&lt;hibernate-configuration><br /><br />&lt;session-factory><br /><br />	&lt;property name="connection.driver_class"><br />		org.hsqldb.jdbcDriver<br />	&lt;/property><br />	&lt;property name="connection.url"><br />		jdbc:hsqldb:hsql://localhost<br />	&lt;/property><br />	&lt;property name="connection.username">SA&lt;/property><br />	&lt;property name="connection.password">&lt;/property><br /><br />	&lt;property name="dialect"><br />		org.hibernate.dialect.HSQLDialect<br />	&lt;/property><br />	&lt;property name="show_sql">true&lt;/property><br />	&lt;property name="connection.pool_size">3&lt;/property><br /><br />	&lt;property name="hbm2ddl.auto">create&lt;/property><br />&lt;property name="current_session_context_class">thread&lt;/property><br /><br /><br />	&lt;mapping resource="dian/ikeel/hibernate/beans/Users.hbm.xml" /><br /><br />&lt;/session-factory><br /><br />&lt;/hibernate-configuration><br /><br /><br />对这个配置文件，有几点需要说明的，就是DTD的引入，可以采用本地文件系统的，也可以采用上面所写的网络地址。<br />注意：&lt;property name="current_session_context_class">thread&lt;/property><br />如果缺少这一句时会报错：No CurrentSessionContext configured!<br /><br />xxx.hbm.xml:<br />映射文件，内容如下：<br />&lt;?xml version='1.0' encoding='UTF-8'?><br />&lt;!DOCTYPE hibernate-mapping PUBLIC<br />        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <br /><br /><br />&lt;hibernate-mapping><br /> <br /> &lt;class name="dian.ikeel.hibernate.beans.Users" table="User"><br /> &lt;id name="id" column="userid"><br /> 	&lt;generator class="native">&lt;/generator><br /> &lt;/id><br /> &lt;property name="username" column="name">&lt;/property><br /><br /> &lt;property name="password" column="pwd">&lt;/property><br /> &lt;/class><br />&lt;/hibernate-mapping><br /><br /><br />对应的Users.java内容如下：<br />package dian.ikeel.hibernate.beans;<br /><br /><br />public class Users {<br /><br />	private long id;<br />	private String username;<br />	private String password;<br />	<br />	public Users()<br />	{}<br /><br />   gets  &  sets ...<br />	 }<br /><br /><br /><br />attention：<br /> &lt;class name="dian.ikeel.hibernate.beans.Users" table="User">需要指定包名。如果不指定就会报错：Could not read mappings from resource: Users.hbm.xml<br /><br />2，到目前基本的配置已经完成，开始使用操作了。<br /><br />package dian.ikeel.hibernate.BLL;<br /><br /> <br /> <br />import org.hibernate.Session;<br /> <br /> <br />import dian.ikeel.hibernate.beans.*;<br />import dian.ikeel.hibernate.util.hibernateutil.*;<br />import dian.ikeel.hibernate.util.SessionFactory.*;<br /><br />public class Entry {<br />	<br />	public  static void main(String[] args)<br />	{<br />		<br />		 Session  session=HibernateSessionFactory.getSessionFactory().getCurrentSession();<br />	     session.beginTransaction();<br />	      Users  user=new Users();<br />	      user.setUsername("ikeel");<br />	      user.setPassword("ikeel");<br />	      session.save(user);<br />	      session.getTransaction().commit();<br />	      System.out.println("KKKKKK");<br />	            <br />	      <br />	}<br /><br />	 <br /><br />其中用到一个Util类：HibernateSessionFactory：<br /><br />package dian.ikeel.hibernate.util.SessionFactory;<br /><br />import org.hibernate.HibernateException;<br />import org.hibernate.Session;<br />import org.hibernate.cfg.Configuration;<br /><br /> <br />public class HibernateSessionFactory {<br /><br />        private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";<br />	private static final ThreadLocal&lt;Session> threadLocal = new ThreadLocal&lt;Session>();<br />    private  static Configuration configuration = new Configuration();<br />    private static org.hibernate.SessionFactory sessionFactory;<br />    private static String configFile = CONFIG_FILE_LOCATION;<br /><br />	static {<br />    	try {<br />			configuration.configure(configFile);<br />			sessionFactory = configuration.buildSessionFactory();<br />		} catch (Exception e) {<br />			System.err<br />					.println("%%%% Error Creating SessionFactory %%%%");<br />			e.printStackTrace();<br />		}<br />    }<br />    private HibernateSessionFactory() {<br />    }<br />	<br />	     public static Session getSession() throws HibernateException {<br />        Session session = (Session) threadLocal.get();<br /><br />		if (session == null || !session.isOpen()) {<br />			if (sessionFactory == null) {<br />				rebuildSessionFactory();<br />			}<br />			session = (sessionFactory != null) ? sessionFactory.openSession()<br />					: null;<br />			threadLocal.set(session);<br />		}<br /><br />        return session;<br />    }<br /><br />	 	public static void rebuildSessionFactory() {<br />		try {<br />			configuration.configure(configFile);<br />			sessionFactory = configuration.buildSessionFactory();<br />		} catch (Exception e) {<br />			System.err<br />					.println("%%%% Error Creating SessionFactory %%%%");<br />			e.printStackTrace();<br />		}<br />	}<br /><br />     public static void closeSession() throws HibernateException {<br />        Session session = (Session) threadLocal.get();<br />        threadLocal.set(null);<br /><br />        if (session != null) {<br />            session.close();<br />        }<br />    }<br /><br /> 	public static org.hibernate.SessionFactory getSessionFactory() {<br />		return sessionFactory;<br />	}<br /><br /> 	public static void setConfigFile(String configFile) {<br />		HibernateSessionFactory.configFile = configFile;<br />		sessionFactory = null;<br />	}<br /> 	public static Configuration getConfiguration() {<br />		return configuration;<br />	}<br /><br />}<br />	  <br />	 <br />}<br /><br />3，OK了，可以开始使用了，在命令行下进入到 Project/HibernateStudy/data 目录下，先建立data目录吧。然后执行：  java -classpath ..\lib\hsql.jar org.hsqldb.Server 数据库就启动了。<br />开始Run Entry，可以看到都发生了什么.....<br /><br /><br />4,接下来，我不想用xxx.hbm.xml了，我想试试annotation ....
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/178015#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 31 Mar 2008 13:27:18 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/178015</link>
        <guid>http://ikeel.javaeye.com/blog/178015</guid>
      </item>
      <item>
        <title>MyEclipse 6下按照SVN插件</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/177912" style="color:red;">http://ikeel.javaeye.com/blog/177912</a>&nbsp;
          发表时间: 2008年03月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我也是按照一般的步骤安装SVN插件：解压——Copy  plugin 和 features目录下的内容到相应目录。重启Myeclipse。但是在myeclipse中没看到SVN。<br />这种问题我最终解决的方法：<br />1,运行-cmd<br />2,-cd F:myeclipse\eclipse （注意这里的目录）<br />3,运行eclipse -clean 命令<br />4，myeclipse再次启动时已经有了SVN插件<br /><br />如果用svn过程中出现java.lang.NoClassDefFoundError：.....SVNClient...问题，那么到windows——properties页面下配置svn：SVN——SVN Client：选择一个可用的Client类型。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/177912#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 31 Mar 2008 10:02:09 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/177912</link>
        <guid>http://ikeel.javaeye.com/blog/177912</guid>
      </item>
      <item>
        <title>DTMF概念</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/177113" style="color:red;">http://ikeel.javaeye.com/blog/177113</a>&nbsp;
          发表时间: 2008年03月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          双音多频DTMF（Dual Tone Multi Frequency）信令，逐渐在全世界范围内使用在按键式电话机上，因其提供更高的拨号速率，迅速取代了传统转盘式电话机使用的拨号脉冲信令。近年来DTMF也应用在交互式控制中，诸如语言菜单、语言邮件、电话银行和ATM终端等。通过软件产生与检测DTMF信令，是一项较有价值的工程应用。<br /><br />DTMF编解码器在编码时将击键或数字信息转换成双音信号并发送，解码时在收到的DTMF信号中检测击键或数字信息的存在性。电话机键盘上每一个键通过如图所示的行频与列频唯一确定。DTMF的编解码方案无需过多的计算量，以目前计算机的运算速度，可以很轻松地实现。<br /><br />由图可知，一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率来自两组预分配的频率组：行频组或列频组。每一对这样的音频信号唯一表示一个数字或符号。为了产生DTMF信号，可以通过软件产生两个正弦波叠加在一起后发送，解码时软件可以采用改进的Goertzel算法，从频域搜索两个正弦波的存在，从而解调出DTMF信号。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/177113#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 28 Mar 2008 09:33:21 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/177113</link>
        <guid>http://ikeel.javaeye.com/blog/177113</guid>
      </item>
      <item>
        <title>数字图像处理中基于纹理特性的匹配</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/176101" style="color:red;">http://ikeel.javaeye.com/blog/176101</a>&nbsp;
          发表时间: 2008年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          数字图像处理的课程设计要做个图像搜索的专题，我们把整个系统的两个关键部分拿出来做一些调研和探索：图像的特征提取，图像的特征匹配。 <br /><br />我们拟用基于纹理的特征提取和匹配，下面大致了解了一下这个方向的主要方法。<br />纹理特征描述方法分类<br /><br />（1）统计方法统计方法的典型代表是一种称为灰度共生矩阵的纹理特征分析方法Gotlieb 和 Kreyszig 等人在研究共生矩阵中各种统计特征基础上，通过实验，得出灰度共生矩阵的四个关键特征：能量、惯量、熵和相关性。统计方法中另一种典型方法，则是从图像的自相关函数（即图像的能量谱函数）提取纹理特征，即通过对图像的能量谱函数的计算，提取纹理的粗细度及方向性等特征参数<br /><br />（2）几何法<br /><br />所谓几何法，是建立在纹理基元（基本的纹理元素）理论基础上的一种纹理特征分析方法。纹理基元理论认为，复杂的纹理可以由若干简单的纹理基元以一定的有规律的形式重复排列构成。在几何法中，比较有影响的算法有两种：Voronio 棋盘格特征法和结构法。<br /><br />（3）模型法<br /><br />模型法以图像的构造模型为基础，采用模型的参数作为纹理特征。典型的方法是随机场模型法，如马尔可夫（Markov）随机场（MRF）模型法和 Gibbs 随机场模型法<br /><br />（4）信号处理法<br /><br />纹理特征的提取与匹配主要有：灰度共生矩阵、Tamura 纹理特征、自回归纹理模型、小波变换等。<br /><br />灰度共生矩阵特征提取与匹配主要依赖于能量、惯量、熵和相关性四个参数。Tamura 纹理特征基于人类对纹理的视觉感知心理学研究，提出6种属性，即：粗糙度、对比度、方向度、线像度、规整度和粗略度。自回归纹理模型（simultaneous auto-regressive, SAR）是马尔可夫随机场（MRF）模型的一种应用实例。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/176101#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Mar 2008 08:56:16 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/176101</link>
        <guid>http://ikeel.javaeye.com/blog/176101</guid>
      </item>
      <item>
        <title>H323中ASN描述文件的处理</title>
        <author>hustlong</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ikeel.javaeye.com">hustlong</a>&nbsp;
          链接：<a href="http://ikeel.javaeye.com/blog/175577" style="color:red;">http://ikeel.javaeye.com/blog/175577</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在一个由不同厂家生产的计算机构成的环境中，由于机器硬件和软件配置的不同，在数据表示（诸如安符编码、数值表示、字长）方面往往存在差异。为使厂家各产品之间互通互连，我们必须消除这些差异，应具有一套独立于计算机硬件和软件环境的外部数据表示格式，并通过对其编解码实现。抽象语法表示ASN．1（ITU － T rec．X．680｜ISO／IEC8824－1）及它的基本编码规则BER（ITU－T Rec． X．690｜ISO／IEC8825－1）和紧缩编码规则PER（ITU－T Rec．X．691｜ISO／ IEC8825－2）即充当了这一角色，被许多应用层协议所使用，使不同系统之间的互连、互通成为可能。<br />　　在开发IP电话的H．323协议时，由于网关之间的视频、音频数据和控制消息要通过互联网进行传输，而网关产品可能是不同厂家生产的，软、硬件环境各不相同。因此采用了ASN．1语法表示，传送的格式是基于ASN．1的PER（packed encoding rules）编码格式的比特流。　　<br /><br />ASN编译器的实现原理：<br /><br />ASN1-C编译器的实现方法<br />（1）实现编译器要做的准备工作在实现编译器之前，我们要做以下的工作：<br />　　a．进行数据结构的映射，实现ASN．1类型到C类型的翻译工作，并存在头文件中。遵循规则如前所述，ASN．1基本类型见协议X．680。<br />　　b．编制运行时函数库（Run－time Library Function），包括BER运行时库函数、PER运行时库函数以及运行时公用库函数。BER运行时函数库包括X．680中规定的基本的数据类型的 BER编码函数，PER运行时函数库包括其PER编码函数，公用函数库包括跟踪、诊断、打印、出错信息处理以及其它为前两个库函数所用的函数等。这一步设计的库函数留出API接口供程序调用，用户当然可以自己调用这些函数进行数据的编码。在这里，对这些函数的调用可自动由编译器生成的．c文件调用。<br /><br /><br />OPAL中的文件结构是 ASN文件对应一个.h文件，然后对应一个自动生成的cxx文件。<br /><br />关于应用和更深入的研究和了解有待再学习。
          <br/>
          <span style="color:red;">
            <a href="http://ikeel.javaeye.com/blog/175577#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Mar 2008 21:35:20 +0800</pubDate>
        <link>http://ikeel.javaeye.com/blog/175577</link>
        <guid>http://ikeel.javaeye.com/blog/175577</guid>
      </item>
  </channel>
</rss>