??xml version="1.0" encoding="utf-8" standalone="yes"?>97亚洲熟妇自偷自拍另类图片 ,久久久亚洲精品国产,亚洲午夜久久久久妓女影院http://www.tkk7.com/Tower/archive/2005/05/13/4242.html非飞非飞Thu, 12 May 2005 16:08:00 GMThttp://www.tkk7.com/Tower/archive/2005/05/13/4242.htmlhttp://www.tkk7.com/Tower/comments/4242.htmlhttp://www.tkk7.com/Tower/archive/2005/05/13/4242.html#Feedback2http://www.tkk7.com/Tower/comments/commentRss/4242.htmlhttp://www.tkk7.com/Tower/services/trackbacks/4242.html@ My Space

非飞 2005-05-13 00:08 发表评论
]]>
JMX设计模式之MBeanForAppConfig模式http://www.tkk7.com/Tower/archive/2005/05/07/4053.html非飞非飞Fri, 06 May 2005 16:19:00 GMThttp://www.tkk7.com/Tower/archive/2005/05/07/4053.htmlhttp://www.tkk7.com/Tower/comments/4053.htmlhttp://www.tkk7.com/Tower/archive/2005/05/07/4053.html#Feedback0http://www.tkk7.com/Tower/comments/commentRss/4053.htmlhttp://www.tkk7.com/Tower/services/trackbacks/4053.html@ My space

非飞 2005-05-07 00:19 发表评论
]]>
NIO中Selector的工作原?http://www.tkk7.com/Tower/archive/2005/04/26/3809.html非飞非飞Tue, 26 Apr 2005 02:06:00 GMThttp://www.tkk7.com/Tower/archive/2005/04/26/3809.htmlhttp://www.tkk7.com/Tower/comments/3809.htmlhttp://www.tkk7.com/Tower/archive/2005/04/26/3809.html#Feedback3http://www.tkk7.com/Tower/comments/commentRss/3809.htmlhttp://www.tkk7.com/Tower/services/trackbacks/3809.html
Selector是用来获取注册在其中的channel的相关事件的发生Q也是acceptQread和write。selector中有3个key set?

key setQ包含代表所有在其中注册的channelQ可以通过selector.keys()得到?
selected-key setQ包含所有被(g)到有关注的操作已经qA的keyQ通过selector.selectedKeys得到?
cancelled-key setQ包含所有已l被cancelQ但是还没有channelq没有deregister的keyQ这个集合是不能直接被访问的?br>
key通过调用channel的registerҎ(gu)被加入到key set中。被取消的key在select的时候会(x)被从相应的key set中移除?br>
key set自n是不可以直接q行修改的? 无论是通过调用channel的closeҎ(gu)q是调用key的cancelҎ(gu)Qkey都会(x)被放|到canceled-key set中。取消的key?x)将其channel在下一ơselect时将注册撤销Q同时将key从所有的key set中移除?

key在执行select操作时被加入到selected-key set中。在selected-key set中的key可以通过调用iterator的removeҎ(gu)Q将其从selected-key set中移除,不能通过其他的办法将其从selected-key set中移除?br>
通过selector?个方法selectQ阻塞选择Q直到有兛_(j)的事件发生时退出阻塞)(j)QselectNowQ不d选择Q,select(long)Q指定超旉择Q超时到达或者有兛_(j)事g发生旉出阻塞)(j)Q来获取兛_(j)事g的发生。其执行步骤分ؓ(f)以下3步:(x)

1、将存在于canceled-key set中的key从所有的key set中移除,撤销注册的channelQ清Icanceled-key set?
2、地层操作系l检查是否有兛_(j)的事件发生,当有兛_(j)的事件发生时Q首先检查channel的key是否已经存在于selected-key set中,如果不存在,则将其加入到selected-key set中去Q同时修改key的ready-operation set来表明当前ready的操作,而以前存在于ready-operation set中的信息?x)被删除。如果对应的key已经存在于selected-key set中,q直接修改其ready-operation set来表明当前ready的操作,删除原来ready-operation set中的信息?
3、如果在W二步中有加入到canceled-key set中的keyQ在q一步会(x)执行W一步的操作?

selector自n是线E安全的Q而他的key set却不是。在一ơ选择发生的过E中Q对于key的关?j)事件的修改要等C一ơselect的时候才?x)生效? 另外Qkey和其代表的channel有可能在M时候被cancel和close。因此存在于key set中的keyq不代表其key是有效的Q也不代表其channel是open的。如果key有可能被其他的线E取消或关闭channelQ程序必d ?j)的同步(g)查这些条件?

d?jin)的select可以通过调用selector的wakeupҎ(gu)来唤醒?img src ="http://www.tkk7.com/Tower/aggbug/3809.html" width = "1" height = "1" />

非飞 2005-04-26 10:06 发表评论
]]>
使用JavaScript来实现页面间的参C?/title><link>http://www.tkk7.com/Tower/archive/2005/04/18/3417.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Mon, 18 Apr 2005 07:52:00 GMT</pubDate><guid>http://www.tkk7.com/Tower/archive/2005/04/18/3417.html</guid><wfw:comment>http://www.tkk7.com/Tower/comments/3417.html</wfw:comment><comments>http://www.tkk7.com/Tower/archive/2005/04/18/3417.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/Tower/comments/commentRss/3417.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Tower/services/trackbacks/3417.html</trackback:ping><description><![CDATA[<BR>在JavaScript中,可以通过window.location来获取url地址。但是window.location是一个对象,没有办法直接从里面获取出我们需要的参数。通常的做法就是用一个隐藏的<input>,通过window.location负值给input。其目的是Z(jin)location转换成String。写的过E中L觉得太复杂了(jin)Q后来发C用document.URL可以解册个问题?img src ="http://www.tkk7.com/Tower/aggbug/3417.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Tower/" target="_blank">非飞</a> 2005-04-18 15:52 <a href="http://www.tkk7.com/Tower/archive/2005/04/18/3417.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScriptd服务器端的xmlhttp://www.tkk7.com/Tower/archive/2005/04/09/3026.html非飞非飞Sat, 09 Apr 2005 04:23:00 GMThttp://www.tkk7.com/Tower/archive/2005/04/09/3026.htmlhttp://www.tkk7.com/Tower/comments/3026.htmlhttp://www.tkk7.com/Tower/archive/2005/04/09/3026.html#Feedback1http://www.tkk7.com/Tower/comments/commentRss/3026.htmlhttp://www.tkk7.com/Tower/services/trackbacks/3026.html今天在帮朋友写一个简单的产品发布|站Q由于用的I间是静(rn)态的Q没有办法只能在javascript上下功夫?jin)。首先想到的便是RIA,上网google?jin)一下,发现q样的东西还真不,可谓是十八般武艺各显灵通。看?jin)看文明的bindowsQ感觉真的非常的好。可是选择它对于我要做的东西,可以说是q于复杂?jin)。(http://www.bindows.net 有兴的朋友可以ȝ看)(j)?BR>搜烦(ch)?jin)半天最后还是决定,采用javascriptd服务器端xml文g的办法来实现。尝试了(jin)一下感觉还?sh)错Q确定就是对使用的浏览器有依赖?BR>先写?jin)一个商品的xml文gQ?BR>

<?xml version="1.0"?>
<root>
 
<product id="0001" name="product1" price="10.00">
  
<description>
   Detail Description
  
</description>
 
</product>
 
<product id="0002" name="product2" price="20.00">
  
<description>
   Detail Description
  
</description>
 
</product>
</root>

 

使用javascript来读入xml实在是相当的单,只需要两句话可以搞定:(x)

// 装蝲xml文g的函?/SPAN>
function loadXML(fileName) {
 
// 定义一个xml dom对象
 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
 
 xmlDoc.load(fileName);
 xmlObj 
= xmlDoc.documentElement;
}

 

指定要蝲入的xml文g名就可以完成对xml的读入?BR>

// 载入xml文g
loadXML("product.xml");

 

得到xml对象后就可以适用对象提供的相应方法和属性来获取xml中定义的数据信息?BR>xmlObj.hasChildNodes来判断是否含有子;
xmlObj.childNodes.lenght 得到包含的子的数量
子项可以用数字来作ؓ(f)索引Q以product.xmlZ。如果我们要获取W二条商品时Q可以用xmlObj.childNodes(1)来获得,xmlObj.childNodes(1).childNodes(0)得到的是description
xmlObj.childNodes(1).childNodes(0).text 得到description的?BR>xmlObj.childNodes(1).getAttribute("name") 得到W二条商品的名字




非飞 2005-04-09 12:23 发表评论
]]>
用了(jin)一下flash的反~译http://www.tkk7.com/Tower/archive/2005/04/04/2811.html非飞非飞Sun, 03 Apr 2005 19:32:00 GMThttp://www.tkk7.com/Tower/archive/2005/04/04/2811.htmlhttp://www.tkk7.com/Tower/comments/2811.htmlhttp://www.tkk7.com/Tower/archive/2005/04/04/2811.html#Feedback1http://www.tkk7.com/Tower/comments/commentRss/2811.htmlhttp://www.tkk7.com/Tower/services/trackbacks/2811.html下蝲?jin)一个Action Script Viewer 4.0对原来的swf文gq行反编译,虽然有的movie clip?x)出C炚w题,但是ȝ来说效果q是不错的,而且操作相当的简单?BR>
1Q用ASV打开要进行反~译的SWF文gQ?BR>2QFile-->export rebuild data。这时将swf文g分拆成单个的swf文gQ?BR>3Q打开flashQ创Z个空的fla文gQ?BR>4QFile-->Import...-->Import to Library   前面导出的swf文g导入Q如果swf文g太多flash?x)报错,可以通过分批导入文g来绕q这个错误;
5Q将新徏的swf文g保存?sh)rebuild.flaQƈ?Q导出的文g在同一目录Q?BR>6Q运?Q生的一个rebuild.jsfl文gQ一切搞定?BR>



非飞 2005-04-04 03:32 发表评论
]]>
E序员应该怎么q生z?Q?http://www.tkk7.com/Tower/archive/2005/03/23/2372.html非飞非飞Wed, 23 Mar 2005 07:25:00 GMThttp://www.tkk7.com/Tower/archive/2005/03/23/2372.htmlhttp://www.tkk7.com/Tower/comments/2372.htmlhttp://www.tkk7.com/Tower/archive/2005/03/23/2372.html#Feedback3http://www.tkk7.com/Tower/comments/commentRss/2372.htmlhttp://www.tkk7.com/Tower/services/trackbacks/2372.html中午收到老姐来的?sh)话Q电(sh)话里Ҏ(gu)一遍一遍又一遍的在我而唠叨Q说Q“不你怎么忙,有多东西要写,一定要按时睡觉”。还列出?jin)一堆要按时睡觉的理由。其实谁不知道应该要按时睡觉Q可是作为写E序的程序员来说Q要真想做到q一点实在是难,难,隑֑Q?BR>
要按时睡觉的理由
Q?

从h的排毒期入手Q晚?1Q?0Q-1Q?0Q肝的排毒期Q必d睡觉中进行)(j)
从h的睡眠最x(chng)D入手:(x)1Q?0Q-4Q?0Qh的睡眠是质量最高的

不知道各位有谁是有正常的生活?fn)惯的,能不能说一说你是怎么做到的。。?BR>



非飞 2005-03-23 15:25 发表评论
]]>
Linux下JNI调用http://www.tkk7.com/Tower/archive/2005/03/22/2338.html非飞非飞Tue, 22 Mar 2005 10:39:00 GMThttp://www.tkk7.com/Tower/archive/2005/03/22/2338.htmlhttp://www.tkk7.com/Tower/comments/2338.htmlhttp://www.tkk7.com/Tower/archive/2005/03/22/2338.html#Feedback0http://www.tkk7.com/Tower/comments/commentRss/2338.htmlhttp://www.tkk7.com/Tower/services/trackbacks/2338.html    做项目,无论是遗留品的再生产,q是寚w留品的再利用,都不可避免的?x)出C大堆的异构现象。解军_构通信问题是这c项目的主要问题。以前看见这U情늬一个解x(chng)案就是Socket通信。说实在的自己实现Socket通信Q定刉信协议Q或者是实现已有的通信协议都是很头痛的事情。本人有不堪回首的历史经历?BR>
    最q同样在目中需要去解决一个异构问题,׃旉的紧q,以及(qing)先天的运行环境(两个部分是运行在同一台机器上的)(j)。考虑C(jin)使用JNIQ结果表明JNI是完全可以胜ȝ前的角色的。以前没有了(jin)解过JNIQL以ؓ(f)它这不好那不好,用了(jin)用,表现q(sh)错,而且实现h非常之简单?BR>
    整个实现q程可以分ؓ(f)五步来完成:(x)

1Q写一个声明了(jin)native的Java文gQ?/FONT>

package example;

public class TestJNI 
{
    
static 
{
        System.loadLibrary(
"test"
);
    }

    
    
public native String getNameCPP();
}


2) 使用javah产生对应的CPP头文Ӟ(x)
命o(h)Qjavah -classpath <path> -jni example.TestJNI -d <out_dir>
生成的头文gexample_TestJNI.h如下Q?BR>
/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
<jni.h>
/* Header for class example_TestJNI */

#ifndef _Included_example_TestJNI
#define _Included_example_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     example_TestJNI
 * Method:    getNameForCPP
 * Signature: ()Ljava/lang/String;
 
*/

JNIEXPORT jstring JNICALL Java_example_TestJNI_getNameForCPP
  (JNIEnv 
*, jobject);

#ifdef __cplusplus
}

#endif
#endif

3Q实现对应的CPP代码Q?BR>
#include "example_TestJNI.h"
#include 
<string>

JNIEXPORT jstring JNICALL Java_example_TestJNI_getNameForCPP
  (JNIEnv 
* env, jobject)
{
    
//TODO 可以在此调用其他的代?/SPAN>
    std::string strName = "Tower";
    
return env->NewStringUTF(strName.c_str());
}


4) ~译CPP代码
命o(h)Qg++ -o libtest.so -shared -I<include_path> -I<java_home>/include -I<java_home>/include/linux example_TestJNI.cpp

5Q执?BR>
package example;

public class Test {
    
public static void main(String[] args) {
        TestJNI test 
= new TestJNI();
        System.
out.println("Hello " + test.getNameForCPP());
    }

}


export LD_EXPORT_PATH=<so_path>
java -cp <path> -Djava.library.path=<so_path> example.Test
输出QHello Tower


非飞 2005-03-22 18:39 发表评论
]]>
设计模式_解 [MW记]http://www.tkk7.com/Tower/archive/2005/03/13/2047.html非飞非飞Sun, 13 Mar 2005 15:41:00 GMThttp://www.tkk7.com/Tower/archive/2005/03/13/2047.htmlhttp://www.tkk7.com/Tower/comments/2047.htmlhttp://www.tkk7.com/Tower/archive/2005/03/13/2047.html#Feedback0http://www.tkk7.com/Tower/comments/commentRss/2047.htmlhttp://www.tkk7.com/Tower/services/trackbacks/2047.html做了(jin)q么久的软gQ从来就没有好好的学?fn)过设计模式。写代码Q做设计的时候都是稀里糊涂。做出来的设计,都会(x)不同E度的让自己感觉C安。这可能是《设计模式精解》书中所说那U直觉吧?BR>
引用Q?BR>
留意你的知觉

?gu)本能的直觉能对设计质量做Zo(h)人惊讶的预测。所谓“出自本能的直觉”,是指当你看到某些不喜Ƣ的东西Ӟ你胃部的感觉。我知道q听hq不U学Q而且它的不U学Q,但我的经验L向我证明Q当我从直觉上不喜欢一个设计时Q一个更好的设计一定就w在角落里?BR>
Facade模式Q关键特?BR>
意图Q希望简化现有系l的使用Ҏ(gu)。你需要定义自q接口?BR>问题Q只需要用一个复杂系l的一个子集。或者,需要用一U特D的方式与系l交互?BR>解决Ҏ(gu)QFacade向客户展C用现有系l的一个新的接口?BR>参与者与协作者:(x)向客户展C个定制的接口Q让客户更容易地使用现有pȝ?BR>效果QFacade模式化了(jin)Ҏ(gu)需子系l的使用。但是,׃Facadeq不完整Q因此某些功能对于客户可能是可用的?BR>现实Q?Q定义一个(或一l)(j)新的cL提供所需要的接口?BR>             2Q让新的cM用现有的pȝ?BR>
Facade模式使用于以下情况:(x)

  • 不需要用一个复杂系l的所有功能,q且可以创徏一个新的类来包容访问原有系l的接口的一个子集(通常它就是)(j)比原始系lAP单得多?/FONT>
  • 希望包装或隐藏原有系l?/FONT>
  • 希望使用原有pȝ的功能,q且希望增加一些新的功能?/FONT>
  • “编写一个新的类”的代h(hun)于“让所有h学会(x)使用原有pȝ”或“在未来l护整个pȝ”所需的代?BR>

 



非飞 2005-03-13 23:41 发表评论
]]>
l织团队开发项目的方式http://www.tkk7.com/Tower/archive/2005/03/03/1667.html非飞非飞Thu, 03 Mar 2005 13:06:00 GMThttp://www.tkk7.com/Tower/archive/2005/03/03/1667.htmlhttp://www.tkk7.com/Tower/comments/1667.htmlhttp://www.tkk7.com/Tower/archive/2005/03/03/1667.html#Feedback0http://www.tkk7.com/Tower/comments/commentRss/1667.htmlhttp://www.tkk7.com/Tower/services/trackbacks/1667.html
    一个项目通常分ؓ(f)表示层、业务逻辑层和持久层,q是最为常见的三层l构。在l织团队q行目开发的时候,选择如何分工对版本控制有很大的媄(jing)响。团队在做开发的时候一般有两种模式Q按层开发和按功能开发?BR>
按层开发(本h赞同的模式)(j)

    在这U开发模式下Q每个开发h员的目录l构相对固定和独立。对于CVSq类按文件夹来控制权限的版本控制服务器来_(d)比较Ҏ(gu)实现对开发h员权限的划分Q不易出现文件不同步而导致的版本混ؕ?BR>
    另外Q这U开发模式下Q更能集中开发h员的注意力,不需要了(jin)解太多与本层无关的其他技术。将_全部集中在如何实现本层的功能上,更有利于写出功能强大Q运行稳定的代码。例如:(x)开发业务逻辑层的开发h员,他不可避免的?x)写很多逻辑上基本上一致的代码Q在写代码的q程中,p从中扑և一些相对的共性,公q代码q行抽象Q从而避免了(jin)出现大量的重复代码。由于工作范围相对较?yu),能有更多的时间去学?fn)相关斚w的最新技术和解决Ҏ(gu)Qƈ应用到程序中Q能使程序在实现方式上较为先q、优?BR>
    老天是公q的Q万物有其好的一面也必然有其不好的一面,q种开发模式也不能例外。对于需求不明确Q无法定义相对固定的对外接口Ӟq中按层开发的模式有其无法避免的一个问题。各层开发h员需要在开发的q程中,反覆的修Ҏ(gu)口,以便适应于变化了(jin)的需求。这必然导致逻辑处理部分代码要做相应的修攏V?BR>
按功能开发(本h持保留态度Q?/B>

    q种开发模式下Q开发h员的目录l构基本是项目的完整目录接口Q他们需要到各层ȝ写对应他们所开发的模块的所有代码。对于CVSq类版本控制服务器来_(d)基本上是无法做到对开发h员权限的界定。很Ҏ(gu)造成版本控制混ؕQ导致文件版本不同步Q是在开发过E中使用?jin)公共文件的开发h员(sh)能保证同步。例如:(x)一个文件ؓ(f)多个开发h员所共同l护Q开发h员各自都需要在其中d自己功能所需要部分的代码。这样很Ҏ(gu)出现多个人同时修改一个文件的情况Q导致文件不同步而造成的版本؜乱?BR>
    另外Q这U开发模式对开发h员的技术要求相对较高,它要求开发h员掌握各层中所需要的技术。从界面昄到数据持久化Q甚臛_|络通信都需要一个开发h员去实现。在功能实现架构不是很确定的情况下,E序代码中将?x)出现大量的重复代码Q因为每个h都有自己的实现机Ӟ而逻辑处理相同或相q的情况在同一层中出现频率又比较高。导致程序的整体l构不统一Q尽层ơ结构相同。得程序日后维护极度困难,大大的提高(sh)(jin)l护成本。由于开发h员牵涉用的技术过多,也很难保证程序实现方式的先进性和优越性?BR>




非飞 2005-03-03 21:06 发表评论
]]>
Hibernate中的l承映射http://www.tkk7.com/Tower/archive/2005/03/02/1617.html非飞非飞Wed, 02 Mar 2005 14:31:00 GMThttp://www.tkk7.com/Tower/archive/2005/03/02/1617.htmlhttp://www.tkk7.com/Tower/comments/1617.htmlhttp://www.tkk7.com/Tower/archive/2005/03/02/1617.html#Feedback1http://www.tkk7.com/Tower/comments/commentRss/1617.htmlhttp://www.tkk7.com/Tower/services/trackbacks/1617.html


Hibernate的承映包含了(jin)三种不同的策略:(x)

  1. 每簇cM用一个表Q?
  2. 每个子类一个表Q?
  3. 每个具体内一个表Q有限制Q?BR>
假设我们有四个类AnimalQDogQCatQ其代码如下Q?BR>文g名:(x)Animal.java
class Animal {
    
private String identifier;
    
private String name;
    
private String category;
    
// setter and getter
}

文g名:(x)Dog.java
class Dog extends Animal {
    
private String 
    
// setter and getter
}

文g名:(x)Cat.java
class Cat extends Animal {
    
private String 
    
// setter and getter
}

  • 每簇cM用一个表
       使用每簇cM用一个表的策略时Q有一个限制就时子cM能有NOT NULLQ映文件ؓ(f)Q?BR>       文g名:(x)Animal.hbm.xml
       <class name="Animal" table="TB_ANIMAL">
          
<id name="identifier" type="string" column="IDENTIFIER">
             
<generator class="uuid.hex"/>
          
</id>
          
<discriminator column="ANIMAL_TYPE" type="string"/>
          
<property name="name" column="NAME" type="string"/>
          
          
<subclass name="Dog" discriminator-value="DOG">
             
          
</subclass>
          
<subclass name="Cat" discriminator-value="CAT">
             
          
</subclass>
       
</class>

  • 每个子类一个表
       使用每个子类一个表的策略时Q可以用一个映文件实玎ͼ也可以分成多个映文件来实现。每个子cM个映文件的情况Q?BR>       文g名:(x)Animal.hbm.xml
       <class name="Animal" table="ANIMAL">
          
<id name="identifier" column="IDENTIFIER" type="string">
             
<generator class="uuid.hex"/>
          
</id>
          
<property >
       
</class>
       文g名:(x)Dog.hbm.xml
       
<joined-subclass name="Dog" table="DOG" extends="Animal">
          
<key column="DOG_ID"/>
          
       
</joined-subclass>
       文g名:(x)Cat.hbm.xml
       
<joined-subclass name="Cat" table="CAT" extends="Cat">
          
<key column="CAT_ID"/>
          
       
</joined-subclass>

       每个子类一个表的策略实际上一Uone-to-one的映?BR>
  • 每个具体内一个表Q有限制Q?/B>
       使用每个具体内一个表Q有限制Q策略时Q每一个子cȝ映射文g要包含所有父cM的属性,映射文gQ?BR>       文g名:(x)Dog.hbm.xml
       <class name="Dog" table="DOG">
          
<id name="identifier" column="IDENTIFIER" type="string">
             
<generator class="uuid.hex"/>
          
</id>
          
<property name="name" column="NAME" type="string"/>
          
       
</class>
       文g名:(x)Cat.hbm.xml
       
<class name="Cat" table="CAT">
          
<id name="identifier" column="IDENTIFIER" type="string">
             
<generator class="uuid.hex"/>
          
</id>
          
<property name="name" column="NAME" type="string"/>
          
       
</class>






非飞 2005-03-02 22:31 发表评论
]]>
各层׃n使用PO的代?/title><link>http://www.tkk7.com/Tower/archive/2005/03/01/1584.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Tue, 01 Mar 2005 04:40:00 GMT</pubDate><guid>http://www.tkk7.com/Tower/archive/2005/03/01/1584.html</guid><wfw:comment>http://www.tkk7.com/Tower/comments/1584.html</wfw:comment><comments>http://www.tkk7.com/Tower/archive/2005/03/01/1584.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/Tower/comments/commentRss/1584.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Tower/services/trackbacks/1584.html</trackback:ping><description><![CDATA[    |上一大堆关于POQPOJOQDTOQVO{等对象的讨论,通常都是各持pQ公说公有理Q婆说婆有理Q讨论到最后也没有什么定论。今天看C个应用的代码Q发现其讲PO直接做ؓ(f)VOQview objectQ在表示层用。只从代码上Ԍq样做确实省M(jin)跟多操作。不用重复的做对象的赋倹{构造。但是会(x)q头来看Q这h疑增加了(jin)代码的耦合性。做一个简单的假设Q如果对持久层的POq行?jin)修改,相应的用PO做ؓ(f)对应的VOQvalue objectQ业务逻辑层和使用PO最为VOQview objectQ的表示层都必须做相应的修改Q如此的应用l代码的l护带来?jin)很大的负担Q可谓是一动则癑֊?BR>    在J2EE应用开发中Q是不应该出现这中PO׃n使用的方式的。实体对象不应该被跨层用,各层l护自己的实体对象。这点看书我惛_安知道Q而在实际应用中很多h都选择不遵循这一规则。(在用hibernate时有所不同Q引用:(x)?FONT class=htd>不过׃Hibernate的强大功能,例如动态生成POQPO的状态管理可以脱SessionQ得在应用?jin)Hibernate的J2EE框架中,PO完全可以充当VOQ因此我们下面把PO和VO合ƈQ统UCؓ(f)PO。?/FONT>引文Q?FONT class=red_3><A >l合struts和hibernate谈J2EE架构的数据表C?/A></FONT>。)(j)出现qȝ象,我想原因只有一个就是贪图了(jin)一时的省事Q在一ơ性应用开发中Q相对的业务对象改动可能性相当的,很多时候在做项目的时候ƈ不会(x)出现预料不到的改变,没有必要ȝ理一大堆各式各样的实体对象,q样p然的D?jin)PO在各层中׃n使用。可是就我目前接触到的项目基本上没有需求是如此明确的,通常需求都是在不断的改变,甚至有时C(jin)最后发版的时候,一些客户都?x)提Z攚w求的要求。另外就是自做需求的情况更是如此了(jin)Q这U项目的需求是不断的在变化的。ؓ(f)?jin)保证项目的适应性和可扩展性,必M证各层之间的相对独立Q尽可能降低耦合度?BR><BR><BR><BR><img src ="http://www.tkk7.com/Tower/aggbug/1584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Tower/" target="_blank">非飞</a> 2005-03-01 12:40 <a href="http://www.tkk7.com/Tower/archive/2005/03/01/1584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过mx4j实现JMXConnectorServer和JMXConnectorhttp://www.tkk7.com/Tower/archive/2005/02/05/1037.html非飞非飞Sat, 05 Feb 2005 11:07:00 GMThttp://www.tkk7.com/Tower/archive/2005/02/05/1037.htmlhttp://www.tkk7.com/Tower/comments/1037.htmlhttp://www.tkk7.com/Tower/archive/2005/02/05/1037.html#Feedback0http://www.tkk7.com/Tower/comments/commentRss/1037.htmlhttp://www.tkk7.com/Tower/services/trackbacks/1037.html
    对于如何产生和注册MBeansQmx4j提供?jin)一个相当方便的工具Qؓ(f)什么说相当方便Q是因ؓ(f)它真的实在是太方便了(jin)。通过写一个xml配置文g可以完成所有的工作。比起M-LET实是强?jin)不。下面就是一个在MBean Server产生注册一个NamingService、JMXConnectorServer和一个自写的MBean的配|文件?BR>
<?xml version="1.0" encoding="UTF-8"?>
<configuration port="9999">
   
<startup>
      
<create classname="mx4j.tools.naming.NamingService" objectname="naming:type=rmiregistry">
         
<arg type="int">1099</arg>
      
</create>
      
<call operation="start" objectname="naming:type=rmiregistry" />

      
<object objectid="rmi">
         
<call classname="javax.management.remote.JMXConnectorServerFactory" method="newJMXConnectorServer">
            
<arg type="javax.management.remote.JMXServiceURL">
               
<new classname="javax.management.remote.JMXServiceURL">
                  
<arg type="string">service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmx</arg>
               
</new>
            
</arg>
            
<arg type="java.util.Map" />
            
<arg type="javax.management.MBeanServer" />
         
</call>
      
</object>
      
<register objectname="connectors:type=rmi,protocol=jrmp">
         
<arg type="object" refobjectid="rmi" />
      
</register>
      
<call method="start" refobjectid="rmi" />
      
<create classname="nsmp.examples.mbeans.rmi.MyRemoteServiceObject" objectname="services:type=my-remote" />
   
</startup>

   
<shutdown>
      
<call operation="stop" objectname="services:type=my-remote" />
      
<call method="stop" refobjectid="rmi" />
      
<call operation="stop" objectname="naming:type=rmiregistry" />
      
<unregister objectname="services:type=my-remote"/>
      
<unregister objectname="connectors:type=rmi,protocol=jrmp" />
      
<unregister objectname="naming:type=rmiregistry" />
   
</shutdown>
</configuration> 

java代码Q?BR>
package nsmp.agent;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
import java.net.Socket;

import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;

import mx4j.tools.config.ConfigurationLoader;
import nsmp.util.NsmpGlobals;

/**
 * @version 1.0
 * @author tower
 *
 * TODO write the comment of this type
 
*/

public class NsmpServer {
    
public void startup() throws Exception {
        MBeanServer server 
= MBeanServerFactory.newMBeanServer();
        ConfigurationLoader loader 
= new ConfigurationLoader();

        server.registerMBean(loader, ObjectName.getInstance(
"config:service=loader"));
        Reader reader 
= new BufferedReader(new FileReader(NsmpGlobals.NSMP_HOME + "/conf/config.xml"));
        
        loader.startup(reader);
        reader.close();
        System.
out.println("Start the nsmp server successfully!");
    }

    
public void shutdown() throws Exception {
          String shutdownCommand 
= "shutdown";
          Socket socket 
= new Socket("127.0.0.1"9999);
          socket.getOutputStream().write(shutdownCommand.getBytes());
          socket.close();
    }

}


    startupҎ(gu)调用配置文g的startup部分完成创徏和注册,shutdownҎ(gu)调用配置文g的shutdown部分释放相应的资源。通过调用 startupҎ(gu)可以v动MBeanServer提供服务?jin)。对于shutdown开始搞?jin)我半天startup?ConfigurationLoader都没有创Z个侦听端口来接收shutdown命o(h)Q看?jin)看mx4j的源码发?ConfigurationLoader也没有发C么特D地斏V捉摸半天终于发C(jin)自己放了(jin)一个愚W的错误Qeclipse是用普通用h限开的,没有办法创徏侦听Q改成root后一切ok?BR>
    接下随便写?jin)一个JMXConnectorQ代码:(x)

/*
 * Copyright (C) The MX4J Contributors.
 * All rights reserved.
 *
 * This software is distributed under the terms of the MX4J License version 1.0.
 * See the terms of the MX4J License in the documentation provided with this software.
 
*/


package nsmp.examples.mbeans.rmi;

import java.util.Map;

import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;


/**
 * @version $Revision: 1.3 $
 
*/

public class Client
{
   
public static void main(String[] args) throws Exception
   
{
           JMXServiceURL address 
= new JMXServiceURL("service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmx");
           Map creationEnv 
= null;
           JMXConnector connector 
= JMXConnectorFactory.newJMXConnector(address, creationEnv);
           
           Map connectionEnv 
= null;
           connector.connect(connectionEnv);
           
           MBeanServerConnection serverConnection 
= connector.getMBeanServerConnection();
           ObjectName name 
= ObjectName.getInstance("services:type=my-remote");
           MBeanInfo mbInfo 
= serverConnection.getMBeanInfo(name);
           MBeanOperationInfo[] operationInfo 
= mbInfo.getOperations();
           
           
for (int i = 0; i < operationInfo.length; i++{
               System.
out.println(operationInfo[i].getName());
           }

           
           serverConnection.invoke(name, 
"sayHello"new Object[] {"Tower He"}new String[] {"java.lang.String"});
   }

}



JMXConnector是通过获取一个MBeanServerConnection来实现远E调用的Q运行了(jin)一下一切顺利通过?BR>
下蝲Q?A href="http://www.tkk7.com/Files/Tower/MX4JExample.rar">MX4JExample.rar


非飞 2005-02-05 19:07 发表评论
]]>
看《难兄难弟》有感要说呀Q?/title><link>http://www.tkk7.com/Tower/archive/2005/02/03/928.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Wed, 02 Feb 2005 19:02:00 GMT</pubDate><guid>http://www.tkk7.com/Tower/archive/2005/02/03/928.html</guid><wfw:comment>http://www.tkk7.com/Tower/comments/928.html</wfw:comment><comments>http://www.tkk7.com/Tower/archive/2005/02/03/928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/Tower/comments/commentRss/928.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Tower/services/trackbacks/928.html</trackback:ping><description><![CDATA[<P>命运之可?/P> <P>   深夜Q没有睡。不是在写程序,而是在看《难兄难弟》。两大男主角都是我所喜欢的,|嘉良扮演李奇,吴镇宇饰演谢源。电(sh)视的情节跌宕起伏Q命q被剧中的演员诠释的入木三分。正所谓存在必不容易,?sh)视剧的剧本不是~剧凭空惌而写成的Q特别是好的剧本定是~剧不知道咬?jin)多笔头而写p成的。(写好的程序不也是q样吗?Q在《难兄难弟》一剧中谢源是一个在事业上一路顺风,扶摇直上的大明星Q而李奇的星\则是坎坷岖崎的,做的角色大多是跑龙套一cȝQ更是经常做其他明星的媄(jing)子(替nQ。一w才华得不到人得赏识Q有力无处。命q简直是讲所有的一切大风大都强加与他的n上。以前看?sh)视QL觉得有不有这么y呀Q什么坏是都被他遇上?jin)。而今Q长大了(jin)Q对周围的h、事也见多了(jin)。最后不得不感叹Q原来命q真的是如此的不公^。知道不公^又能怎么样呢QhQ作ZU自认ؓ(f)是高U的物种存在于这颗被UCؓ(f)地球的星球上Q其实他本n是多么的渺小。对于自己面临的问题Q很多时候h都是两手一摆,无能为力?BR>   前段旉跟一位故友讨Z(jin)一下所谓的人生价倹{在闲聊之间Q发Ch生h(hun)值太难以L握。h的一生拿来于宇宙来比较,太ؓ(f)短暂微不道?jin)。而一个h要在如此短暂的生命区间里扑֯到自q价|谈何Ҏ(gu)。马克思说一个h存在的h(hun)值是通过他的C会(x)价值来表现的。只有当他实C(jin)自己的社?x)h(hun)|得到?jin)社会(x)的肯定和承认,q样才能得到C会(x)的回报,得到自己的个Zh(hun)倹{从字面上来看,马克思说的这一Ҏ(gu)勿庸|疑的。但是当用马克思的另一个原理矛监֭在的普遍性在来分析一下h生。h的一w是短暂的,而矛盾无处不在。从宏观的角度看Qh(hun)D可能如马克思所_(d)但是从微观上来说Qh的一生是充满?jin)不q等待遇的。就是所谓的好h未必又好报。剧本中的李奇这角色充分的体C(jin)q一炏V当命运不断的摧D下Q有几个真正的挨得住Q撑得下厅R(可能有h说我太消极了(jin)Q应该用U极的态度ȝ待,应该认ؓ(f)是在接受命运的考验。)(j)可能是我真的太?zhn)观?jin)Q但是我知道如果换成我是李奇我肯定顶不住。我觉得已经q远过?jin)我的承受能力。命q可能认为只是跟他开一个小的玩笑Q可是不要忘Ch是ؓ(f)的Q开不vq样的玩W?/P><img src ="http://www.tkk7.com/Tower/aggbug/928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Tower/" target="_blank">非飞</a> 2005-02-03 03:02 <a href="http://www.tkk7.com/Tower/archive/2005/02/03/928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一天的工作l于l束?jin)。。?/title><link>http://www.tkk7.com/Tower/archive/2005/01/26/738.html</link><dc:creator>非飞</dc:creator><author>非飞</author><pubDate>Wed, 26 Jan 2005 11:34:00 GMT</pubDate><guid>http://www.tkk7.com/Tower/archive/2005/01/26/738.html</guid><wfw:comment>http://www.tkk7.com/Tower/comments/738.html</wfw:comment><comments>http://www.tkk7.com/Tower/archive/2005/01/26/738.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/Tower/comments/commentRss/738.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/Tower/services/trackbacks/738.html</trackback:ping><description><![CDATA[看了(jin)一天的文档Q头都要怺(jin)Q加上原本就有的发烧Q简直就是要我的命了(jin)。上班的日子不知道比考研要篏上多被Q才三天有Ҏ(gu)持不住了(jin)Q可是ؓ(f)?jin)生zL有办法呀。下午讨Z(jin)一下如何做到对一个局域网的安全性进行评估。单单只是谈Z(jin)一下需求就发现q个pȝ实在是把单?br> 目前提出的需求有Q?br> <ol> <li>|络上各节点L是否存在病毒Q?/li> <li>|络上各节点L存在的漏z评伎ͼ</li> <li>L上是否存在非法用户和非法应用Q?/li> <li>对网l上敏感信息的搜索;</li> <li>|络拓扑是否安全合理?/li> </ol> 以上无条需求出??以外其他的都是一个“伟大的工程”,需要慢慢研I。无奈呀<br><img src ="http://www.tkk7.com/Tower/aggbug/738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/Tower/" target="_blank">非飞</a> 2005-01-26 19:34 <a href="http://www.tkk7.com/Tower/archive/2005/01/26/738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回实验室上班http://www.tkk7.com/Tower/archive/2005/01/26/717.html非飞非飞Wed, 26 Jan 2005 02:00:00 GMThttp://www.tkk7.com/Tower/archive/2005/01/26/717.htmlhttp://www.tkk7.com/Tower/comments/717.htmlhttp://www.tkk7.com/Tower/archive/2005/01/26/717.html#Feedback1http://www.tkk7.com/Tower/comments/commentRss/717.htmlhttp://www.tkk7.com/Tower/services/trackbacks/717.html

非飞 2005-01-26 10:00 发表评论
]]>
վ֩ģ壺 һƵ| Ƶ| ޹ƷۺϾþþ| 99Ʒ| ţƷ޳avƬ| ŷ޹ڸ| պaëƬa| ƵƷһ| ޾Ʒ456߲| պëƬѿ| ձĻѸƵ| ޹Ƶþ| AVվ߹ۿ| 㻨ۿ| þù׾Ʒҹ | ͵޾Ʒ| ww4545Ļѵַ| ѴƬ߹ۿ| Ƶַ| AVרAWWW| պѾƷƵ| ˿ҺƵ| ŷһ| avר߹ۿ | AVƬ߲Ψ | a߹ۿƵ| Ʒ456߲| ޳߹ۿ| avһ| ޾ƷѹۿƵ | ˳Ƶ| Ʒ˳Ƶapp| 91ѸƵ| Ůɫվ| պAV뾫Ʒ| tvۺɫ| ۺϵ| СƵ߹ۿ| ëƬֻѿ| 123Ʒ| Ұ߹ۿƵ |