??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲丰满熟女一区二区哦,亚洲18在线天美,亚洲成人高清在线http://www.tkk7.com/chelsea/zh-cnSun, 11 May 2025 12:00:03 GMTSun, 11 May 2025 12:00:03 GMT60Restatement: 性能,定w,负蝲,以及(qing)压力试http://www.tkk7.com/chelsea/archive/2010/07/26/327176.html切尔斯基切尔斯基Mon, 26 Jul 2010 14:44:00 GMThttp://www.tkk7.com/chelsea/archive/2010/07/26/327176.htmlhttp://www.tkk7.com/chelsea/comments/327176.htmlhttp://www.tkk7.com/chelsea/archive/2010/07/26/327176.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/327176.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/327176.html
* q发?数据?
* 机器配置
* 单个h处理速度
* E_q行旉
  阅读全文

切尔斯基 2010-07-26 22:44 发表评论
]]>
IoC 问题?/title><link>http://www.tkk7.com/chelsea/archive/2010/07/11/325812.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Sun, 11 Jul 2010 14:18:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2010/07/11/325812.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/325812.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2010/07/11/325812.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/325812.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/325812.html</trackback:ping><description><![CDATA[<br /> IoC避不开的一个问题是如何处理应用E序的模块化, 因ؓ(f)IoC通常针对单个对象提供?jin)良好的支? 比如依赖理,生命周期理,部v旉|甚臌行时配置, 但往往一l内聚的互相协作的对象才构成应用E序基本的构建块. q组内聚对象间的协作关系是实现细? 包括单个对象的构造函数和属性也? 如果把这些暴露出? 固然可以提高灉|? 但是以最后的部v阶段的复杂性以?qing)难以维护性ؓ(f)代h(hun)? 以配|文件ؓ(f)? 可能需要在包含?jin)几百个对象定义的配|文件中, L动七八个属? 变换五六个实? 来适应不同的运行环?br /> <br /> 两个解决q个问题的方? 一个是IoC框架提供模块化支? 以及(qing)部v时支? 一U是IoC框架应该避开q个问题, q本不属于IoC的范? 应该交由专门的模块化框架如OSGi去解?br /> <br /> 在我相对熟?zhn)的IoC框架? Autofac试图提供"Module"q个概念来解决一部分问题. 对象间的协作可以隐藏在Module对象? 一些必要的参数可以通过Module的属性设|进? 而对使用?寚w|只需暴露Module对象卛_. q是以qzLؓ(f)代h(hun)? 替换某个内部对象的实现变成了(jin)Hack, 需要通过团队成员间的交流, 源代码集体所有来完成. 如果在Module对象内部枚D扩展点的所有实? 通过部v时的参数来挑(xi)选某个实? 则会(x)引入不必要的依赖, 更是得不偿失<br /> <br /> 个h們֐于第二种. 谁介l一?Netq_上的模块化框?<br /> <br /> <br /> <br /> 所以相对聚焦一? ?jin)解一下IoC框架在处理单个对象的时候所需要解决的问题<br /> <br /> <h3>1, 部v时如何方便的支持产品环境和测试环? 卛_不同环境下提供同一接口的不同实?/h3> <br /> q个甚至不需要IoC框架解决, 应用开发h员在不同环境下提供不同配|文件即? 那问题变成了(jin)<br /> <br /> <h3>2, 如何化配|? 使得框架能够自动识别依赖</h3> <br /> q个被称为Auto wire, 一般根据构造函数参数或属性的cd来匹配依? 那么带来的一个问题是<br /> <br /> <h3>3, q行时如何动态切换同一个类型的不同实现, 比如用户选择?jin)只L? 那么所有的Save操作都应被忽略不做Q何事, 可以通过提供Save操作的Dummy版本来实?/h3> <br /> Auto wireҎ(gu)cd匚w有一定的局限? 卛_一个运行时环境有某个接口的多个实现怎么?  q里实际上有一个概? 卛_象的标识. 而类型只是标识的一U? 另外一U适应性更q的标识是字W串. 有的框架UC为ID, 有的UC为name. 标识的重要特征就是在一个运行时环境里是唯一? cd标识因此也可以{化ؓ(f)字符串标? 取其全名可以了(jin). (标识本n是个概念, 可以用一个类来表? 然后有不同的子类实现, 如基于类型的标识, Z字符串的标识{?<br /> <br /> 因此有两种{略: 一U是允许q行时某个对象可以重新声明依赖的标识, 一U是q行时用同样标识的对象替换原先的实现. 后一U相对容易实C? 按注册顺序Last One Win可以了(jin)<br /> <br /> 如果同一个类型的多个实例需要同时存? 则部|时l予不同的ID卛_. 然而另一个问题是<br /> <br /> <h3>4, 多用L(fng)境下, 如何保证每个用户都有自己的对象组合而不互相q扰</h3> <br /> IoC框架一般被UCؓ(f)IoC容器. 容器q个概念是对q行时环?上下文的装, 提供?jin)一l基设施, 以及(qing)q行时所需的各U服? 最重要的一Ҏ(gu), 它提供了(jin)在同一个进E里的隔? 多用L(fng)境下, 可以创徏多个彼此独立的容? 每个容器负责创徏所需的对? 提供所需的服? 彼此之间互不影响. 于是带来新的问题,<br /> <br /> <h3>5, 对象的生命周期如何管?/h3> <br /> 很显? 有的对象概念上属于全局, 在程序运行过E中不能创徏多个实例, 也不能被销? 有的跟用L(fng)一ơ操? 一ơ请求相兌, 同一ơ请求中可以复用同一个对象实? 但不同请求必dZ同的对象实例. 有的则每ơ需要访问它的时候都得创Z个新的实? 容器必须提供基础设施, 让应用开发者可以指定对象的生命周期, q在周期l束旉毁所有该销毁的对象. C# 提供?Dispose 机制, 可供利用<br /> <br /> <br /> <br /> 其它的一些问? 比如:<br /> <br /> <ul> <li>如何支持composite, decorator, proxy模式</li> <li>如何方便用户注册, 包括自动注册</li> <li>如何注入容器创徏的对象到用户手工创徏的对象中</li> <li>如何与现有各U框枉?/li> <li>如何避免循环引用: Constructor/property dependencies</li> <li>Open generics injection</li> <li>List injection    Unregistered resolution</li> <li>Auto-mocking</li> <li>Startable</li> <li>Strongly-typed Activation Events</li> <li>Adding to an Existing Container</li> </ul> <br /> <img src ="http://www.tkk7.com/chelsea/aggbug/325812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2010-07-11 22:18 <a href="http://www.tkk7.com/chelsea/archive/2010/07/11/325812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Log 问题?/title><link>http://www.tkk7.com/chelsea/archive/2010/07/06/325407.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Tue, 06 Jul 2010 15:15:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2010/07/06/325407.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/325407.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2010/07/06/325407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/325407.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/325407.html</trackback:ping><description><![CDATA[<br /> Log 问题?br /> <br /> <ul> <li>如何不带来额外的效率损失</li> <li>如何在程序运行出错时记录可能多的信?/li> <li>如何方便查找特定条g的错?/li> <li>如何横切的添加通用信息</li> </ul> <br /> <h3>如何不带来额外的效率损失</h3> <br /> 在之前接触的一个大型品中见过散布着如下代码:<br /> <br /> if (Log.Level > DEBUG) {<br />     logger.write(some_method_to_build_the_log_string());<br /> }<br /> <br /> 问ؓ(f)什么不在logger.write()里面判断日志U别, q样外面写v来就很清?br /> <br /> logger.write(some_method_to_build_the_log_string());<br /> <br /> {曰效率问题, 后面一U写法会(x)D无论日志最l有没有被写? some_method_to_build_the_log_string()都会(x)先行被调用求? 而这可能很耗时...<br /> <br /> 一个解军_法是额外的中间层: 能够延时求值的东东, 比如函数指针, 函数对象, 总而言之能够保存当前上下文而在来某个时刻能够回调的东? 诸如 C# 里的 Func<string><br /> <br /> q样logger.write()的签名就?void write(string info) 变成 void write(Func<string> getInfo);<br /> <br /> 带来的一个问题是啥时真正写入, 一般可以是用户事务l束的时? 其实当ƈ发用户量大时, 表面上g时求值可以不ȝ当前h的处理速度, 但当求值发生时, 可能?x)阻其它请求的处? 所以Func<string>代替string效率上的优势q不明显, 更多的是代码上的z?br /> <br /> (Func<string>的另一个好处是把IO操作推迟? 当时没有IO操作Q所有IO操作都被推到完成用户h之后再进行,其是如果因为其它原因需要把Log存到数据库的时? 当然不用Func<string>, 直接用string也可以实现推qIO操作, 只需要把string都缓存v? 找个时机再写出来卛_)<br /> <br /> 然而Func<string>更大的意义是解决W二个问?<br /> <br /> <br /> <h3>如何在程序运行出错时记录可能多的信?/h3> <br /> 通常最l写到日志里的信? 都是Ҏ(gu)配置的别决定的, 比如配置?jin)日志别是INFO, 那么无论Z出错, DEBUGU别的信息都不会(x)被写到日志里. 然而现实情冉|, 一旦出? 我们可能需要DEBUG信息来定位问? 于是我们不得不把日志U别讄成DEBUG,然后重新q行应用,企图复现. 但运行环境的差异使得复现像撞大运, 可遇不可? 于是在案发第一现场p录所有线索变得极h?br /> <br /> Ҏ(gu)志即时求值和写入是很隑֮现这个目的的, 而g时求? 回调, q层额外的间接则其变得轻而易?<br /> <br /> 我们要做的就是保存所有写日志的回? 直到写入的那一? Ҏ(gu)某种规则, 从中?xi)选部分回调真正去执行; 规则可以是正常情况下Ҏ(gu)日志U别讄, 出错的时候则全部写入, {等<br /> <br /> (q里的目的就是避免日志过于简略或者繁? 鼓励大家多写日志而不必担?j)运行时效?<br /> <br /> <h3>如何方便查找特定条g的错?/h3> <br /> 查找是数据库的强? 把日志结构化, 存到数据库里卛_. q会(x)带来事务的问? 写日志是否和用户正常的业务放在一个事务里?<br /> <br /> <h3>如何横切的添加通用信息</h3> <br /> 如果把log建模Z个对? 可以应用builder模式, pipeline{? 让log对象依次通过一堆builderl成的pipeline, 每个builder负责llog增砖ȝ, 最后出来的是一个包含了(jin)各种彼此独立的信息的对象<br /> <img src ="http://www.tkk7.com/chelsea/aggbug/325407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2010-07-06 23:15 <a href="http://www.tkk7.com/chelsea/archive/2010/07/06/325407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Validation 问题?/title><link>http://www.tkk7.com/chelsea/archive/2010/06/28/324716.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Mon, 28 Jun 2010 14:01:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2010/06/28/324716.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/324716.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2010/06/28/324716.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/324716.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/324716.html</trackback:ping><description><![CDATA[ <ul> <li>谁来做Validation</li> <li>何时做Validation</li> <li>如何表达错误</li> <li>如何传递错?/li> <li>如何兌错误到发生错误的对象, 其是对象图中非Root对象</li> </ul> <p><br /> <br /> q里的Validation指的是对q入到系l中的业务数据的校验(不包括Web应用中页面数据在览器端的验?<br /> </p> <h3>谁来做Validation</h3> <p><br /> 数据的有效性不是自w所能决定的, 而是使用它的场景(Context)军_? 因此, 每个Context应该有自qValidation逻辑.<br /> <br /> 一个例? 个h信息D缺, 比如婚姻状况没填, 但联pd址?sh)子邮g{信息完? 那么q个个h信息到底是合法还是非? 如果你的应用是个E务相关的应用必ȝ道婚ȝ况则数据是非法的, 如果你的应用是CRMpȝ有客L(fng)联系方式卛_而婚ȝ冉|可选的则数据就是合法的. 问题是你的应用是E务应用但同时支持客户关pȝ? 那这D|据到底合法非? E务应用只是q底的时候才有h? 而客户关pȝ理系l随旉有h? 假设数据是通过面提交? 那这Ҏ(gu)据到底该拒绝q是接受? <br /> </p> <h3>何时做Validation</h3> <p><br /> 通常有几个时? 对象被创建出? 对象状态改? 以及(qing)对象被持久化. 企业应用中同一份数据一般至有两种存在形式: 在数据库中的持久化状? 以及(qing)在内存(sh)以编E语a定义的对象Ş式存? 那么几个时机:</p> <ul> <li>手动创徏对象, 是应在构造函C做验?/li> <li>框架帮忙创徏对象, 比如从页面Forml定到Server端的对象? 可以在绑定完成的那一d校验</li> <li>存到数据库里那一?/li> </ul> <p><br /> q就带来一个问? 可能要在三个地方做大体相同的验证, 如何复用验证规则?<br /> 另一个问题是: 在引入ORM的应用中, ~程语言写好的验证逻辑同样可以应用在持久化到数据库的那一? 那在SQL/DDL语句中定义的U束是否q必?<br /> </p> <h3>如何表达错误</h3> <p><br /> 有两个约?</p> <ul> <li>要提供易于用户和支持人员理解的错误信?/li> <li>要提供尽可能丰富的信?/li> </ul> <p><br /> 常见的手D|用字W串或者错误代?ID, q是不work? 因ؓ(f)它们合ƈ?jin)错误本w和错误的表C? <br /> <br /> 出错的地方可能距需要展现错误的地方很远, 或者有多种展现错误的界? 或者有很多昄斚w的需? 比如支持国际? 报错的地Ҏ(gu)没有能力也不需要知道错误是如何被展C的, 它要做的是尽可能报告关于错误的详l信? 包括q反?jin)什么规? 出错的字D? 实际的值和期待的值等, 字符串和错误代码/ID是没有如此丰富的表达能力?br /> <br /> 我们可以用对象来表达错误信息, 对象的类型可以表C错误的cd, 对象的属?字段可以携带各种与错误类型相关的数据. 然后在需要展现给用户的那一? 再把对象译成针寚w个界面的昄, 比如可以做国际化, 或者提供给E序员更技术化的描q? 而在错误信息需要被昄之前, 错误在系l中的传? 都是以对象的形式q行?..<br /> <br /> 听v来跟异常Exception很像?<br /> <br /> 几个反例?Netq_上的异常, 比如KeyNotFoundException, 它就不告诉你那个找不到的Key是啥, q有Index界, ׃告诉你index的值是多少, q有数据库连接超时或者Transaction Timeout,L不告诉你它等?jin)多久超时? 让你搞不清楚是你的超时时间设的太短还是根本你的设|就没生?br /> <br /> </p> <h3>如何传递错?/h3> <p><br /> 攉参数, 输出参数, Thread Local, 或者抛出异常然后合适的层次捕获<br /> </p> <h3>如何兌错误到发生错误的对象? 其是对象图中非Root对象</h3> <p><br /> l错误一个Key, q个Key应该能表C出错的对象在对象图中的位置, 比如Key可以是字D名UC间用"."分隔, U联h的字W串. 注意q种形式的key应该是在调用验证逻辑的地方组装v来的, 而不应该是验证逻辑本n, 因ؓ(f)验证逻辑通常q不知道自己验证的这个对象在父对象中的字D名U?br /> </p> <h3>一个额外的话题</h3> <p> </p> <p>很多验证框架采用?jin)基于Attribute/Anontation的方? q样当一个对象在不同的Context有不同的验证逻辑时就?x)很U结, 因ؓ(f)它是以R入的方式写到对象的定义中? q恰C另一个角度说明了(jin)对象是不应该跨Context复用? DCI才是王道</p> <img src ="http://www.tkk7.com/chelsea/aggbug/324716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2010-06-28 22:01 <a href="http://www.tkk7.com/chelsea/archive/2010/06/28/324716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>代码的物理组l?/title><link>http://www.tkk7.com/chelsea/archive/2010/06/20/324020.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Sun, 20 Jun 2010 15:37:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2010/06/20/324020.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/324020.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2010/06/20/324020.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/324020.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/324020.html</trackback:ping><description><![CDATA[同一个Feature的代码要攑֜一?IDE里单独的一个工E? 或者工E里单独的一个文件夹), q些代码要么全有要么全无? 它们合作完成一个Feature, 如果用户不再需要这个Feature? 可以把它们整个的痛快的删? 不会(x)留下谁也用不到的代码成ؓ(f)pȝ的垃? 如果想看一个Feature是如何实现的, 那所有相关代码都在一? 不需要在庞大的代码库中蟩来蟩?<br /> <br /> 那么理想的情况就? 你看看源代码?wi)里所有工E文件的名字, 或者文件夹的名? q道系l提供了(jin)哪些功能, 它可以跟你的需求描q对应v? 无论用User Storyq是Use Case, 都可以用它们的名字作为工E名或者文件夹的名? 方便l护<br /> <br /> <br /> 行的MVC框架~省的物理文件组lƈ不是q样? Controller, Model, View分别在不同的文g多w? ASP.Net MVC提供?jin)VirtualPathProvider以及(qing)ViewEngine, 可以让我们把一个Feature的Controller/Model/Viewl统打包C个project或者文件夹而运行时依然能够扑ֈ对应的action和view, q是我们正在利用的特?br /> <br /> <br /> q种代码l织方式Ҏ(gu)构的影响是什?<br /> <br /> q基本会(x)DZ插g/扩展点的体系l构. 攑ֈ更大度? 是SOA. SOA才是王道. q个词太大了(jin), q是先聚焦到一个进E的应用....<br /> <br /> 1. UI如何聚合? 最l用L(fng)到的UI, 是一个聚合的l果, 可能来自pȝ的不同部? 解决q个问题的扩展点技术有客户端的Ajax, 或者服务端的RenderAction. (问题: Css应该如何处理? 不同部分的显C顺? 布局如何定?)<br /> 2. Feature如何沟? Feature之间不可能一点依赖没? 比如可能?x)用到相同的数? 相同的业务逻辑. 解决q个问题的方法有Bounded Context, Context Mapping, DCI...都是一回事<br /> 3. 数据库如何划? 不同的Feature使用自己的独立定义的数据? 做映和同步, 也是同样的方?br /> 4. 如何把这些Featurel装在一? Javaq_有OSGi, .Net目前没有看到跟OSGicM的方? 基本是注册或动态发现的路子, 遵@开闭原?..<br /> <br /> <br /> <img src ="http://www.tkk7.com/chelsea/aggbug/324020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2010-06-20 23:37 <a href="http://www.tkk7.com/chelsea/archive/2010/06/20/324020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORM问题?/title><link>http://www.tkk7.com/chelsea/archive/2009/12/28/307572.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Mon, 28 Dec 2009 15:49:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2009/12/28/307572.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/307572.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2009/12/28/307572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/307572.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/307572.html</trackback:ping><description><![CDATA[     摘要: 假设我们必须处理对象的存? 加蝲, 和查? 性能和引用完整性的U束, l接口的实现带来?jin)以下问? <br> <br> 1. 加蝲根对象时如何避免加蝲大半个数据库 <br> 2. 存储时如何更新整个对象图 <br> 3. 存储时如何高效的更新整个对象?<br> 4. 何时同步对象的内存状态和持久存储状?<br> 5. 如何保在出错时保持对象内存状态和持久存储状态之间的一致?<br> 6. 如何保证引用的唯一性以避免可能的更新冲H?<br> <br>Ҏ(gu)能的精益求_? 又促(j)使h们解x(chng)多的l节问题: <br> <br> 7. N+1查询问题 <br> 8. 分离查询模型和存储模?<br> 9. 量减少查询语句 <br> <br>q些问题的解x(chng)案又?x)带来新的问?  <a href='http://www.tkk7.com/chelsea/archive/2009/12/28/307572.html'>阅读全文</a><img src ="http://www.tkk7.com/chelsea/aggbug/307572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2009-12-28 23:49 <a href="http://www.tkk7.com/chelsea/archive/2009/12/28/307572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web开发问题域http://www.tkk7.com/chelsea/archive/2009/12/06/304923.html切尔斯基切尔斯基Sun, 06 Dec 2009 10:10:00 GMThttp://www.tkk7.com/chelsea/archive/2009/12/06/304923.htmlhttp://www.tkk7.com/chelsea/comments/304923.htmlhttp://www.tkk7.com/chelsea/archive/2009/12/06/304923.html#Feedback2http://www.tkk7.com/chelsea/comments/commentRss/304923.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/304923.html阅读全文

切尔斯基 2009-12-06 18:10 发表评论
]]>
卡尔.波普?dng)与敏捷开?/title><link>http://www.tkk7.com/chelsea/archive/2009/09/28/296847.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Mon, 28 Sep 2009 15:05:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2009/09/28/296847.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/296847.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2009/09/28/296847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/296847.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/296847.html</trackback:ping><description><![CDATA[     摘要: 我们都知道我们无法证明Y件已l没有Bug, 用L普尔的话说就? U学理论都是假说, 爱因斯坦的竞争理明对牛顿理论的即使如L(fng)星发现般严格的检验都不能保其正? 卛_白天鹅的一千次观察都不以断言黑天鹅的不存?nbsp; <a href='http://www.tkk7.com/chelsea/archive/2009/09/28/296847.html'>阅读全文</a><img src ="http://www.tkk7.com/chelsea/aggbug/296847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2009-09-28 23:05 <a href="http://www.tkk7.com/chelsea/archive/2009/09/28/296847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跨团队的持箋(hu)集成: 几个基本矛盾http://www.tkk7.com/chelsea/archive/2009/07/07/285870.html切尔斯基切尔斯基Tue, 07 Jul 2009 14:20:00 GMThttp://www.tkk7.com/chelsea/archive/2009/07/07/285870.htmlhttp://www.tkk7.com/chelsea/comments/285870.htmlhttp://www.tkk7.com/chelsea/archive/2009/07/07/285870.html#Feedback2http://www.tkk7.com/chelsea/comments/commentRss/285870.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/285870.html2. Z文本的合q??Z语意的逻辑 之间的矛?
3. 依赖的稳定??依赖自n的演q升U?之间的矛?nbsp; 阅读全文

切尔斯基 2009-07-07 22:20 发表评论
]]>
敏捷质疑: q代开?/title><link>http://www.tkk7.com/chelsea/archive/2009/07/05/285558.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Sun, 05 Jul 2009 08:43:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2009/07/05/285558.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/285558.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2009/07/05/285558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/285558.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/285558.html</trackback:ping><description><![CDATA[     摘要: 试错法广泛的应用于自然科学领? q代开发就是试错法在Y件开发过E方面的应用  <a href='http://www.tkk7.com/chelsea/archive/2009/07/05/285558.html'>阅读全文</a><img src ="http://www.tkk7.com/chelsea/aggbug/285558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2009-07-05 16:43 <a href="http://www.tkk7.com/chelsea/archive/2009/07/05/285558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>环境无关的环?/title><link>http://www.tkk7.com/chelsea/archive/2009/06/04/280104.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Thu, 04 Jun 2009 15:43:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2009/06/04/280104.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/280104.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2009/06/04/280104.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/280104.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/280104.html</trackback:ping><description><![CDATA[     摘要: 机器环境虽然各有各的不同, 但依然有可能创徏一?环境无关的环?  <a href='http://www.tkk7.com/chelsea/archive/2009/06/04/280104.html'>阅读全文</a><img src ="http://www.tkk7.com/chelsea/aggbug/280104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2009-06-04 23:43 <a href="http://www.tkk7.com/chelsea/archive/2009/06/04/280104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ThrowawayObject :在Java中实现Rails里的Flash Messagehttp://www.tkk7.com/chelsea/archive/2008/10/06/232774.html切尔斯基切尔斯基Mon, 06 Oct 2008 14:26:00 GMThttp://www.tkk7.com/chelsea/archive/2008/10/06/232774.htmlhttp://www.tkk7.com/chelsea/comments/232774.htmlhttp://www.tkk7.com/chelsea/archive/2008/10/06/232774.html#Feedback3http://www.tkk7.com/chelsea/comments/commentRss/232774.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/232774.html阅读全文

切尔斯基 2008-10-06 22:26 发表评论
]]>
敏捷质疑: l对~程, 代码集体所有权http://www.tkk7.com/chelsea/archive/2008/07/27/217886.html切尔斯基切尔斯基Sun, 27 Jul 2008 14:25:00 GMThttp://www.tkk7.com/chelsea/archive/2008/07/27/217886.htmlhttp://www.tkk7.com/chelsea/comments/217886.htmlhttp://www.tkk7.com/chelsea/archive/2008/07/27/217886.html#Feedback8http://www.tkk7.com/chelsea/comments/commentRss/217886.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/217886.html
Q: 我干嘛要把辛辛苦苦很多年U篏的经验白白告诉别? 我喜Ƣ不可替代的感觉.

Q: 有些老手不喜Ƣ结? 觉得Ch不劳而获对他们不? 不情? 怎么?

Q: 那互不相让怎么?

Q: 我想修改某段代码, x(chng)原作者了(jin)解一下思\, 可根本不知道是谁  阅读全文

切尔斯基 2008-07-27 22:25 发表评论
]]>
敏捷质疑: 持箋(hu)集成http://www.tkk7.com/chelsea/archive/2008/07/20/216246.html切尔斯基切尔斯基Sun, 20 Jul 2008 13:55:00 GMThttp://www.tkk7.com/chelsea/archive/2008/07/20/216246.htmlhttp://www.tkk7.com/chelsea/comments/216246.htmlhttp://www.tkk7.com/chelsea/archive/2008/07/20/216246.html#Feedback7http://www.tkk7.com/chelsea/comments/commentRss/216246.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/216246.htmlQ: CI的愿景是好的, 但我们这里根本不可能, 我们的品需要复杂的q行环境, q行旉要h工干? 怎么?  阅读全文

切尔斯基 2008-07-20 21:55 发表评论
]]>
敏捷质疑: TDDhttp://www.tkk7.com/chelsea/archive/2008/07/13/214623.html切尔斯基切尔斯基Sun, 13 Jul 2008 13:40:00 GMThttp://www.tkk7.com/chelsea/archive/2008/07/13/214623.htmlhttp://www.tkk7.com/chelsea/comments/214623.htmlhttp://www.tkk7.com/chelsea/archive/2008/07/13/214623.html#Feedback4http://www.tkk7.com/chelsea/comments/commentRss/214623.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/214623.html
Q: 你们说验收测试应该由客户来编? 可在我们q里Ҏ(gu)不可?
  阅读全文

切尔斯基 2008-07-13 21:40 发表评论
]]>
假冒的艺?/title><link>http://www.tkk7.com/chelsea/archive/2008/07/07/213168.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Mon, 07 Jul 2008 14:14:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2008/07/07/213168.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/213168.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2008/07/07/213168.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/213168.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/213168.html</trackback:ping><description><![CDATA[     摘要: Working Effectively with Legacy Code  <a href='http://www.tkk7.com/chelsea/archive/2008/07/07/213168.html'>阅读全文</a><img src ="http://www.tkk7.com/chelsea/aggbug/213168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2008-07-07 22:14 <a href="http://www.tkk7.com/chelsea/archive/2008/07/07/213168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CruiseControl Enterprise 最?jng)_?(6) : Scaling uphttp://www.tkk7.com/chelsea/archive/2008/04/12/192481.html切尔斯基切尔斯基Sat, 12 Apr 2008 15:09:00 GMThttp://www.tkk7.com/chelsea/archive/2008/04/12/192481.htmlhttp://www.tkk7.com/chelsea/comments/192481.htmlhttp://www.tkk7.com/chelsea/archive/2008/04/12/192481.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/192481.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/192481.html阅读全文

切尔斯基 2008-04-12 23:09 发表评论
]]>
CruiseControl Enterprise 最?jng)_?(5) : Refactor your configuration filehttp://www.tkk7.com/chelsea/archive/2008/03/06/184374.html切尔斯基切尔斯基Thu, 06 Mar 2008 15:26:00 GMThttp://www.tkk7.com/chelsea/archive/2008/03/06/184374.htmlhttp://www.tkk7.com/chelsea/comments/184374.htmlhttp://www.tkk7.com/chelsea/archive/2008/03/06/184374.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/184374.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/184374.html阅读全文

切尔斯基 2008-03-06 23:26 发表评论
]]>
CruiseControl Enterprise 最?jng)_?(4) : Bootstrap with a Bootstrapperhttp://www.tkk7.com/chelsea/archive/2008/02/17/180326.html切尔斯基切尔斯基Sun, 17 Feb 2008 08:09:00 GMThttp://www.tkk7.com/chelsea/archive/2008/02/17/180326.htmlhttp://www.tkk7.com/chelsea/comments/180326.htmlhttp://www.tkk7.com/chelsea/archive/2008/02/17/180326.html#Feedback1http://www.tkk7.com/chelsea/comments/commentRss/180326.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/180326.html阅读全文

切尔斯基 2008-02-17 16:09 发表评论
]]>
Ant: 大规模应用中的应?/title><link>http://www.tkk7.com/chelsea/archive/2008/01/12/174901.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Sat, 12 Jan 2008 14:03:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2008/01/12/174901.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/174901.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2008/01/12/174901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/174901.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/174901.html</trackback:ping><description><![CDATA[     摘要: Ant脚本如何适应大规模的目, Large Scale 的项目意味着: 目录较多, 层次较深 依赖较多, 构徏脚本依赖的第三方Ant Task, 目依赖的第三方库等 试较多, 构徏旉反馈周期较长 需要在不同操作pȝ上运?需要在不同团队成员的机器上q行 Ant脚本较长如何l护  <a href='http://www.tkk7.com/chelsea/archive/2008/01/12/174901.html'>阅读全文</a><img src ="http://www.tkk7.com/chelsea/aggbug/174901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2008-01-12 22:03 <a href="http://www.tkk7.com/chelsea/archive/2008/01/12/174901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CruiseControl ?108 U调度模?/title><link>http://www.tkk7.com/chelsea/archive/2008/01/05/173004.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Sat, 05 Jan 2008 10:29:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2008/01/05/173004.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/173004.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2008/01/05/173004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/173004.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/173004.html</trackback:ping><description><![CDATA[     摘要: "拥抱变化" 是敏L(fng)态度之一, CruiseControl 正是来实证这U态度的作? 多种cd?变化"都会(x)触发CruiseControl的一ơ构E? <br> <br> <br>我们知道CruiseControl能根据源代码的变化来调度一ơ构? 但你知道CruiseControl支持多少U调度模式吗? <br>  <a href='http://www.tkk7.com/chelsea/archive/2008/01/05/173004.html'>阅读全文</a><img src ="http://www.tkk7.com/chelsea/aggbug/173004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2008-01-05 18:29 <a href="http://www.tkk7.com/chelsea/archive/2008/01/05/173004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ivy: 搭徏本地仓库http://www.tkk7.com/chelsea/archive/2007/12/23/169880.html切尔斯基切尔斯基Sun, 23 Dec 2007 15:22:00 GMThttp://www.tkk7.com/chelsea/archive/2007/12/23/169880.htmlhttp://www.tkk7.com/chelsea/comments/169880.htmlhttp://www.tkk7.com/chelsea/archive/2007/12/23/169880.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/169880.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/169880.html基本? 搭徏一个本地的ivy仓库, 包含两g独立的事? 搭徏仓库本n, 和配|如何用这个仓?/p>

仓库本n

Ivy的Repository是由一个个Modulel成? Module则包含自w的artifacts(通常是jar文g)和描q文?

Module的描q文件是ivy的核? 里面记录?jin)这个module包含哪些artifacts和这个module对其它module的依? q样p摸瓜, 牵出所有的依赖?/p>

<ivy-module version="1.0">

<info organisation="your.company" module="your.project" />

<configurations>

<conf name="release" />

<conf name="testing" extends="release" />

</configurations>

<publications>

<artifact name="common" />

<artifact name="client" />

<artifact name="server" />

</publications>

<dependencies defaultconf="release->default">

<dependency name="ant" rev="1.7.0" />

<dependency name="antlr" rev="2.7.6" />

<dependency name="xstream" rev="1.2.2" />

</dependencies>

</ivy-module>

仓库在文件系l上的结? 可以׃自己军_, 只要在用这个仓库时, 把它的布局信息用配|文件描q出来告诉用者就可以?/p>

如何使用q个仓库

基本? 我们借助 Ant 来用ivy, 那么我们需要告?Ant 一些repository相关的信?: Where is the local repository, and How it looks like

<property name="ivy.local.default.root" location="/your/local/ivy/repository/folder" />

<ivy:settings id="ivy.instance" file="${ivy.local.default.root}/ivy.repository.settings.xml" />

那个ivy.repository.settings.xml是来描qrepository的布局?

<ivysettings>

<settings defaultResolver="local" />

<resolvers>

<filesystem name="local" checkmodified="true">

<artifact pattern="${ivy.local.default.root}/[module]/[artifact].jar" />

<artifact pattern="${ivy.local.default.root}/[module]/[artifact]-[revision].jar" />

<ivy pattern="${ivy.local.default.root}/[module]/[module]-dependencies.xml" />

</filesystem>

</resolvers>

</ivysettings>

然后你告?Ant 你的目的依赖和artifacts, Ant可以帮你获得依赖和发布artifacts?/p>

<property name="ivy.dep.file" location="${basedir}/my-module-dependencies.xml" />

<ivy:retrieve />

<!-- retrieve dependencies first, then compile, package, ... then publish-->

<ivy:publish resolver="local" pubrevision="1.0" overwrite="true" forcedeliver="true">

<artifacts pattern="${build.dir}/dist/[artifact].[ext]" />

<artifacts pattern="${basedir}/my-module-dependencies.xml" />

</ivy:publish>

那个my-module-dependencies.xml是你的目的依赖描q符, 事实上ivy也将它看作一个module,和repository里的module一视同? 参考最开始的例子.

Ivy 如何解决我们的问?/h3>

Q: 我的目在开发环境和产品环境有不同的依赖, 怎么?

A: Ivy 提供?configuration" 的概? 在那?font color="#2a00ff" size="2">my-module-dependencies.xml? 你可以ؓ(f)你的module定义development和product两种配置, 可以指定每个artifact隶属于哪个配|? 指定每个dependency属于哪个配置. 注意q是一个递归定义, 因ؓ(f)你依赖的module也有可能定义?jin)多个配|? 你需要指定你依赖于依赖的哪个配置,所以这是一个映? 比如你的产品在运行环境中依赖于spring的品环?

<ivy-module version="1.0">

<info organisation="your.company" module="your.project" />

<configurations>

<conf name="product" />

<conf name="development" />

</configurations>

<dependencies defaultconf="product->default">

<dependency name="spring" rev="1.7.0" conf="release->product" />

<dependency name="antlr" rev="2.7.6" conf="development->debug" />

<dependency name="junit" rev="4.4" conf="development->release" />

</dependencies>

</ivy-module>

ivy 的各个Ant task允许你指定在哪个 configuration 上操? 如ؓ(f)product配置取得所有依?

    <ivy:retrieve conf="product" />

Q: 我的目在开发环境和产品环境有太多相同的依赖, 事实上开发环境包含品环境所有的依赖, 额外再加上junit,jmock{? 如何消除重复的依赖描q呢?

A: Ivy 提供?jin)配|之?"extends" , 也就?l承"的概? 你可以让开发环境的配置l承自品环境的配置, q样可以复用品环境的配置

<configurations>

<conf name="product" />

<conf name="development" extends="product" />

</configurations>

Q: ~省ivyL从缓存(sh)d配置, q样我的依赖配置更新后却得不到反? 怎么止从cache中读取配|?

A: <filesystem name="local" checkmodified="true">



切尔斯基 2007-12-23 23:22 发表评论
]]>RegexBuilder: A DSL for creating regular expression, Request For Commenthttp://www.tkk7.com/chelsea/archive/2007/12/16/168118.html切尔斯基切尔斯基Sun, 16 Dec 2007 13:36:00 GMThttp://www.tkk7.com/chelsea/archive/2007/12/16/168118.htmlhttp://www.tkk7.com/chelsea/comments/168118.htmlhttp://www.tkk7.com/chelsea/archive/2007/12/16/168118.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/168118.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/168118.html

class IP

    include RegexpBuilder

    def less_than_255

        _0_to_100 = repeat(digit(), 1, 2)

        _100_to_200 = "1" + _0_to_100

        _200_to_250 = "2" + either("0-4") + either("0-9")

        _250_to_255 = "25" + either("0-4")

       one_of(_0_to_100, _100_to_200, _200_to_250, _250_to_255)

    end

    def initialize

        @ip_pattern = repeat(group(group(less_than_255()) + literal(".")), 3) + group(less_than_255())

    end

    attr_reader :ip_pattern

end


以上是应?RegexBuilder 书写正则表达式例?IP 地址的一个例?

RegexBuilder 的目的是试图增强正则表达式的可读性和可维护?/p>

RegexBuilder q不是用来取?Regexp ? 而是辅助~写 Regexp 构造函数需要的W一个参?

RegexBuilder 包含?jin)正则表辑ּW号(Anchors/Character Classes/Repetition/Alternation/Grouping)?API 的一一对应, ?one_of => |, either => [], at_least_one => + {?

RegexBuilder q包含了(jin)可以直接使用的一l常见的正则表达? ?IP 地址, Email 地址{?

 

RegexBuilder 使用?jin)Java风格的API而不是Ruby风格的API, ?repeat(3, digit()) 而不?digit(:repeat => 3)

RegexBuilder q没实现Substitutions, ?\0, \1, \& {?

 

安装下蝲

gem install regexbuilder

http://roll-stone.googlecode.com/svn/trunk/RegexBuilder/



切尔斯基 2007-12-16 21:36 发表评论
]]>
CruiseControl Enterprise 最?jng)_?(3) : Configuring CruiseControl the CruiseControl wayhttp://www.tkk7.com/chelsea/archive/2007/11/09/159226.html切尔斯基切尔斯基Thu, 08 Nov 2007 16:57:00 GMThttp://www.tkk7.com/chelsea/archive/2007/11/09/159226.htmlhttp://www.tkk7.com/chelsea/comments/159226.htmlhttp://www.tkk7.com/chelsea/archive/2007/11/09/159226.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/159226.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/159226.html
1, CruiseControl的配|文件check in到版本控制系l中, 以解x(chng)外损坏的问题

2, 使用专门?project"来自动更新配|? 以解x(chng)ơ需要有Z门登录到build server上去更新的瓶颈问?

3, 复用但不依赖于CruiseControl寚w|文件的validation, 以同时获?"L有问题的配置文g被应用到build server的能? ?"q速获知有人check in?jin)有问题的配|的能力"
  阅读全文

切尔斯基 2007-11-09 00:57 发表评论
]]>
CruiseControl Enterprise 最?jng)_?(2) : Keep your dependencies to yourselfhttp://www.tkk7.com/chelsea/archive/2007/10/15/153125.html切尔斯基切尔斯基Mon, 15 Oct 2007 15:13:00 GMThttp://www.tkk7.com/chelsea/archive/2007/10/15/153125.htmlhttp://www.tkk7.com/chelsea/comments/153125.htmlhttp://www.tkk7.com/chelsea/archive/2007/10/15/153125.html#Feedback2http://www.tkk7.com/chelsea/comments/commentRss/153125.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/153125.html阅读全文

切尔斯基 2007-10-15 23:13 发表评论
]]>
CruiseControl Enterprise 最?jng)_?(1) : Publish with a Publisherhttp://www.tkk7.com/chelsea/archive/2007/10/12/152185.html切尔斯基切尔斯基Thu, 11 Oct 2007 16:02:00 GMThttp://www.tkk7.com/chelsea/archive/2007/10/12/152185.htmlhttp://www.tkk7.com/chelsea/comments/152185.htmlhttp://www.tkk7.com/chelsea/archive/2007/10/12/152185.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/152185.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/152185.html
1. 开发者每ơ在自己机器上构建时不需要发? 省时?
2. CruiseControl使用跟开发者相同的构徏脚本, 减少?jin)开发者构建成功而CruiseControl构徏p|的概? 省调试时?
3. CruiseControlq行Publisher时开发者可以l工作了(jin), 提高?sh)(jin)ƈ发? q是省时?nbsp; 阅读全文

切尔斯基 2007-10-12 00:02 发表评论
]]>
jadestone enhanced sax handlers 2.0 发布http://www.tkk7.com/chelsea/archive/2007/06/13/123748.html切尔斯基切尔斯基Tue, 12 Jun 2007 22:35:00 GMThttp://www.tkk7.com/chelsea/archive/2007/06/13/123748.htmlhttp://www.tkk7.com/chelsea/comments/123748.htmlhttp://www.tkk7.com/chelsea/archive/2007/06/13/123748.html#Feedback2http://www.tkk7.com/chelsea/comments/commentRss/123748.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/123748.html介绍: Enhanced SAX Handler :?DOM q简单的 SAX Handler

下蝲: http://code.google.com/p/jade-stone-suite/downloads/list

CZ: http://jade-stone-suite.googlecode.com/svn/trunk/JS.ESax/test/jade/stone/esax/sample/FACupHandler.java





切尔斯基 2007-06-13 06:35 发表评论
]]>
[导入]单至?qing)的AOP和IOChttp://www.tkk7.com/chelsea/archive/2007/06/04/121721.html切尔斯基切尔斯基Sun, 03 Jun 2007 21:27:00 GMThttp://www.tkk7.com/chelsea/archive/2007/06/04/121721.htmlhttp://www.tkk7.com/chelsea/comments/121721.htmlhttp://www.tkk7.com/chelsea/archive/2007/06/04/121721.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/121721.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/121721.html
文章来源:http://blog.csdn.net/wuliaoshengji/archive/2006/03/26/639007.aspx

切尔斯基 2007-06-04 05:27 发表评论
]]>
[导入]Configuration Pattern : 配置模式http://www.tkk7.com/chelsea/archive/2007/06/04/121720.html切尔斯基切尔斯基Sun, 03 Jun 2007 21:27:00 GMThttp://www.tkk7.com/chelsea/archive/2007/06/04/121720.htmlhttp://www.tkk7.com/chelsea/comments/121720.htmlhttp://www.tkk7.com/chelsea/archive/2007/06/04/121720.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/121720.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/121720.html
文章来源:http://blog.csdn.net/wuliaoshengji/archive/2007/05/12/1605465.aspx

切尔斯基 2007-06-04 05:27 发表评论
]]>
[导入]Axis : q去前的备忘http://www.tkk7.com/chelsea/archive/2007/06/04/121719.html切尔斯基切尔斯基Sun, 03 Jun 2007 21:26:00 GMThttp://www.tkk7.com/chelsea/archive/2007/06/04/121719.htmlhttp://www.tkk7.com/chelsea/comments/121719.htmlhttp://www.tkk7.com/chelsea/archive/2007/06/04/121719.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/121719.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/121719.html
文章来源:http://blog.csdn.net/platformlib/archive/2007/03/09/1525377.aspx

切尔斯基 2007-06-04 05:26 发表评论
]]>
Enhanced SAX Handler :?DOM q简单的 SAX Handlerhttp://www.tkk7.com/chelsea/archive/2007/05/22/119021.html切尔斯基切尔斯基Mon, 21 May 2007 21:39:00 GMThttp://www.tkk7.com/chelsea/archive/2007/05/22/119021.htmlhttp://www.tkk7.com/chelsea/comments/119021.htmlhttp://www.tkk7.com/chelsea/archive/2007/05/22/119021.html#Feedback2http://www.tkk7.com/chelsea/comments/commentRss/119021.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/119021.html阅读全文

切尔斯基 2007-05-22 05:39 发表评论
]]>
emma : 试覆盖率低于指标的时候让Ant Build自动p|http://www.tkk7.com/chelsea/archive/2007/05/22/119019.html切尔斯基切尔斯基Mon, 21 May 2007 20:10:00 GMThttp://www.tkk7.com/chelsea/archive/2007/05/22/119019.htmlhttp://www.tkk7.com/chelsea/comments/119019.htmlhttp://www.tkk7.com/chelsea/archive/2007/05/22/119019.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/119019.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/119019.html阅读全文

切尔斯基 2007-05-22 04:10 发表评论
]]>
RegexBuilder: A DSL for creating regular expressionhttp://www.tkk7.com/chelsea/archive/2006/11/24/83322.html切尔斯基切尔斯基Fri, 24 Nov 2006 09:24:00 GMThttp://www.tkk7.com/chelsea/archive/2006/11/24/83322.htmlhttp://www.tkk7.com/chelsea/comments/83322.htmlhttp://www.tkk7.com/chelsea/archive/2006/11/24/83322.html#Feedback2http://www.tkk7.com/chelsea/comments/commentRss/83322.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/83322.html

/* 最新版本请参见 http://www.tkk7.com/chelsea/archive/2007/12/16/168118.html */


找了(jin)半天也没有找到创建正则表辑ּ的DSL, 如果你知道请告诉?/p>

只好先自己写来应急了(jin): http://roll-stone.googlecode.com/svn/trunk/RegexBuilder/

用v来类D? 

require 'regex_builder'  

class RegexBuilderTest < Test::Unit::TestCase

  def setup

    @rb = RegexBuilder. new

  end  

  def test_ruby_start_with_r

    pattern = @rb .start_with( "r" ).to_s

    assert "ruby" .match(pattern)

  end  

  def test_ruby_start_with_r_and_end_with_y

    pattern = @rb .start_with( "r" ).any().end_with( "y" ).to_s

    assert "ruby" .match(pattern)

  end  

end

 

q有一?RegexUtil 来直接提供常用的正则表达? 如email地址,ip地址{?惛_啥都可以往里加

require 'regex_util'  

class RegexUtilTest < Test::Unit::TestCase 

  def test_192_168_0_3_is_a_valid_ip_address

    assert "192.168.0.3" .match(RegexUtil::IP_Pattern)

  end  

  def test_500_312_0_3_is_not_a_valid_ip_address

    assert_nil( "500.312.0.3" .match(RegexUtil::IP_Pattern) )

  end  

  def test_chelsea_at_gmail_dot_com_is_a_valid_email_address

    assert "chelsea@gmail.com" .match(RegexUtil::Email_Pattern)

  end  

  def test_www_dot_google_dot_com_is_not_a_valid_email_address

    assert_nil( "www.google.com" .match(RegexUtil::Email_Pattern) )

  end  

end

 

很多功能都还没提?希望有h一h?/span>



切尔斯基 2006-11-24 17:24 发表评论
]]>
Get Mac Address in Javahttp://www.tkk7.com/chelsea/archive/2006/11/15/81382.html切尔斯基切尔斯基Wed, 15 Nov 2006 13:34:00 GMThttp://www.tkk7.com/chelsea/archive/2006/11/15/81382.htmlhttp://www.tkk7.com/chelsea/comments/81382.htmlhttp://www.tkk7.com/chelsea/archive/2006/11/15/81382.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/81382.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/81382.html

 (tng)

基本目前没有UJava的API来访问硬件信?以后或许?x)有?谁知?/font>

对Mac地址的需求部分来自UUID, 另有很大部分来自License Management,q真是一件无聊的事情,希望以后软g卖的都是服务,不是拯,省却q些ȝ(ch)

 (tng)

搜了(jin)一?大体有三c解军_?/font>

1, JDK6, JDK7 ?

详情可参见以下链?/font> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4691932

2, Shell Command

是截取 ipconfig, (tng) ifconfig {命令的输出,然后解析

有一些开源项?? http://sourceforge.net/projects/javanetcomm/

q有很多代码片断,? http://forum.java.sun.com/thread.jspa?threadID=61556,  (tng)http://forum.java.sun.com/thread.jspa?threadID=245711

q种Ҏ(gu)的缺Ҏ(gu)有可能需要较高的pȝ权限才能执行q些命o(h)或者访问网卡硬?/span>

3, JNI

也有开源项目包含了(jin)q个功能, ? http://jug.safehaus.org/

~点是不方便部v

 (tng)

然而不是所有的|络都是Ethernet, 对License Management来说Mac地址只是更ؓ(f)generic的概?Host Id"的一U考量因素.



切尔斯基 2006-11-15 21:34 发表评论
]]>
WS-Security Practicehttp://www.tkk7.com/chelsea/archive/2006/08/31/66958.html切尔斯基切尔斯基Thu, 31 Aug 2006 14:58:00 GMThttp://www.tkk7.com/chelsea/archive/2006/08/31/66958.htmlhttp://www.tkk7.com/chelsea/comments/66958.htmlhttp://www.tkk7.com/chelsea/archive/2006/08/31/66958.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/66958.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/66958.html阅读全文

切尔斯基 2006-08-31 22:58 发表评论
]]>
Essential Vitria BusinessWarehttp://www.tkk7.com/chelsea/archive/2006/05/28/48645.html切尔斯基切尔斯基Sun, 28 May 2006 15:44:00 GMThttp://www.tkk7.com/chelsea/archive/2006/05/28/48645.htmlhttp://www.tkk7.com/chelsea/comments/48645.htmlhttp://www.tkk7.com/chelsea/archive/2006/05/28/48645.html#Feedback0http://www.tkk7.com/chelsea/comments/commentRss/48645.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/48645.html

 (tng)

对BusinessWare的用告一D落Qȝ一?/p>

 (tng)

 (tng)Vitria BusinessWare: 事g与端?/a>Q摘要:(x)Vitria BusinessWare: Event and Port (tng) (tng) (tng) (tng)Q全文共3431字)(j)——点?a target="_blank" >此处阅读全文

 (tng)

 (tng)Vitria BusinessWare: Web ServicesQ摘要:(x)BusinessWare既可以作为WebService客户端调用其它应用发布的WebServiceQ又可以作ؓ(f)WebService服务端,整个流E模型发布ؓ(f)WebServiceQ供其它应用调用Q而这一切都可以在徏模工具BME中通过可视化的界面和向?Wizard)来方便的完成  (tng) (tng) (tng) (tng)Q全文共6580字)(j)——点?a target="_blank" >此处阅读全文

 (tng)

 (tng)Vitria BusinessWare: q_与Y件ȝQ?/a>摘要QBusinessWare中SOA的成分越来越多?tng) (tng) (tng) (tng)(全文?205字)(j)——点?a target="_blank" >此处阅读全文

 (tng)

 (tng)Vitria BusinessWare: 存储与访问安?/a>Q摘要:(x)事实上,BusinessWare使用LDAP做ؓ(f)存储机制和安全机制?tng) (tng) (tng) (tng)(全文?2865字)(j)——点?a target="_blank" >此处阅读全文

 (tng)

 (tng)Beyond Workflow : An Introduction to Vitria BusinessWareQ摘要:(x)BusinessWare是一ƾ企业应用集?EAI)软gQ更加注重“系l”间的交互,传统工作只是它的一Ҏ(gu)通功能而已Q? BusinessWareq是一Ƒ֏扩展的YӞ对于已知的未知的pȝ/协议Q它提供可单独配|的部g(Connector/Proxy)来对接,因此Q? BusinessWare可以看作企业现有pȝ间的ȝ/E控交换机?tng) (tng) (tng) (tng)(全文?505字)(j)——点?a target="_blank" >此处阅读全文
 (tng)



切尔斯基 2006-05-28 23:44 发表评论
]]>
Essential Web Services: SOAP, WSDL, UDDIhttp://www.tkk7.com/chelsea/archive/2006/05/25/47919.html切尔斯基切尔斯基Wed, 24 May 2006 16:07:00 GMThttp://www.tkk7.com/chelsea/archive/2006/05/25/47919.htmlhttp://www.tkk7.com/chelsea/comments/47919.htmlhttp://www.tkk7.com/chelsea/archive/2006/05/25/47919.html#Feedback9http://www.tkk7.com/chelsea/comments/commentRss/47919.htmlhttp://www.tkk7.com/chelsea/services/trackbacks/47919.html2. WSDL: ?Runtime 无关
3. WSDL-SOAP Binding Style
4. UDDIQ与 WSDL 无关
5. UDDIQ与WSDL 有关
6. JAX-RPC: 首先是Java,其次才是RPC   阅读全文

切尔斯基 2006-05-25 00:07 发表评论
]]>
IBM JDK 不兼?Sun JDK 备忘?/title><link>http://www.tkk7.com/chelsea/archive/2006/02/22/32011.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Wed, 22 Feb 2006 12:31:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2006/02/22/32011.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/32011.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2006/02/22/32011.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/32011.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/32011.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.tkk7.com/chelsea/archive/2006/02/22/32011.html'>阅读全文</a><img src ="http://www.tkk7.com/chelsea/aggbug/32011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2006-02-22 20:31 <a href="http://www.tkk7.com/chelsea/archive/2006/02/22/32011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE Connector Architecture 备忘?/title><link>http://www.tkk7.com/chelsea/archive/2006/01/12/27692.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Thu, 12 Jan 2006 03:22:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2006/01/12/27692.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/27692.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2006/01/12/27692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/27692.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/27692.html</trackback:ping><description><![CDATA[<H3>I. Questions before reading the specification, and Answers after reading the specification.</H3> <P>1. How the application call EIS functions to execute task or get data from EIS via JCA RA/Connector?</P> <UL> <LI>This is addressed by <B>Common Client Interface</B>, it involves "Interaction", "InteractionSpec", "Record" and other interfaces to do this work. <LI>It is a Command Design Pattern </LI></UL> <P>2. and on the other hand ?</P> <UL> <LI>This is addressed by <B>Message Inflow Contract</B> and <B>EJB Client View Model</B> together. It involves a MDB to dispatch invocation to application components. </LI></UL> <P>3. CCI is a protocol between Resource Adaptor and EAI tools ? </P> <UL> <LI>You can understand it as this. CCI is so low level so that it is targeted primarily towards application development tools and EAI frameworks. </LI></UL> <P>4. How the ActivationSpec get associated with MDB instance ?</P> <UL> <LI>At deployment time, it is the deployer to associate ActivationSpec instance with MDB. <LI>At Runtime, it is the Resource Adapter to associate ActivationSpec instance with MDB insatnce while the application server calls endpointActivation(MessageEndpointFactory, ActivationSpec) </LI></UL> <P> </P> <H3>II. Notes</H3> <P>1. Overview</P> <TABLE id=table7 width="100%" border=1> <TBODY> <TR> <TD>Roles: J2EE application, J2EE AppServer, Resource Adaptor, EIS, and their provider <P>The target audience for this specification includes:</P> <UL> <LI>EIS vendors and resource adapter providers <LI>Messaging system vendors <LI>Application server vendors and container providers <LI>Enterprise application developers and system integrators <LI>Enterprise tool and EAI vendors </LI></UL> <P>The system-level contracts between an application server and an EIS are targeted towards EIS vendors (or resource adapter providers, if the two roles are different) and application server vendors. The CCI is targeted primarily towards enterprise tools and EAI vendors.</P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table34 width="100%" border=1> <TBODY> <TR> <TD>JCA is a standard between EIS and J2EE Application <FONT color=#ff0000>Server</FONT> rather than a standard between EIS and J2EE Application, for the standard defined fixed approach for any EIS plugged into any Application <FONT color=#ff0000>Server</FONT>, while it allowed custom interface defined between Application and Resource Adaptor, i.e. EIS. <P>Reference: "<I><FONT color=#ff0000>This document begins by describing the rationale and goals for creating a standard architecture to integrate an application server with multiple heterogeneous EISs.</FONT></I>" <P>An application server and an EIS collaborate to keep all system-level mechanisms—transactions, security, and connection management—transparent from the application components.</P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table35 width="100%" border=1> <TBODY> <TR> <TD>Connector Architecture------An architecture for integrating J2EE servers with EISs. There are two parts to this architecture: an EIS vendor-provided resource adapter and an application server that allows this resource adapter to be plugged in. This architecture defines a set of contracts (such as transactions, security, connection management) that a resource adapter has to support to plug in to an application server. These contracts support bi-directional communication (outbound and inbound) between an application server and an EIS via a resource adapter. That is, the application server may use the resource adapter for outbound communication to the EIS, and it may also use the resource adapter for inbound communication from the EIS.</TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table39 width="100%" border=1> <TBODY> <TR> <TD><FONT color=#ff0000>The "Inbound/Outbound" is refer to direction between application and resource adapter, not resource adapter and EIS.</FONT> <P><FONT color=#ff0000>In fact, almost all contracts are between application server and resource adapter, or between application and resource adapter, the contracts between resource adapter and EIS is private, or vendor-specified.</FONT></P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table40 width="100%" border=1> <TBODY> <TR> <TD>The resource adapter lists the types of message listener that it supports. The J2EE Connector Architecture version 1.5 and the EJB version 2.1 specifications do not restrict message listeners to using the JMS API. <P><FONT color=#ff0000>That means, MDB need not be related with JMS, in fact, MDB is related with Resource Adaptor.</FONT></P></TD></TR></TBODY></TABLE> <P> </P> <P>2. Contracts</P> <TABLE id=table4 width="100%" border=1> <TBODY> <TR> <TH>Contract</TH> <TH>The two parties</TH> <TH>Goals</TH></TR> <TR> <TD>Lifecycle management contract</TD> <TD>application server and resource adapter</TD> <TD>allows an application server to manage the lifecycle of a resource adapter</TD></TR> <TR> <TD>Work management contract</TD> <TD>application server and resource adapter</TD> <TD>allows a resource adapter to do work (monitor network endpoints, call application components, etc.) by submitting Work instances to an application server for execution</TD></TR> <TR> <TD>Transaction inflow contract</TD> <TD>application server and resource adapter</TD> <TD>allows a resource adapter to propagate an imported transaction to an application server.</TD></TR> <TR> <TD>Message inflow contract</TD> <TD>application server and resource adapter</TD> <TD>allows a resource adapter to asynchronously deliver messages to message endpoints residing in the application server. This contract also serves as the standard message provider pluggability contract that allows a wide range of message providers to be plugged into any J2EE compatible application server via a resource adapter</TD></TR></TBODY></TABLE> <P> </P> <P>3. CCI</P> <TABLE id=table36 width="100%" border=1> <TBODY> <TR> <TD>Rather than using CCI directly, developers will use EIS specific tools which based on CCI to access EIS, such as JDBC API, JMS API <P>The JDBC interfaces—javax.sql.DataSource, java.sql.Connection—are examples of non-CCI connection factory and connection interfaces. Note that the methods defined on a non-CCI interface are not required to throw a ResourceException. The exception can be specific to a resource adapter, for example: java.sql.SQLException for JDBC interfaces.</P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table10 width="100%" border=1> <TBODY> <TR> <TD>Client API------The client API used by application components for EIS access may be defined as: The standard Common Client Interface (CCI) <P>A client API specific to the type of a resource adapter and its underlying EIS. An example of such an EIS specific client API is JDBC for relational databases. The Common Client Interface (CCI) defines a common client API for accessing EISs.<BR>The CCI is targeted towards Enterprise Application Integration (EAI) and enterprise tools vendors.</P></TD></TR></TBODY></TABLE> <P> </P> <P>4. Resource Adapter</P> <TABLE id=table11 width="100%" border=1> <TBODY> <TR> <TD>The ResourceAdapter JavaBean represents a resource adapter instance and contains the configuration information pertaining to that resource adapter instance. This configuration information may also be used as global defaults for ManagedConnectionFactory and ActivationSpec JavaBeans. That is, when ManagedConnectionFactory or ActivationSpec JavaBeans are created they may inherit the global defaults (ResourceAdapter JavaBean configuration information), which make it easier to configure them. A resource adapter instance may provide bi-directional connectivity to multiple EIS instances. A ManagedConnectionFactory JavaBean can be used to provide outbound connectivity to a single EIS instance. An ActivationSpec JavaBean can be used to provide inbound connectivity from an EIS instance. A resource adapter instance may contain several such ManagedConnectionFactory and ActivationSpec JavaBeans. <P>from perspective of Application:</P> <P>ManagedConnectionFactory : 送站通道</P> <P>ActivationSpec : 接站通道</P> <P>ResourceAdaptor JavaBean is not full-functional Resource Adaptor, it must combine with ManagedConnectionFactory JavaBean, ActivationSpec JavaBean and other JavaBeans to serve as a full-functional Resource Adaptor</P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table12 width="100%" border=1> <TBODY> <TR> <TD>The CCI defines javax.resource.cci.ConnectionFactory and javax.resource.cci.Connection as interfaces for a connection factory and a connection, respectively. <P>The connection factory instance delegates the connection creation request to the <FONT color=#ff0000>ConnectionManager</FONT> instance.</P> <P>The <FONT color=#ff0000>ConnectionManager</FONT> instance, on receiving a connection creation request from the connection factory, does a lookup in the connection pool provided by the application server. If there is no connection in the pool that can satisfy the<BR>connection request, the application server uses the <FONT color=#ff0000>ManagedConnectionFactory </FONT>interface (implemented by the resource adapter) to create a new physical connection to the underlying EIS.</P> <P>The application server registers a <FONT color=#ff0000>ConnectionEventListener</FONT> with the<FONT color=#ff0000> ManagedConnection</FONT> instance. This listener enables the application server to get event notifications related to the state of the ManagedConnection instance.</P> <P>The application server uses the ManagedConnection instance to get a connection instance that acts as an application-level handle to the underlying physical connection. An instance of type <FONT color=#ff0000>javax.resource.cci.Connection </FONT>is an example<BR>of such a connection handle. An application component uses the connection handle to access EIS resources.</P> <P><FONT color=#ff0000>The circuitous route is for reusing application server provided services, such as transaction management, security, error logging and tracing, and connection pool management.</FONT></P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table13 width="100%" border=1> <TBODY> <TR> <TD>In the JDBC architecture, an application server provides the implementation of javax.sql.DataSource interface. Using a similar design approach for the connector architecture would have required an application server to provide implementations of various connection factory interfaces defined by different resource adapters. Since the connection factory interface may be defined as specific to an EIS, the application server may find it difficult to provide implementations of connection factory interfaces without any code generation. <P>The connection factory implementation class delegates the getConnection method invocation from an application component to the associated ConnectionManager instance. The ConnectionManager instance is associated with a connection factory<BR>instance at its instantiation </P> <P>Note that the connection factory implementation class must call the ConnectionManager.allocateConnection method in the same thread context in which the application component had called the getConnection method.</P> <P>A resource adapter must provide a default implementation of the javax.resource.spi.ConnectionManager interface. The implementation class comes into play when a resource adapter is used in a non-managed two-tier application scenario. In an application server-managed environment, the resource adapter must not use the default ConnectionManager implementation class.</P></TD></TR></TBODY></TABLE> <P> </P> <P>5. Transaction</P> <TABLE id=table15 width="100%" border=1> <TBODY> <TR> <TD>The ERP system supports JTA transactions by implementing a XAResource interface through its resource adapter. The TP system also implements an XAResource interface. This interface enables the two resource managers to participate in<BR>transactions that are coordinated by an external transaction manager. The transaction manager uses the XAResource interface to manage transactions across the two underlying resource managers.</TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table16 width="100%" border=1> <TBODY> <TR> <TD>If multiple resource managers participate in a transaction, the EJB container uses a transaction manager to coordinate the transaction. The contract between the transaction manager and resource manager is defined using the XAResource<BR>interface. If a single resource manager instance participates in a transaction (either componentmanaged or container-managed), the container has two choices: <UL> <LI>It uses the transaction manager to manage this transaction. The transaction manager uses one-phase commit-optimization to coordinate the transaction for this single resource manager instance. <LI>The container lets the resource manager coordinate this transaction internally without involving an external transaction manager. </LI></UL></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table17 width="100%" border=1> <TBODY> <TR> <TD>The Java Transaction API (JTA) is a specification of interfaces between a transaction manager and the other parties involved in a distributed transaction processing system: application programs, resource managers, and an application<BR>server. <P>The Java Transaction Service (JTS) API is a Java binding of the Common Object Request Broker Architecture (CORBA) Object Transaction Service (OTS) 1.1 specification. JTS provides transaction interoperability using the standard Internet<BR>Inter-ORB Protocol (IIOP) for transaction propagation between servers. The JTS API is intended for vendors who implement transaction processing infrastructure for enterprise middleware. For example, an application server vendor can use a JTS<BR>implementation as the underlying transaction manager.</P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table18 width="100%" border=1> <TBODY> <TR> <TD>The interface ManagedConnection defines method associateConnection as follows: <P>public interface javax.resource.spi.ManagedConnection {<BR>    public void associateConnection(Object connection) throws ResourceException;<BR>    ...<BR>}</P> <P>The container uses the associateConnection method to change the association of an application-level connection handle with a ManagedConnection instance. The container finds the right ManagedConnection instance, depending on the connection sharing scope, and calls the associateConnection method. To achieve this, the container needs to keep track of connection handles acquired by component instances and ManagedConnection instances using an implementation-specific mechanism.</P> <P>The associateConnection method implementation for a ManagedConnection should dissociate the connection handle passed as a parameter from its currently associated ManagedConnection and associate the new connection handle with itself.</P> <P>Note that the switching of connection associations must happen only for connection handles and ManagedConnection instances that correspond to the same ManagedConnectionFactory instance. The container should enforce this restriction<BR>in an implementation-specific manner. If a container cannot enforce the restriction, the container should not use the connection association mechanism.</P> <P>The resource adapter must implement the associateConnection method to support connection sharing. The container makes a decision on whether or not to use the associateConnection method implemented by a resource adapter.</P></TD></TR></TBODY></TABLE> <P> </P> <P>6. Security</P> <TABLE id=table19 width="100%" border=1> <TBODY> <TR> <TD>If the res-auth element is set to Application, the component code performs a programmatic sign-on to the EIS. <P>If the res-auth element is Container, the application server takes on the responsibility of setting up and managing EIS sign-on.</P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table20 width="100%" border=1> <TBODY> <TR> <TD>This security contract supports EIS sign-on by: <UL> <LI>Passing the connection request from the resource adapter to the application server, enabling the application server to hook-in security services. <LI>Propagation of the security context, that is, JAAS Subject with principal and credentials, from the application server to the resource adapter. </LI></UL></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table21 width="100%" border=1> <TBODY> <TR> <TD>The application server has the following options for invoking the createManagedConnection method: <P>Option A: The application server invokes the createManagedConnection method by passing in a non-null Subject instance that carries a single resource principal and its corresponding password-based credentials, represented by the class PasswordCredential that provides the user name and password. The PasswordCredential should be set in the Subject instance as part of the private credential set. Note that the passed Subject can contain multiple PasswordCredential instances.<BR>The resource adapter extracts the username and password from this Subject instance by looking for the PasswordCredential instance in the Subject, and uses this security information to sign-on to the EIS instance during connection creation.</P> <P>Option B: The application server invokes the createManagedConnection method by passing in a non-null Subject instance that carries a single resource principal and its security credentials. In this option, credentials are represented through the GSSCredential interface. A typical example is a Subject instance with Kerberos credentials. For example, an application server may use this option for createManagedConnection method invocation when the resource principal is<BR>impersonating the caller or initiating principal, and has valid credentials acquired through impersonation. An application server may also use this option for principal mapping scenarios with credentials of a resource principal represented through the GSSCredential interface. Note that sensitive credentials requiring special protection, such as private cryptographic keys, are stored within a private credential set, while credentials intended to be shared, such as public key certificates or Kerberos server tickets, are stored within a public credential set. The two methods<BR>getPrivateCredentials and getPublicCredentials should be used accordingly. In the case of Kerberos mechanism type, the application server must pass the principal’s ticket granting ticket (TGT) to a resource adapter in a private credential set. The resource adapter uses the resource principal and its credentials from the Subject instance to go through the EIS sign-on process before creating a new connection to the EIS.</P> <P>Option C: The application server invokes the createManagedConnection method by passing a null Subject instance. The application server must use this option for the component-managed sign-on case. In this option, security information is carried in the ConnectionRequestInfo instance. The application server does not provide any security information that can be used by the resource adapter for managing EIS sign-on. During the deployment of a resource adapter, the application server must be configured to use one of the above specified invocation options.</P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table22 width="100%" border=1> <TBODY> <TR> <TD>A resource adapter can do EIS sign-on and connection creation in an implementation-specific way, or it can use the GSS-API. A resource adapter has the following options, corresponding to the options for an application server, for handling the invocation of the createManagedConnection method: <P>Option A: The resource adapter explicitly checks whether the passed Subject instance carries a PasswordCredential instance using the Subject.getPrivateCredentials method. Note that the security contract assumes that a resource adapter has the necessary security permissions to extract a private credential set from a Subject instance. The specific mechanism through which such permission is set up is outside the scope of the connector architecture. If the Subject instance contains a PasswordCredential instance, the resource adapter extracts the username and password from the PasswordCredential. It uses the security information to authenticate the resource principal, corresponding to the username, to the EIS during the creation of a connection. In this case, the resource adapter uses an authentication mechanism that is EIS specific. Since a Subject instance can carry multiple PasswordCredential instances, a ManagedConnectionFactory should only use a PasswordCredential instance that has been specifically passed to it through the security contract. The getManagedConnectionFactory method enables a ManagedConnectionFactory instance to determine whether or not a PasswordCredential instance is to be used for sign-on to the target EIS instance. The ManagedConnectionFactory implementation uses the equals method to compare itself with the passed instance.</P> <P>Option B: The resource adapter explicitly checks whether the passed Subject instance carries a GSSCredential instance using the getPrivateCredentials and getPublicCredentials methods defined in the Subject interface. In the case of Kerberos mechanism type, the resource adapter must extract Kerberos credentials using the getPrivateCredentials method in the Subject interface. The resource adapter uses the resource principal and its credentials, represented by the GSSCredential interface, in the Subject instance to go through the EIS sign-on process. For example, this option is used for Kerberos-based credentials that have been acquired by the resource principal through impersonation. A resource adapter uses the getter methods defined in the GSSCredential interface to extract information about the credential and its principal. If a resource adapter is using the GSS mechanism, the resource adapter uses a reference to the GSSCredential instance in an opaque manner and is not required to understand any mechanism-specific credential representation. However, a resource adapter may need to interpret credential representation if the resource adapter initiates authentication in an implementation-specific manner.</P> <P>Option C: If the application server invokes the ManagedConnectionFactory.createManagedConnection method with a null Subject instance, a resource adapter has the following options: The resource adapter should extract security information passed through the ConnectionRequestInfo instance. The resource adapter should authenticate the resource principal by combining the configured security information on the ManagedConnectionFactory instance with the security information passed through the ConnectionRequestInfo instance. The default behavior for the resource adapter is to allow the security information in the ConnectionRequestInfo parameter to override the configured security information in the ManagedConnectionFactory instance. If the resource adapter does not find any security configuration in the ConnectionRequestInfo instance, the resource adapter uses the default security configuration in the ManagedConnectionFactory instance. If the EIS does not require authentication, the resource adapter does not need any security information from the ConnectionRequestInfo instance, and hence may ignore such security information. This may happen due to a disconnect between the application and the resource adapter.</P></TD></TR></TBODY></TABLE> <P> </P> <P>7. Activation</P> <TABLE id=table41 width="100%" border=1> <TBODY> <TR> <TD>An ActivationSpec JavaBean instance encapsulates the configuration information needed to setup asynchronous message delivery to a message endpoint. <P>Each ActivationSpec can also specify a list of required properties. These required properties can be used to validate the configuration of an ActivationSpec JavaBean instance.</P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table23 width="100%" border=1> <TBODY> <TR> <TD>The message-driven bean developer provides activation configuration information in the message-driven bean deployment descriptor. This includes messaging style specific configuration details, and possibly message provider-specific details as well, which is used by the message-driven bean deployer to setup the activation.</TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table24 width="100%" border=1> <TBODY> <TR> <TD>The resource adapter provides the following information via the resource adapter deployment descriptor that is used by the endpoint deployer to setup endpoint activation: <UL> <LI>List of Supported Message Listener Types <LI>ActivationSpec JavaBean <LI>Administered Objects </LI></UL></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table25 width="100%" border=1> <TBODY> <TR> <TD>The endpoint application’s activation-config properties, specified in the endpoint deployment descriptor, should be a subset of the ActivationSpec JavaBean’s properties. There must be a one-to-one correspondence between the activation-config property names and the ActivationSpec JavaBean’s property names. This allows automatic merging of the activation-config properties with an ActivationSpec JavaBean instance during endpoint deployment. Any specified activation-config property which does not have a matching property in the ActivationSpec JavaBean should be treated as an error.</TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table27 width="100%" border=1> <TBODY> <TR> <TH>Activation Spec Value Priority</TH> <TH>Activation Spec Value Position</TH></TR> <TR> <TD align=middle>Highest</TD> <TD>MDB Configured Deployment Descriptor</TD></TR> <TR> <TD align=middle> </TD> <TD>MDB Default Deployment Descriptor(Merged ActivationSpec Bean)</TD></TR> <TR> <TD align=middle> </TD> <TD>Configured ActivationSpec Bean</TD></TR> <TR> <TD align=middle>Lowest</TD> <TD>Default ActivationSpec Bean</TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table42 width="100%" border=1> <TBODY> <TR> <TD>Before any messages can be delivered to a message endpoint, the message endpoint must be associated with a destination. This task is performed during application installation. Therefore, the responsibility of associating a message-driven bean with a destination lies with the application deployer. The application deployer creates an instance of the ActivationSpec JavaBean for the relevant resource adapter and associates it with the message endpoint during installation. In this way an ActivationSpec JavaBean, through its destination property, associates a message endpoint with a destination on the message provider. <P>A message endpoint is activated by the application server when the message endpoint application is started. During message endpoint activation, the application server passes the ActivationSpec JavaBean, and a reference to the<BR>MessageEndpointFactory, to the resource adapter by invoking its endpointActivation method.</P> <P>The resource adapter uses the information in the ActivationSpec JavaBean to interact with messaging provider and setup message delivery to the message endpoint. For a JMS message-driven bean, this might involve configuring a<BR>message selector or a durable subscription against the destination. Once the endpointActivation method returns, the message endpoint is ready to receive messages.</P> <P>The following steps describe the sequence of events that occur when a message arrives at a destination:</P> <OL> <LI>The resource adapter detects the arrival of a message at the destination. <LI>The resource adapter invokes the createEndpoint method on the MessageEndpointFactory. <LI>The MessageEndpointFactory obtains a reference to a message endpoint. This might be an unused message endpoint obtained from a pool or, if no message endpoints are available, it can create a new message endpoint. <LI>The MessageEndpointFactory returns a proxy to this message endpoint instance to the resource adapter. <LI>The resource adapter uses the message endpoint proxy to deliver the message to the message endpoint. </LI></OL> <P>Several other messaging providers exist that require similar functionality to message-driven beans within the EJB container, such as the Java API for XML Messaging (JAXM). Because of this, version 2.1 of the EJB specification expanded the definition of message-driven beans to provide support for messaging providers other than JMS providers. It does this by allowing a message-driven bean to implement an interface other than the javax.jms.MessageListener interface. The type of message listener interface that a message-driven bean implements determines its type.</P> <P>The EJB specification states that, if the message listener interface supports the request-reply pattern in this manner, it is the responsibility of the EJB container to deliver the reply message to the resource adapter.</P></TD></TR></TBODY></TABLE> <P> </P> <P>8. Work</P> <TABLE id=table38 width="100%" border=1> <TBODY> <TR> <TD>Note that, rather than calling the MessageEndpointFactory directly, the resource adapter is likely to instantiate a Work object, and pass it to the application server via the WorkManager interface. When the doWork method of the WorkManager is called the dispatch will occur. This will allow the resource adapter to continue to process incoming messages without blocking until message-driven bean dispatch has completed.</TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table28 width="100%" border=1> <TBODY> <TR> <TD>The resource adapter can use the message inflow contract to call a message-driven bean, and use the message-driven bean to dispatch calls to session and entity beans using the EJB client view model. The EJB specification allows a request-response style message-driven bean call which could be used for synchronous RPC-style calls. The message-driven bean could be packaged either with the resource adapter or separately.</TD></TR></TBODY></TABLE> <P> </P> <P>9. CCI</P> <TABLE id=table29 width="100%" border=1> <TBODY> <TR> <TD>The CCI is designed with the following goals: <UL> <LI>It is targeted primarily towards application development tools and EAI frameworks, not application component. <LI>It defines a remote function-call interface that focuses on executing functions on an EIS and retrieving the results. The CCI can form a base level API for EIS access on which higher level functionality can be built. <LI>Although it is simple, it has sufficient functionality and an extensible application programming model. <LI>It provides an API that both leverages and is consistent with various facilities defined by the J2SE and J2EE platforms. <LI>It is independent of a specific EIS. For example, it does not use data types specific to an EIS. However, the CCI can be capable of being driven by EIS-specific metadata from a repository. </LI></UL> <P>An important goal for the CCI is to complement existing standard JDBC API and not to replace this API. The CCI defines a common client API that is parallel to the JDBC for EISs that are not relational databases.</P> <P>An EAI or application development tool uses a metadata repository to drive CCIbased interactions with heterogeneous EISs. A repository may maintain meta information about functions, with type mapping information and data structures for the invocation parameters, existing on an EIS system.</P> <P>The application development tool generates Java classes based on the meta information accessed from a metadata repository. These Java classes encapsulate CCI-based interactions and expose a simple application programming model, typically based on the JavaBeans framework, to the application developers. An application component uses the generated Java classes for EIS access. <P>The application programming model for a <B><I>Record</I></B> is as follows: <UL> <LI>A component creates an instance of a generated implementation class for a custom record. The implementation class represents an EIS-specific data structure. <LI>A component uses the RecordFactory interface to create an instance of the generic Record implementation class. The implementation class of a generic Record is independent of any EIS-specific data structure. </LI></UL> <P>In cases of both custom and generic Records, the type mapping information is provided by a metadata repository either at development-time or runtime.</P></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table30 width="100%" border=1> <TBODY> <TR> <TD>It is important to note that the properties passed through the getConnection method should be client-specific, such as username, password, and language, and not be related to the configuration of a target EIS instance, such as port number or server name. The ManagedConnectionFactory instance is configured with a complete set of properties required for the creation of a connection to an EIS instance. Configured properties on a ManagedConnectionFactory can be overridden by client-specific properties passed by an application component through the getConnection method. <P>An important point to note is about the relationship between ConnectionSpec and ConnectionRequestInfo. The ConnectionSpec is used at the application level and is defined under the scope of CCI while ConnectionRequestInfo is defined as part of the system contracts. Separate interfaces have been defined to ensure the separation between CCI interfaces and system contracts. ConnectionRequestInfo has no explicit dependency on CCI. Note that a resource adapter may not implement CCI but it must implement system contracts. The specification of a standard repository API and metadata format is outside the scope of the current version of the connector architecture. The mapping between CCI’s ConnectionSpec and ConnectionRequestInfo is achieved in an implementation-specific manner by a resource adapter.</P></TD></TR></TBODY></TABLE> <P> </P> <P>10. Deployment</P> <TABLE id=table31 width="100%" border=1> <TBODY> <TR> <TD>When a standalone resource adapter RAR is deployed, the resource adapter must be made available to all J2EE applications in the application server. When a resource adapter RAR packaged within a J2EE application EAR is deployed, the resource adapter must be made available only to the J2EE application with which it is packaged.</TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table32 width="100%" border=1> <TBODY> <TR> <TD>The deployment code retrieves the configuration properties from the XML deployment descriptor for the resource adapter. The deployment code then creates an instance of the ManagedConnectionFactory implementation class and configures the properties of the instance. <P>The deployment code uses the ManagedConnectionFactory instance to create a connection factory instance. The code then registers the connection factory instance in the JNDI namespace.</P> <P>The following steps occur when an application component calls the method JNDI Context.lookup to lookup a connection factory instance:</P> <UL> <LI>JNDI passes control to the application server. The ObjectFactory.getObjectInstance method implemented by the application server is called. <LI>The application server creates a new instance of the ManagedConnectionFactory implementation class provided by the resource adapter. <LI>The application server calls setter methods on the ManagedConnectionFactory instance to set various configuration properties of this instance. These properties provide information required by the ManagedConnectionFactory instance to<BR>create physical connections to the underlying EIS. The application server uses an existing property set configured during the deployment of a resource adapter to set the required properties of the ManagedConnectionFactory instance. <LI>After the newly created ManagedConnectionFactory instance has been configured with its properties set, the application server creates a new ConnectionManager instance. <LI>The application server calls the createConnectionFactory method of the ManagedConnectionFactory instance, passing in the ConnectionManager instance from the previous step, to get a ConnectionFactory instance. <LI>The application server returns the connection factory instance to the JNDI provider, so that this instance can be returned as a result of the JNDI lookup. The application component gets the ConnectionFactory instance as a result of the<BR>JNDI lookup. </LI></UL></TD></TR></TBODY></TABLE> <P> </P> <TABLE id=table37 width="100%" border=1> <TBODY> <TR> <TD>ra.xml specify ManagedConnectionFactory-->Application Server Reflect-->associate ConnectionManager-->invoke createConnectionFactory to get cci.ConnectionFactory cccf-->client invoke cccf.getConnection-->delegate to ConnectionManager.allocateConnection-->hook service-->delegate to ManagedConnectionFactory.createConnection</TD></TR></TBODY></TABLE><img src ="http://www.tkk7.com/chelsea/aggbug/27692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2006-01-12 11:22 <a href="http://www.tkk7.com/chelsea/archive/2006/01/12/27692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebSphere Application Server V6 备忘?/title><link>http://www.tkk7.com/chelsea/archive/2005/12/28/25789.html</link><dc:creator>切尔斯基</dc:creator><author>切尔斯基</author><pubDate>Wed, 28 Dec 2005 14:07:00 GMT</pubDate><guid>http://www.tkk7.com/chelsea/archive/2005/12/28/25789.html</guid><wfw:comment>http://www.tkk7.com/chelsea/comments/25789.html</wfw:comment><comments>http://www.tkk7.com/chelsea/archive/2005/12/28/25789.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/chelsea/comments/commentRss/25789.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/chelsea/services/trackbacks/25789.html</trackback:ping><description><![CDATA[     摘要: 1. WebSphere with Optimizeit <br>2. WebSphere with DataSource <br>3. WebSphere with JVM Arguments <br>4. WebSphere with Default JMS Provider, JCA, and SIB <br>5. WebSphere with MQSeries <br>6. WebSphere with JNDI <br>7. Misc   <a href='http://www.tkk7.com/chelsea/archive/2005/12/28/25789.html'>阅读全文</a><img src ="http://www.tkk7.com/chelsea/aggbug/25789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/chelsea/" target="_blank">切尔斯基</a> 2005-12-28 22:07 <a href="http://www.tkk7.com/chelsea/archive/2005/12/28/25789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://zp0533.com" target="_blank">AVվ߹ۿ </a>| <a href="http://wdjiuye.com" target="_blank">պaëƬa </a>| <a href="http://kwknc.com" target="_blank">þҹɫƷa</a>| <a href="http://66keke.com" target="_blank">av</a>| <a href="http://s4lm0x.com" target="_blank">˳ɵӰ߹ۿɫ</a>| <a href="http://tskes.com" target="_blank">avһ</a>| <a href="http://cxljdz.com" target="_blank">С˵ͼƬQVOD</a>| <a href="http://www-533999.com" target="_blank">վWWW߹ۿ</a>| <a href="http://yangguang882.com" target="_blank">˳ۺ </a>| <a href="http://jlzjjy.com" target="_blank">ѾþþƷƬ㽶</a>| <a href="http://ac839.com" target="_blank">AƵվ</a>| <a href="http://gdjiayou.com" target="_blank">ȫɫƴɫƬѾþ</a>| <a href="http://wwwbi757.com" target="_blank">Ů18ëƬaëƬ</a>| <a href="http://a8g8.com" target="_blank">ƷɫҹƵѿ</a>| <a href="http://thinkchating.com" target="_blank">AƵվ ɬɬɬƵ߹ۿ </a>| <a href="http://wangquanai.com" target="_blank">AëƬƵ</a>| <a href="http://ningxialanh.com" target="_blank">99þùĻ</a>| <a href="http://cuuka.com" target="_blank">޾Ʒѹۿ</a>| <a href="http://dbyssw.com" target="_blank">Ƶۿ</a>| <a href="http://bisilover.com" target="_blank">Ʒ_ۿ</a>| <a href="http://2xpp.com" target="_blank">ֻˬƵѿ</a>| <a href="http://glgg99.com" target="_blank">˳77777ɫ߲</a>| <a href="http://3atv3523.com" target="_blank">޸ľƷ26U</a>| <a href="http://lshwork.com" target="_blank">ҹƵ߹ۿ</a>| <a href="http://moushengguigz.com" target="_blank">Ʒ˿һ</a>| <a href="http://77133144.com" target="_blank">ҹƵ</a>| <a href="http://ytshdiping.com" target="_blank">ɫƵ߹ۿ</a>| <a href="http://zg8k.com" target="_blank">AƬѹۿ</a>| <a href="http://aqdav22.com" target="_blank">ձzzzzwwwƬ</a>| <a href="http://0102008.com" target="_blank">Ļ߹ۿ</a>| <a href="http://bz600.com" target="_blank">þþ޾Ʒ</a>| <a href="http://51comcomcom.com" target="_blank">A޾VƷ</a>| <a href="http://51nianyefan.com" target="_blank">޾Ʒ</a>| <a href="http://8099456.com" target="_blank">޹ҹƷƬ߲</a>| <a href="http://dddd20.com" target="_blank">һëƬ</a>| <a href="http://470577.com" target="_blank">91Ʒ</a>| <a href="http://295301.com" target="_blank">ҹ߹ۿ</a>| <a href="http://dzyong.com" target="_blank">AVרAV</a>| <a href="http://vastraje.com" target="_blank">þþƷAV͵</a>| <a href="http://jlzjjy.com" target="_blank">ۺϾƷһҳ</a>| <a href="http://tiantangapp.com" target="_blank">fc2˳Ƶ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>