blogjava-凯发k8网页登录

blogjava-凯发k8网页登录http://www.blogjava.net/sealyu/--- 博客已迁移至: zh-cnsat, 08 apr 2023 20:37:32 gmtsat, 08 apr 2023 20:37:32 gmt60好消息!iphone版九宫格日记免费了!http://www.blogjava.net/sealyu/archive/2011/01/16/343039.htmlsealsealsat, 15 jan 2011 16:11:00 gmthttp://www.blogjava.net/sealyu/archive/2011/01/16/343039.htmlhttp://www.blogjava.net/sealyu/comments/343039.htmlhttp://www.blogjava.net/sealyu/archive/2011/01/16/343039.html#feedback0http://www.blogjava.net/sealyu/comments/commentrss/343039.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/343039.htmliphone版九宫格日记免费了!

下载地址:http://itunes.apple.com/cn/app/id412804027?mt=8&ls=1

iphone版九宫格1.0版本发布后,收到很多非常好的用户建议和评价,非常感谢大家的支持!
所以
sealyu决定将程序免费,方便更多用户的使用!

同时sealyu 已经连日赶出了1.1版本,近期即将发布,新版本中增加了如下功能:
1.增加密码保护功能。
2.使用inappsettingskit重新实现了“设置”页面。
3.增加"设置日记标题"功能,您可以自己设置喜欢的单元格标题。
4.修改了启动画面。






九宫格日记1.1版本已经提交app store审核,近期即将发布!敬请下载试用!


seal 2011-01-16 00:11 发表评论
]]>
iphone版九宫格日记进入美国app store新品推荐榜http://www.blogjava.net/sealyu/archive/2011/01/12/342817.htmlsealsealwed, 12 jan 2011 01:54:00 gmthttp://www.blogjava.net/sealyu/archive/2011/01/12/342817.htmlhttp://www.blogjava.net/sealyu/comments/342817.htmlhttp://www.blogjava.net/sealyu/archive/2011/01/12/342817.html#feedback0http://www.blogjava.net/sealyu/comments/commentrss/342817.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/342817.html 看了一下,原来是进了美国区app store中utilities类的新品推荐榜, 非常高兴。最近要抓紧时间,赶紧加新功能了。

下面图中的第一个就是了:





seal 2011-01-12 09:54 发表评论
]]>
iphone版本的九宫格日记已经上线发售了!http://www.blogjava.net/sealyu/archive/2011/01/09/342632.htmlsealsealsun, 09 jan 2011 12:24:00 gmthttp://www.blogjava.net/sealyu/archive/2011/01/09/342632.htmlhttp://www.blogjava.net/sealyu/comments/342632.htmlhttp://www.blogjava.net/sealyu/archive/2011/01/09/342632.html#feedback12http://www.blogjava.net/sealyu/comments/commentrss/342632.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/342632.html 地址:
现有中文和英文两个版本.

应用详情

价格:$ 0.99

大小:-

类型:iphone 程序

语言:english, chines














程序截图:

应用简介:

two lazy to keep a diary? no problem, we have diary-9 now. with pre-defined categories, just fill in content without thinking too much. record your colorful life! start from now!



seal 2011-01-09 20:24 发表评论
]]>
apache httpclient模拟登录(转)http://www.blogjava.net/sealyu/archive/2010/12/28/341648.htmlsealsealtue, 28 dec 2010 01:05:00 gmthttp://www.blogjava.net/sealyu/archive/2010/12/28/341648.htmlhttp://www.blogjava.net/sealyu/comments/341648.htmlhttp://www.blogjava.net/sealyu/archive/2010/12/28/341648.html#feedback0http://www.blogjava.net/sealyu/comments/commentrss/341648.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/341648.htmlhttpclient 是 apache jakarta common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 http 协议的客户端编程工具包,并且它支持 http 协议最新的版本和建议。

以下列出的是 httpclient 提供的主要的功能,要知道更多详细的功能可以参见 httpclient 的凯发k8网页登录主页。

  • 实现了所有 http 的方法(get,post,put,head 等)
  • 支持自动转向
  • 支持 https 协议
  • 支持代理服务器等

下面将逐一介绍怎样使用这些功能。首先,我们必须安装好 httpclient。

  • httpclient 可以在下载
  • httpclient 用到了 apache jakarta common 下的子项目 logging,你可以从这个地址下载到 common logging,从下载后的压缩包中取出 commons-logging.jar 加到 classpath 中
  • httpclient 用到了 apache jakarta common 下的子项目 codec,你可以从这个地址.cgi 下载到最新的 common codec,从下载后的压缩包中取出 commons-codec-1.x.jar 加到 classpath 中

下面是个我写的程序:

package com.newpalm.unicomfetch.threads;
import java.util.vector;
import org.apache.commons.httpclient.cookie;
import org.apache.commons.httpclient.httpclient;
import org.apache.commons.httpclient.namevaluepair;
import org.apache.commons.httpclient.cookie.cookiepolicy;
import org.apache.commons.httpclient.cookie.cookiespec;
import org.apache.commons.httpclient.methods.getmethod;
import org.apache.commons.httpclient.methods.postmethod;
import org.htmlparser.node;
import org.htmlparser.parser;
import org.htmlparser.tags.tablecolumn;
import org.htmlparser.tags.tablerow;
import org.htmlparser.tags.tabletag;
import org.htmlparser.visitors.objectfindingvisitor;
/**
* 用来演示登录表单的示例
* @author liudong
*/

public class formlogindemo {
 
public static void main(string[] args) throws exception{
parser parser = null;
objectfindingvisitor visitor = null;
httpclient client = new httpclient();
 
//模拟登录页面
postmethod post = new postmethod("");
namevaluepair name = new namevaluepair("txthandsetnumber", "123456");
namevaluepair pass = new namevaluepair("txtpassword", "123456");
namevaluepair __viewstate = new namevaluepair("__viewstate", "ddwtmtuxmzkxntq0mzt0pdtspgk8mt47pjtsphq8o2w8atwxpjs o2w8ddxwpgw8vgv4dds o2w8xdxtyxjxdwvlierpcmvjdglvbj0idxaiigjlagf2aw9ypsjzy3jvbgwiicbozwlnahq9jze1mccgc2nyb2xszgvsyxk9mzawig9ubw91c2vvdmvypsd0aglzlnn0b3aokscgb25tb3vzzw91dd0ndghpcy5zdgfydcgpj1w xdxpbwcgc3jjpsjpbwfnzs9kzwzhdwx0x2nhbgxfawnvbi5nawyiihdpzhropsi0iibozwlnahq9ijcixd4mbmjzcfw7jm5ic3bco1w8ysbocmvmid0iiyigb25jbgljaz0ib3blbldpbmrvdygnl0j1bgxldglulmfzchg/qnvsbgv0aw5jzd0ymycpilw c3dkujrliqhmjqxlhaxms6jmhi/kuovpoblcpc9hxd4kxdxiclw xdxiclw xdwvbwfycxvlzvw oz4 ozs oz4 oz4 o2w8ynrutg9naw47pj4pkegdivj1jmrdgjas7sgzd39jzg==");
namevaluepair btnloginx = new namevaluepair("btnlogin.x", "0");
namevaluepair btnloginy = new namevaluepair("btnlogin.y", "5");
post.setrequestbody(new namevaluepair[]{name,pass,__viewstate,btnloginx,btnloginy});
int status = client.executemethod(post);
 
post.releaseconnection();
//查看cookie信息
cookiespec cookiespec = cookiepolicy.getdefaultspec();
cookie[] cookies = client.getstate().getcookies();
if (cookies.length == 0) {
system.out.println("none");
} else {
for (int i = 0; i < cookies.length; i) {
system.out.println(cookies[i].tostring());
}
}
 
//访问所需的页面
getmethod get = new getmethod("");
client.executemethod(get);
visitor = new objectfindingvisitor(tabletag.class);
parser = new parser();
parser.setinputhtml(get.getresponsebodyasstring());
parser.setencoding("gbk");
parser.visitallnodeswith(visitor);
 
//取得要解析的页面数
node[] tables = visitor.gettags();
tabletag tabletag = (tabletag) tables[tables.length-1];
tablerow[] rows = tabletag.getrows();
tablerow row = rows[0];
tablecolumn[] col = row.getcolumns();
int pagenumber = integer.parseint(col[0].getchildrenhtml().substring(25, 29));
get.releaseconnection();
 
for(int i=1;i<pagenumber;i){
postmethod pt = new postmethod("");
namevaluepair txtpage = new namevaluepair("txtpage",integer.tostring(i));
__viewstate = new namevaluepair("__viewstate""")
namevaluepair __eventtarget = new namevaluepair("__eventtarget", "");
namevaluepair __eventargument = new namevaluepair("__eventargument", "");
namevaluepair tbmdn = new namevaluepair("tbmdn", "");
namevaluepair tbservicetype = new namevaluepair("tbservicetype", "");
namevaluepair tbstarttime = new namevaluepair("tbstarttime", "");
namevaluepair tbendtime = new namevaluepair("tbendtime", "");
namevaluepair btngotox = new namevaluepair("btngoto.x", "26");
namevaluepair btngotoy = new namevaluepair("btngoto.y", "13");
pt.setrequestbody(new namevaluepair[]{__eventtarget,__eventargument,__viewstate,tbmdn,tbservicetype,tbstarttime,tbendtime,txtpage,btngotox,btngotoy});
int a = client.executemethod(pt);
 
 
parser.setinputhtml(pt.getresponsebodyasstring());
parser.setencoding("gbk");
parser.visitallnodeswith(visitor);
 
tables = visitor.gettags();
tabletag = (tabletag) tables[tables.length-3];
 
rows = tabletag.getrows();
row = rows[1];
col = row.getcolumns();
system.out.println(col[4].getchildrenhtml().tostring());
get.releaseconnection();
}
 
}
}

下面介绍在使用httpclient过程中常见的一些问题。

某目标页的编码可能出现在两个地方,第一个地方是服务器返回的http头中,另外一个地方是得到的html/xml页面中。

  • 在http头的content-type字段可能会包含字符编码信息。例如可能返回的头会包含这样子的信息:content-type: text/html; charset=utf-8。这个头信息表明该页的编码是utf-8,但是服务器返回的头信息未必与内容能匹配上。比如对于一些双字节语言国家,可能服务 器返回的编码类型是utf-8,但真正的内容却不是utf-8编码的,因此需要在另外的地方去得到页面的编码信息;但是如果服务器返回的编码不是utf- 8,而是具体的一些编码,比如gb2312等,那服务器返回的可能是正确的编码信息。通过method对象的getresponsecharset()方 法就可以得到http头中的编码信息。
  • 对于象xml或者html这样的文件,允许作者在页面中直接指定编码类型。比如在html中会有这样的标签;或者在xml中会有这样的标签,在这些情况下,可能与http头中返回的编码信息冲突,需要用户自己判断到底那种编码类型应该 是真正的编码。

根据rfc2616中对自动转向的定义,主要有两种:301和302。301表示永久的移走(moved permanently),当返回的是301,则表示请求的资源已经被移到一个固定的新地方,任何向该地址发起请求都会被转到新的地址上。302表示暂时 的转向,比如在服务器端的servlet程序调用了sendredirect方法,则在客户端就会得到一个302的代码,这时服务器返回的头信息中 location的值就是sendredirect转向的目标地址。

httpclient支持自动转向处理,但是象post和put方式这种要求接受后继服务的请求方式,暂时不支持自动转向,因此如果碰到post方 式提交后返回的是301或者302的话需要自己处理。就像刚才在postmethod中举的例子:如果想进入登录bbs后的页面,必须重新发起登录的请 求,请求的地址可以在头字段location中得到。不过需要注意的是,有时候location返回的可能是相对路径,因此需要对location返回的 值做一些处理才可以发起向新地址的请求。

另外除了在头中包含的信息可能使页面发生重定向外,在页面中也有可能会发生页面的重定向。引起页面自动转发的标签是:。如果你想在程序中也处理这种情况的话得自己分析页面来实现转向。需要注意的是,在上面那 个标签中url的值也可以是一个相对地址,如果是这样的话,需要对它做一些处理后才可以转发。

httpclient提供了对ssl的支持,在使用ssl之前必须安装jsse。在sun提供的1.4以后的版本中,jsse已经集成到jdk中, 如果你使用的是jdk1.4以前的版本则必须安装jsse。jsse不同的厂家有不同的实现。下面介绍怎么使用httpclient来打开https连 接。这里有两种方法可以打开https连接,第一种就是得到服务器颁发的证书,然后导入到本地的keystore中;另外一种办法就是通过扩展 httpclient的类来实现自动接受证书。

方法1,取得证书,并导入本地的keystore:

  • 安装jsse (如果你使用的jdk版本是1.4或者1.4以上就可以跳过这一步)。本文以ibm的jsse为例子说明。先到ibm网站上下载jsse的安装包。然后解 压开之后将ibmjsse.jar包拷贝到"lib"ext"目录下。
  • 取得并且导入证书。证书可以通过ie来获得:1. 用ie打开需要连接的https网址,会弹出如下对话框:

    2. 单击”view certificate”,在弹出的对话框中选择”details”,然后再单击”copy to file”,根据提供的向导生成待访问网页的证书文件

    3. 向导第一步,欢迎界面,直接单击”next”,

    4. 向导第二步,选择导出的文件格式,默认,单击”next”,

    5. 向导第三步,输入导出的文件名,输入后,单击”next”,

    6. 向导第四步,单击”finish”,完成向导

    7. 最后弹出一个对话框,显示导出成功

  • 用keytool工具把刚才导出的证书倒入本地keystore。keytool命令在"bin"下,打开命令行窗口,并到"lib"security"目录下,运行下面的命令:

    keytool -import -noprompt -keystore cacerts -storepass changeit -alias yourentry1 -file your.cer

    其中参数alias后跟的值是当前证书在keystore中的唯一标识符,但是大小写不区分;参数file后跟的是刚才通过ie导出的证书所在的路径和文件名;如果你想删除刚才导入到keystore的证书,可以用命令:


    keytool -delete -keystore cacerts -storepass changeit -alias yourentry1
  • 写程序访问https地址。如果想测试是否能连上https,只需要稍改一下getsample例子,把请求的目标变成一个https地址。

    getmethod getmethod = new getmethod("https://www.yourdomain.com");

    运行该程序可能出现的问题:

    1. 抛出异常java.net.socketexception: algorithm ssl not available。出现这个异常可能是因为没有加jsseprovider,如果用的是ibm的jsse provider,在程序中加入这样的一行:


    if(security.getprovider("com.ibm.jsse.ibmjsseprovider") == null)
    security.addprovider(new ibmjsseprovider());

    或者也可以打开"lib"security"java.security,在行


    security.provider.1=sun.security.provider.sun
    security.provider.2=com.ibm.crypto.provider.ibmjce

    后面加入security.provider.3=com.ibm.jsse.ibmjsseprovider

    2. 抛出异常java.net.socketexception: ssl implementation not available。出现这个异常可能是你没有把ibmjsse.jar拷贝到"lib"ext"目录下。

    3. 抛出异常javax.net.ssl.sslhandshakeexception: unknown certificate。出现这个异常表明你的jsse应该已经安装正确,但是可能因为你没有把证书导入到当前运行jre的keystore中,请按照前 面介绍的步骤来导入你的证书。

方法2,扩展httpclient类实现自动接受证书

因为这种方法自动接收所有证书,因此存在一定的安全问题,所以在使用这种方法前请仔细考虑您的系统的安全需求。具体的步骤如下:

  • 提供一个自定义的socket factory(test.mysecureprotocolsocketfactory)。这个自定义的类必须实现接口 org.apache.commons.httpclient.protocol.secureprotocolsocketfactory,在实现接口 的类中调用自定义的x509trustmanager(test.myx509trustmanager),这两个类可以在随本文带的附件中得到
  • 创建一个org.apache.commons.httpclient.protocol.protocol的实例,指定协议名称和默认的端口号

    protocol myhttps = new protocol("https", new mysecureprotocolsocketfactory (), 443);
  • 注册刚才创建的https协议对象

    protocol.registerprotocol("https ", myhttps);
  • 然后按照普通编程方式打开https的目标地址,代码请参见test.nocertificationhttpsgetsample

httpclient中使用代理服务器非常简单,调用httpclient中setproxy方法就可以,方法的第一个参数是代理服务器地址,第二个参数是端口号。另外httpclient也支持socks代理。



seal 2010-12-28 09:05 发表评论
]]>
iphone版“胎教吧”终于通过app store审核了http://www.blogjava.net/sealyu/archive/2010/12/15/340826.htmlsealsealwed, 15 dec 2010 12:57:00 gmthttp://www.blogjava.net/sealyu/archive/2010/12/15/340826.htmlhttp://www.blogjava.net/sealyu/comments/340826.htmlhttp://www.blogjava.net/sealyu/archive/2010/12/15/340826.html#feedback0http://www.blogjava.net/sealyu/comments/commentrss/340826.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/340826.htmlhttp://itunes.apple.com/app/id407952616?mt=8
通过这个程序的开发,对xcode中coredata和av两个framework有了初步的了解,逐渐熟悉了objective-c和xcode的开发风格。

seal 2010-12-15 20:57 发表评论
]]>
the dangers of a rising chinahttp://www.blogjava.net/sealyu/archive/2010/12/10/340197.htmlsealsealfri, 10 dec 2010 00:55:00 gmthttp://www.blogjava.net/sealyu/archive/2010/12/10/340197.htmlhttp://www.blogjava.net/sealyu/comments/340197.htmlhttp://www.blogjava.net/sealyu/archive/2010/12/10/340197.html#feedback0http://www.blogjava.net/sealyu/comments/commentrss/340197.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/340197.htmlchina and america are bound to be rivals, but they do not have to be antagonists

dec 2nd 2010 | from print edition


towards the end of 2003 and early in 2004 china’s most senior leaders put aside the routine of governing 1.3 billion people to spend a couple of afternoons studying the rise of great powers. you can imagine history’s grim inventory of war and destruction being laid out before them as they examined how, from the 15th century, empires and upstarts had often fought for supremacy. and you can imagine them moving on to the real subject of their inquiry: whether china will be able to take its place at the top without anyone resorting to arms.

in many ways china has made efforts to try to reassure an anxious world. it has repeatedly promised that it means only peace. it has spent freely on aid and investment, settled border disputes with its neighbours and rolled up its sleeves in un peacekeeping forces and international organisations. when north korea shelled a south korean island last month china did at least try to create a framework to rein in its neighbour.

but reasonable china sometimes gives way to aggressive china. in march, when the north sank a south korean warship, killing 46 sailors, china failed to issue any condemnation. a few months later it fell out with japan over some chinese fishermen, arrested for ramming japanese coastguard vessels around some disputed islands—and then it locked up some japanese businessmen and withheld exports of rare earths vital for japanese industry. and it has forcefully reasserted its claim to the spratly and paracel islands and to sovereignty over virtually the entire south china sea.

related items
  • dec 2nd 2010
  • dec 2nd 2010

related topics

as the chinese leaders’ history lesson will have told them, the relationship that determines whether the world is at peace or at war is that between pairs of great powers. sometimes, as with britain and america, it goes well. sometimes, as between britain and germany, it does not.

so far, things have gone remarkably well between america and china. while china has devoted itself to economic growth, american security has focused on islamic terrorism and war in iraq and afghanistan. but the two mistrust each other. china sees america as a waning power that will eventually seek to block its own rise. and america worries about how chinese nationalism, fuelled by rediscovered economic and military might, will express itself (see our ).


the peloponnesian pessimists

pessimists believe china and america are condemned to be rivals. the countries’ visions of the good society are very different. and, as china’s power grows, so will its determination to get its way and to do things in the world. america, by contrast, will inevitably balk at surrendering its pre-eminence.

they are probably right about chinese ambitions. yet china need not be an enemy. unlike the soviet union, it is no longer in the business of exporting its ideology. unlike the 19th-century european powers, it is not looking to amass new colonies. and china and america have a lot in common. both benefit from globalisation and from open markets where they buy raw materials and sell their exports. both want a broadly stable world in which nuclear weapons do not spread and rogue states, like iran and north korea, have little scope to cause mayhem. both would lose incalculably from war.

the best way to turn china into an opponent is to treat it as one. the danger is that spats and rows will sour relations between china and america, just as the friendship between germany and britain crumbled in the decades before the first world war. it is already happening in defence. feeling threatened by american naval power, china has been modernising its missiles, submarines, radar, cyber-warfare and anti-satellite weapons. now america feels on its mettle. recent pentagon assessments of china’s military strength warn of the threat to taiwan and american bases and to aircraft-carriers near the chinese coast. the us navy has begun to deploy more forces in the pacific. feeling threatened anew, china may respond. even if neither america nor china intended harm—if they wanted only to ensure their own security—each could nevertheless see the other as a growing threat.

some would say the solution is for america to turn its back on military rivalry. but a weaker america would lead to chronic insecurity in east asia and thus threaten the peaceful conduct of trade and commerce on which america’s prosperity depends. america therefore needs to be strong enough to guarantee the seas and protect taiwan from chinese attack.


how to take down the great wall

history shows that superpowers can coexist peacefully when the rising power believes it can rise unhindered and the incumbent power believes that the way it runs the world is not fundamentally threatened. so a military build-up needs to be accompanied by a build-up of trust.

there are lots of ways to build trust in asia. one would be to help ensure that disputes and misunderstandings do not get out of hand. china should thus be more open about its military doctrine—about its nuclear posture, its aircraft-carriers and missile programme. likewise, america and china need rules for disputes including north korea (see ), taiwan, space and cyber-warfare. and asia as a whole needs agreements to help prevent every collision at sea from becoming a trial of strength.

america and china should try to work multilaterally. instead of today’s confusion of competing venues, asia needs a single regional security forum, such as the east asia summit, where it can do business. asian countries could also collaborate more in confidence-boosting non-traditional security, such as health, environmental protection, anti-piracy and counter-terrorism, where threats by their nature cross borders.

if america wants to bind china into the rules-based liberal order it promotes, it needs to stick to the rules itself. every time america breaks them—by, for instance, protectionism—it feeds china’s suspicions and undermines the very order it seeks.

china and america have one advantage over history’s great-power pairings: they saw the 20th century go disastrously wrong. it is up to them to ensure that the 21st is different.



seal 2010-12-10 08:55 发表评论
]]>
最受欢迎的50个免费wordpress模板(转)http://www.blogjava.net/sealyu/archive/2010/12/09/340138.htmlsealsealthu, 09 dec 2010 05:20:00 gmthttp://www.blogjava.net/sealyu/archive/2010/12/09/340138.htmlhttp://www.blogjava.net/sealyu/comments/340138.htmlhttp://www.blogjava.net/sealyu/archive/2010/12/09/340138.html#feedback0http://www.blogjava.net/sealyu/comments/commentrss/340138.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/340138.html

译者注wordpress是最受欢迎的博客发布平台之一,具有免费,高度可定制、容易安装和使用等特色。由于wordpress是如此流行和受欢迎,你可以找到大量的wordpress开发以及管理等方面的资源,丰富的用户指南让你能够快速的上手使用。参考资料:

有很多天才设计师选择发表免费的主题。大多数时候,对于他们来说唯一的一点小要求就是保留他们的设计元素,并链接到他们的网站(非常合理的要求)。

在本文中,我们整理了50个优秀的、高质量的、给大家。这些主题包含了制作精细且华丽的主题,也有简洁清爽的主题,你可以找到适合你的设计品位的wordpress主题。

说明: 请务必检查主题的许可协议,不要违反使用限制(如果有的话),并且保留设计师的设计属性[footer中的设计信息],即使设计师没有要求你这么做。[:设 计一个漂亮的wordpress theme,需要花费设计师很多的时间和精力,如果你喜欢这些免费的wordpress主题,请尊重设计师的劳动成果。]

译者注:在本文中介绍的wordpress主题均为英文模板,对于使用英文写博客的朋友来说,这里还有我收集的3个英文写作软件可以参考,都有免费试用版本可供下载:1、 - 最适合esl使用的英文写作和语法纠错软件,支持mac os。2、 - 最适合公司,组织,作家使用的plain english写作软件。3、 - 英文拼写和语法检查软件,和whitesmoke差不多,但更为专业的英文写作工具。

|


|


|


|


|


|


|



|


|


|


|


|


|




|


|



|


|



|


|



|






|


|



|



|





|


|





|



|



|

|



seal 2010-12-09 13:20 发表评论
]]>
css hack区分浏览器 ie6 ie7 ie8 firefox opera safarihttp://www.blogjava.net/sealyu/archive/2010/12/08/340070.htmlsealsealwed, 08 dec 2010 07:39:00 gmthttp://www.blogjava.net/sealyu/archive/2010/12/08/340070.htmlhttp://www.blogjava.net/sealyu/comments/340070.htmlhttp://www.blogjava.net/sealyu/archive/2010/12/08/340070.html#feedback0http://www.blogjava.net/sealyu/comments/commentrss/340070.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/340070.html

为了向你展示这些 css hack 是否正常运作,我新建六个 p 标签,并给每一个 p 标签一个特有的 id。这将向你展示 css hack 的运作情况。

我来自 opera 7.2 - 9.5

 

我是神奇的 safari

 

我来自 firefox

 

我是你爷爷 firefox 1 - 2 

 我是囧 ie 7

 

我是脑瘸 ie 6

 

  然后我让这些 p 标签默认都不显示

 body p{display: none;}  

  使用 ie css 条件注释区分 ie 浏览器

  最简单的区分 ie 浏览器的方法自然是使用他们的条件注释。 微软创建了一个强大的语法来让我们去实现这个功能。我不想再详细地介绍 ie 条件注释了,我想你在搜索引擎能搜索到上万个搜索条目,我这里只要这两个:

  

  使用 css 解析器 hacks 区分 ie

  虽说 ie 条件注释十分简单好用,但是如果你想把全部的 css 放到一个文件里的 话,那么你不得不使用别的方法。注意这里的 ie 7 hack将只对 ie7 有效,因为 ie6 根本不知道 > 选择符。同时你也得注意  > 选择符对于其他浏览器同样是无效的。

html > body #ie7 {*display: block;} 

 body #ie6 {_display: block;} 

  css hack 区分 firefox

  第一个使用了 body:empty 来区分 firefox 1 和 2 。第二个 hack使用了全部 firefox 浏览器的专有扩展 -moz。 -moz 只对 firefox有效,使用这个 hack 大可不必担心其他浏览器的影响。

body:empty #firefox12 {display: block;}

@-moz-document url-prefix() {#firefox { display: block; }}  

  css hack 区分 safari

  safari 的 css hack 与 firefox 的 hack 看起来很像,使用的是 safari浏览器的专有扩展 -webkit 且只对 safari 浏览器有效。

@media screen and (-webkit-min-device-pixel-ratio:0) {#safari { display: block; }} 

  css hack 区分 opera

@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {head~body #opera { display: block; }} 

  然后,全部合在一起便是

css browser hacks - 52css.com

body p {

    display: none;

}

html:first-child #opera {

    display: block;

}

 html > body #ie7 {

*display: block;

}

 body #ie6 {

    _display: block;

}

body:empty #firefox12 {

    display: block;

}

 

@-moz-document url-prefix() {

 #firefox {

    display: block;

}

}

@media screen and (-webkit-min-device-pixel-ratio:0) {

#safari {

display: block;

}

}

@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {

head~body #opera {

display: block;

}

}

我来自 opera 7.2 - 9.5

我是神奇的 safari

我来自 firefox

我是你爷爷 firefox 1 - 2 

我是囧 ie 7

我是脑瘸 ie 6

 

  css hack 虽好且方便兼容各浏览器,但是通不过 w3c 验证,所以还得自己权衡是否有必要去使用。



seal 2010-12-08 15:39 发表评论
]]>
企业服务总线凯发天生赢家一触即发官网的解决方案剖析,第 1 部分: 企业服务总线的基本概念(转)http://www.blogjava.net/sealyu/archive/2010/12/07/340000.htmlsealsealtue, 07 dec 2010 08:47:00 gmthttp://www.blogjava.net/sealyu/archive/2010/12/07/340000.htmlhttp://www.blogjava.net/sealyu/comments/340000.htmlhttp://www.blogjava.net/sealyu/archive/2010/12/07/340000.html#feedback0http://www.blogjava.net/sealyu/comments/commentrss/340000.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/340000.html

"一切都在流动,没有什么是持久的。一切都在融化,没有什么是固定不变的" - 赫拉克利特(heracleitus)

大约在2003年中的时候,soa的概念逐渐进入人们的视野,一时间众人乐此不疲的发表各自对soa的见解。soa已经成 为it业,尤其是软件开发及系统集成领域从业者的热门话题。很多的权威机构也纷纷预测soa的美妙前景,例如,gartner 预言,到了 2008 年,至少 60% 的企业将使用 soa 作为其it架构。抛开喧嚣躁动以及随声附和,对于软件开发者而言,经过了一年多的概念灌输,伴随着不断增长的困惑,更多的人希望能静下心来看一看:究竟怎 样的系统架构是符合soa设计的,而又有哪些技术可以用来实现soa呢?特别是企业服务总线(enterprise service bus, esb), 看起来更是soa中一个玄虚的概念,本系列文章将通过实际的案例分析来详细讲解在soa系统中是怎样实施esb的。

本系列文章将直接面向广大的软件开发人员, 首先以直观的方式介绍什么是esb, 然后引入一个实际案例,以此为基础,详细介绍怎样一步一步实现esb。现在我们谈论soa和esb的时候都不再是空中楼阁,ibm作为soa的倡导者,已 经提供了很好的产品来实现我们的设想。我们会在本系列中的第二、第三部分中分别介绍基于websphere 6 和ibm eai产品的两种实现方式, 然后在第四部分中介绍在复杂的企业应用场景中总线(bus)怎样互联, 怎样扩展。希望通过本系列文章,能让广大读者朋友快速掌握esb的实际开发技巧。


关于soa的概念,你可以找到很多的文章从不同的角度来描述它,不同的软件提供商也有不同的定义方式。bea有流体计算, 微软有indigo 和soa-building, sap有esa。 每个人都可以从不同的视角来理解soa,从程序员的角度,soa是一种全新的开发技术,新的组件模型,比如说web service;从架构设计师的角度,soa就是一种新的设计模式,方法学;从业务分析人员的角度,soa就是基于标准的业务应用服务。从概念的角 度,ibm对soa的定义是最为全面的,既soa是一种构造分布式系统的方法,它将业务应用功能以服务的形式提供给最终用户应用或其他服务。soa包括如 下要素:



  • 一个体系架构,用开放的标准将软件资产(asset)化为服务
  • 提供标准的方法来表示软件资产及其交互
  • 单独的软件资产作为构造单元,被重复使用来开发其他应用
  • 将关注点从细节实现转移到应用(application)组装
  • 整合企业外部的应用(b2b)的方式
  • 开发(现在)和整合(未来)的统一

本文针对的读者是软件开发人员,站在开发人员的角度,往往希望软件开发能够满足对于开发效率、可靠性、易维护性、易管理等多方面的更高要求。让我们通过回顾软件开发的演化过程来看一看soa出现的必然性:

  • 面向机器语言(monolithic)的开发模式:需要根据不同平台的机器语言来开发代码。
  • 面向过程(procedure)的开发模式:独立于机器的程序语言(c, pascal等)使开发过程变得简单了,用过程来代表一个抽象的代码集合,包装重用现成的代码。
  • 面向对象(object)的开发模式:用更接近现实的对象来表述一个相对完整的事物。面向对象的语言(smalltalk,java等),提供了更抽象的封装和重用模式。面向对象的开发强调从现实世界问题域到软件程序的直接映射,更接近人类的自然思维方式。
  • 面向组件(component)的模式:随着软件开发规模的扩大,在涉及分布式、异构等复杂特征的环境中,代码 级别的重用性差,可维护性差,效率低的弱点是不可逾越的,因此人们以架构运行环境(如.net,j2ee等)来提供完善的支撑平台,从而把开发者解放出 来,更专注于业务核心的开发。而这些业务功能(business function) 以组件的形式(dcom, ejb等)发布运行在架构运行环境中。软件开发的重用模式也上升到业务组件的级别。
  • 面向服务(soa)的模式:当软件的使用范围扩展到更广阔的范围,往往会面对更加复杂的it环境和更加灵活多变 的需求。服务(service)的概念出现了,人们将应用(application)以业务服务(business service)的形式公布出来供别人使用,而完全不需要去考虑这些业务服务运行在哪一个架构体系上,因为所有的服务都讲着同样的语言。soa考虑了业务 发展的长期性,体现了"变化就是永恒"的思想。soa的核心体现在企业应用或者业务功能上的"重用"和"互操作",而不再把it与业务对立起来,这可以被 视为在it驱动业务的方向上迈出的重要一步。

我们注意到,soa同样也强调重用(reuse), 但是相对于传统的代码重用,对象重用,和部件重用,soa的重用粒度更粗。soa的重用在于业务级的应用,即服务的重用,这与软件的发展规律是相一致的。 在软件发展的过程中,软件重用的对象越来越接近我们的现实生活。通过部件的重用,软件的开发更具效率,并且开始试图用组件表达业务模式。但是,it人员仍 很难对业务人员解释清楚it结构怎样映射到业务模型上。然而,it架构与业务模型的弥合是不可避免的方向。现代企业的业务环境所面临的最大挑战就是变化, 规则在变,需求在变,而对变化做出最快的反应,尽快地适应变化,成为企业占得先机,成功运作的关键。很多企业的业务环境依赖于他们的it架构,因此,it 部门往往直接承载了业务变化带来的压力。每一个具体的业务变化,都直接反应到对现有的it平台的要求:要么企业it架构本身对变化自适应,要么it架构能 够在短时间内根据新的业务规则做出调整。这就是soa架构提出的根本原因,我们需要一种更加贴近业务的it架构,能够直接描绘业务,对那些不懂it技术的 业务领域专家来说,业务服务却是他们最熟悉的,也就是说是soa把软件重用的对象从it人员上升到了业务人员。因此,我们可以说soa与其它的模式相比, 最大的进步在于它与业务的关联性,"服务"对应到实际业务。it通过"服务"与业务发生了密切的关系,业务人员和it人员都可以专注于业务逻辑的实现,而 共同的语言就是"服务"。

但不是什么场合都适用soa。通常来讲,soa适用于较为复杂的it架构,经常需要与外部复杂的it环境交互,并且需要快 速地应对频繁发生的业务变化。就像你不可能在控制洗衣机的芯片上使用ejb开发一样,如果你的it环境规模很小,足以灵活地应对变化,不需要与其他的异构 it环境频繁交互,那么soa带来的好处就不足以抵消它给你带来的系统复杂性。但是,即令如此,你也并没有被完全排除在soa的大趋势之外。soa是如此 地倍受瞩目,我们可以预见到它的迅猛发展,因此即使你的内部it架构本身并不是基于soa的,你也还有机会参与到未来的soa架构中去。例如,将你的某个 业务以服务的形式发布到某个外部soa平台上供别人使用,作为第三方soa平台的一个服务提供者(service provider)存在。

在选择soa的实施方案时,要记住,软件的具体实现技术诸如web 服务与soa是两回事,soa是一个概念,方法学, 或者用一个更时髦的词:一种模型。而web 服务呢?它是一种具体的实现技术,就像ejb一样。soa ≠ web服务。不过公平地讲,web 服务倒确实是目前最适合实现soa的技术之一,用web 服务来封装业务服务是个不错的选择。因为web服务是标准的,ws-i协议保证了来自不同厂商的web服务即使运行在不同的平台上,底层的实现机理不同也 可以顺利交互,这是以前的任何一种技术如corba,ejb,或dcom都不能做到的。而且,web服务的定义与实现是分开描述的,即松散耦合,因此,可 以很方便地替换服务的内在实现而不会对现有的系统造成任何冲击,这也极大地促进了it架构的灵活性。

对于soa更进一步的了解,可以参考ibm developerworks上其他soa相关的文章(请参见参考资料),我们的系列文章将主要讨论esb,因此不再此过多地论述soa了。为了使我们下面的论述更顺畅,请先牢记典型的soa架构有哪些基本的要求:

  1. soa在相对较粗的粒度上对应用服务或业务模块进行封装与重用;
  2. 服务间保持松散耦合,基于开放的标准, 服务的接口描述与具体实现无关;
  3. 灵活的架构 -服务的实现细节,服务的位置乃至服务请求的底层协议都应该透明;

让我们暂时回到网络技术不普及的时代,你怎样在两台机器之间传递文件?我还记得为了给实验室的每台机器安装borland c 的环境,猜猜我动用了什么:一根"串口线"。不过,我仍然觉得庆幸,好在每台机器都运行同样的操作系统- dos(很少有人还记得dos中有interlnk这样一个命令吧), 用来通过串口线在两台机器间传递流文件。否则我将不得不用软盘来拷贝所有的安装文件。我那个时候的梦想就是,哪一天有这么一个叫做"网络"的东西能够把实 验室里面所有机器都连接起来,而不用我在各机器之间跑来跑去。

让我们回归主题,你现在已经基本明白了什么是soa。假定你已经按照soa的思想提炼出了各种业务服务,公布出来,同样, 你发现其他很多人也做了同样的事情。大家都很振奋,开始踊跃的尝试,我调用你的一个服务,你调我的一个服务。啊哈!大家都soa了。且慢,那么这个soa 给你们带来了什么好处呢?ok,现在我可以在j2ee环境里调用.net的组件了,但是原来没有soa的时候也可以做到的呀。只要两个节点之间互相认可对 方的方式,即使不存在公开/统一的服务界面也可以实现点到点的互联。因此我们不得不承认,如果我们只有服务,而服务的请求者和服务的提供者之间仍然需要这 种显式的点到点的调用,那么这就不是一个典型的soa架构。请看图二,服务的参与双方都必须建立1对1 的联系。这样一个结构与我十几年前的那种互联的方式何其相似!但是,还记得我们上面提到的soa三个基本要素吗?显然第三点没有做到。





因此,在soa中,我们还需要这样一个中间层,能够帮助实现在soa架构中不同服务之间的智能化管理。最容易想到的是这样 一个hub-spoke结构,在soa架构中的各服务之间设置一个类似于hub的中间件,由它充当整个soa架构的中央管理器的作用。请看图三,现在服务 的请求者和提供者之间有了一个智能的中转站, 服务的请求者不再需要了解服务提供者的细节。不错!看上去是一个好的soa结构。事实上,传统的eai就是通过这样一种方式来试图解决企业内部的应用整合 问题。

eai的目标是支持对现有it系统的重新利用,通过eai技术能够将不同的软件和系统串联起来,延长这些应用系统的生命周 期。传统的eai,往往使用如corba和com等的消息中间件进行分布式,跨平台的程序交互,修改企业资源规划以达到新的目标,使用中间件、xml等方 法来进行数据分配。因此,实际上传统的eai是部件级的重用。很不幸的是,基于部件的架构没有统一的标准,因此,各个厂商都有各自不同的eai凯发天生赢家一触即发官网的解决方案, 你会看到各种各样的中间件平台。如果eai碰到了异构的it环境,就必须分别考虑怎样在各个不同的中间件之间周旋,来实现合理的互联方式,你不得不考虑各 种复杂的可能性。因此,你所见过的大多数传统eai凯发天生赢家一触即发官网的解决方案都比较笨重。

再回顾一下我们上面介绍过的soa的应用场景:复杂的企业级架构。如果我们选择hub的模式来构建soa基础架构,从纯粹 逻辑的角度,可能会出现哪些问题呢?首先,整个soa架构的性能,如果每个服务的请求都经过中央hub的中转,那么hub的负担会很重,速度会随着参与者 的增多而愈来愈慢;其次,这样的系统会很脆弱,一旦hub出错,整个soa架构都会瘫痪;最后,这样的架构会破坏soa的开放性原则,参与者运行在一个相 对封闭的环境中,扩展起来十分麻烦。因此,这也不是理想的soa架构。

好了,现在该esb登场了,请看我们的正解:



它与前面的hub结构有什么不同呢?首先,它比单一hub的形式更开放,总线结构有无限扩展的可能;其次,真正体现了 soa的理念, 一切皆为服务,服务在总线(bus)中处于平等的地位。即使我们需要一些hub,那么它们也是以某种服务的形式部署在总线上,相比上面的结构要灵活的多。 这就是esb,我们需要给它一个明确的定义:esb是一种在松散耦合的服务和应用之间标准的集成方式。它可以作用于:

  • 面向服务的架构 -分布式的应用由可重用的服务组成
  • 面向消息的架构 - 应用之间通过esb发送和接受消息
  • 事件驱动的架构 - 应用之间异步地产生和接收消息

很不幸,上面的定义看上去很拗口,我们暂且用一句较通俗的话来描述它:esb就是在soa架构中实现服务间智能化集成与管 理的中介。而它与soa的关系要相对好理解一些:esb是逻辑上与soa 所遵循的基本原则保持一致的服务集成基础架构,它提供了服务管理的方法和在分布式异构环境中进行服务交互的功能。可以这样说,esb是特定环境下(soa 架构中)实施eai的方式: 首先,在esb系统中,被集成的对象被明确定义为服务,而不是传统eai中各种各样的中间件平台,这样就极大简化了在集成异构性上的考虑,因为不管有怎样 的应用底层实现,只要是soa架构中的服务,它就一定是基于标准的。

其次,esb明确强调消息(message)处理在集成过程中的作用,这里的消息指的是应用环境中被集成对象之间的沟通。 以往传统的eai实施中碰到的最大的问题就是被集成者都有自己的方言,即各自的消息格式。作为基础架构的eai系统,必须能够对系统范畴内的任何一种消息 进行解析。传统的eai系统中的消息处理大多是被动的,消息的处理需要各自中间件的私有方式支持,例如api的方式。因此尽管消息处理本身很重要,但消息 的直接处理不会是传统eai系统的核心。esb系统由于集成对象统一到服务,消息在应用服务之间传递时格式是标准的,直接面向消息的处理方式成为可能。如 果esb能够在底层支持现有的各种通讯协议,那么对消息的处理就完全不考虑底层的传输细节,而直接通过消息的标准格式定义来进行。这样,在esb中,对消 息的处理就会成为esb的核心,因为通过消息处理来集成服务是最简单可行的方式。这也是esb中总线(bus)功能的体现。其实,总线的概念并不新鲜,传 统的eai系统中,也曾经提出过信息总线的概念,通过某种中间件平台,如corba来连接企业信息孤岛,但是,esb的概念不仅仅是提供消息交互的通道, 更重要的是提供服务的智能化集成基础架构。

最后,事件驱动成为esb的重要特征。通常服务之间传递的消息有两种形式,一种是调用(call), 即请求/回应方式,这是常见的同步模式。还有一种我们称之为单路消息(one-way),它的目的往往是触发异步的事件, 发送者不需要马上得到回复。考虑到有些应用服务是长时间运行的,因此,这种异步服务之间的消息交互也是esb必须支持的。除此之外,esb的很多功能都可 以利用这种机制来实现,例如,soa中服务的性能监控等基础架构功能,需要通过esb来提供数据,当服务的请求通过esb中转的时候,esb很容易通过事 件驱动机制向soa的基础架构服务传递信息。


首先,我们来看一看esb有哪些基本的功能。既然esb会以中介的身份出现,它就必须有两方面的考虑,首先它必须了解被它 中介的两个端点:1)服务的请求者以及请求者对服务的要求,2)服务的提供者和它所提供服务的描述;其次,它必须具有某种机制能够完成中介的任务。我们把 这两类考虑归纳为esb的两个基本功能:面向服务的原数据(metadata)管理功能 和中介(mediation)功能。 作为soa的重要构成部分,esb承担的重任还包括怎样将企业架构中已存在的业务服务连接到总线上来,我们称之为适配器(adapter)功能。尽管服务 本身已经用公开的接口来描述,但具体的实现还是运行在不同的环境中,因此,esb还应该提供对服务底层协议的支持,譬如应用协议j2ee,.net, 通讯协议如http,jms等等。除此之外,还需要对具体应用中涉及到的服务加以管理,如性能,可靠性,安全性等等。

esb 提供了最基本的功能来保障soa系统的运行,这些功能应该包含下列内容:

  • 在总线范畴内对服务的注册命名及寻址管理功能 - 服务的meta-data管理
  • 面向服务的中介功能
    • 提供位置透明性的服务路由和定位服务
    • 多种消息传递型式(请求/响应,单路请求,发布/订阅等等)
    • 支持广泛使用的传输协议(http,jms,mq等等)
  • 支持多种服务集成方式,比如 jca、web 服务、messaging、adaptor
  • 对服务管理的支持,如服务调用的记录、测量和监控数据的提供

很多时候,很难界定哪些功能是应该由soa的基础架构(infrastructure)提供的,而哪些应该放在esb的范 畴内来解决。笔者认为,放大或突出esb在soa架构中的地位并不很恰当。比较合理的解释是:esb应该构筑在完善的soa架构上,做它应该做的事-服务 集成。至于怎样集成,应该根据你的上下文环境,考虑有哪些soa的基础设施可供你使用,然后再基于soa的基础架构来实现你的esb设计。

在更高的层次,esb还提供诸如服务代理,协议转换等等功能,我们称之为esb的应用模式(esb usage pattern)。作为soa架构的服务集成功能提供者,我们可以总结出的一些比较常用的应用模式,例如:

1)协议转换模型,用于当服务的请求者与服务提供者基于不同协议时的消息转换情形



2)消息广播模式,用于事件驱动多个动作或者消息广播的情形



3)服务匹配模式,用于需要动态选择服务提供者的情形,例如可以根据消息的内容,或负载情况,或服务级别约定(sla),来为服务请求者选择合适的服务。



这里我们只列举了3个典型的模式,而这样的例子实在太多了,发挥你的创造性,你还会想出来更多的,这也是esb的魅力所 在。但是,在esb的设计上,注意不能喧宾夺主,esb的功能在于帮助服务的集成,而不是参与业务逻辑。业务逻辑应该封装在业务服务中,或通过业务编排服 务(process service)来组织。


关于esb,目前还没有被一致接受的标准。我们可以通过选择成熟的eai 中间件来实现服务的集成与互操作性。这样做的好处是你的开发过程会很顺畅,因为它已经足够稳定且有丰富的工具支持。通常这样的eai产品在目前阶段都还不 是基于开放的标准,例如ibm的websphere mq5.3,作为ibm eai实现esb的消息平台,就不是开放的标准。如果一定要选择开放标准的esb实现方式,web 服务加上ws-* 协议几乎是我们唯一的选择,但毕竟soa、esb仍处于起步的阶段,一方面我们还没有很成熟的产品支持所有的ws-*协议,另一方面这些ws-* 协议本身还处在频繁变化的阶段。因此当你选择esb实施方案的时候,最好考虑平衡esb实施、开发的工作量。

这里你可能会有疑问,既然soa架构追求开放性,为什么我们要容忍用私有的esb产品如ibm wbi/mq来构建soa架构的集成环境?这是一个好问题。soa始终是我们追求的大目标,开放是必然的趋势,这是毋庸置疑的。但是,请注意esb的定 义,至少到目前为止,还没有明确的要求它的实现一定是开放的,每一个软件供应商对它都可能有不同的理解和实现的策略。我们不用怀疑esb将来的开放之路, 但至少在目前阶段,我们不能坐下来等待它的到来。 其实,esb充当的是soa中的中介角色,因此,即使将来esb变化了,对服务的请求者和服务的提供者都不会造成很大的冲击,因为它本来就是对用户透明 的。举个例子,j2ee,它的标准一直在变化中,但是大家通常都能接受它的变化,社会总是要进步的,it也一样。你不可能因为j2ee 两年以后要出1.6就不再使用现在的1.4了。

ibm目前可以用于esb实施的产品也可以分为两大阵营:

  1. 以目前稳定的产品如ws mq,wbi message broker,tivoli等为代表的eai凯发天生赢家一触即发官网的解决方案。
  2. 以was6 sibus为代表的专用esb平台。

现有的eai凯发天生赢家一触即发官网的解决方案,可能涉及如下的ibm软件产品:

  • websphere bi message broker用于提供esb的message 中介功能(mediation)
  • websphere mq / jms 用于消息传输服务
  • websphere process choreographer 用于实现服务流程
  • websphere adaptor用于连接遗留系统
  • web service gateway用于实现web服务 proxy,屏蔽企业内部/外部web服务的实现细节

was6 中提供了崭新的消息服务平台wpm(websphere platform messaging),并基于这一平台提供了esb的一个具体实现- sibus(service integration bus) 它可以支持同步和异步的消息通信。总线(bus)通过互联的消息引擎管理消息源。同时支持基于web服务和jms,mq格式的消息交互。你可以从was6 身上看到ibm战略的变化,sibus只是ibm加大对于soa支持的一步,你还会很快看到更多的变化,例如独立的esb产品,esb的开发工具等等。但 是,你完全不必担心,这些变化都会保持兼容性,现在soa的投入,无论是以哪一种方式,都会在ibm的soa整体考虑之中。

上述的两种方案并不是对立的,你可以选择基于成熟产品实现esb,也可以尝试一下ibm的最新技术。这两种方案甚至可以互联,见图八。我们将在系列的第四部分讲解这一较为复杂的场景。



在本系列文章接下来的三部分中,我们将继续详细描述esb的具体实现步骤。


本文向您介绍了soa以及esb 的基本知识,确定了一些 esb 实现中最常见的基本功能,论述了esb产生的必要性,以及esb在soa中的地位。


  • ,sg24-6303-00,2004 年 4 月,作者 endrei m。 等。
  • ""(developerworks,2003 年 12 月)作者 。
  • ,sg24-6346-00,作者 martin keen 等。
  • enterprise service bus - making soa real作者 beth hutchison, peter lambros, rob phippen, marc-thoms schimdt

李珉,ibm soa design center 高级工程师,技术经理,曾领导was6 sibus的测试工作,对esb的技术发展一直有所关注。



seal 2010-12-07 16:47 发表评论
]]>
面向服务架构(soa)和企业服务总线(esb)(转)http://www.blogjava.net/sealyu/archive/2010/12/07/339998.htmlsealsealtue, 07 dec 2010 08:45:00 gmthttp://www.blogjava.net/sealyu/archive/2010/12/07/339998.htmlhttp://www.blogjava.net/sealyu/comments/339998.htmlhttp://www.blogjava.net/sealyu/archive/2010/12/07/339998.html#feedback0http://www.blogjava.net/sealyu/comments/commentrss/339998.htmlhttp://www.blogjava.net/sealyu/services/trackbacks/339998.html学习和研究在企业中实施面向服务架构(soa),简单回顾soa和esb,重点关注微软在soa领域的相关指导和.net社区的相关开源的凯发天生赢家一触即发官网的解决方案,和大家一起来探讨如何在企业里实现soa,期望有实施soa经验的同学发表意见。
一、soa的历史

     1996年,gartner最早提出soa。2002年12月,gartner提出soa是"现代应用开发领域最重要的课题",soa并不是一个新事 物,it组织已经成功建立并实施soa应用软件很多年了,bea、ibm、等厂商看到了它的价值,纷纷跟进。soa的目标在于让it变得更有弹性,以更快 地响应业务单位的需求,实现实时企业(real-time enterprise,这是gartner为soa描述的愿景目标)。而bea的cio rhonda早在2001年6月就提出要将bea的it基础架构转变为soa,并且从对整个企业架构的控制能力、提升开发效率、加快开发速度、降低在客户 化和人员技能的投入等方面取得了不错的成绩。

  soa是在计算环境下设计、开发、应用、管理分散的逻辑(服务)单元的一种规范。这个定义决定了soa的广泛性。soa要求开发者从服务集成的 角度来设计应用软件,即使这么做的利益不会马上显现。soa要求开发者超越应用软件来思考,并考虑复用现有的服务,或者检查如何让服务被重复利用。soa 鼓励使用可替代的技术和方法(例如消息机制),通过把服务联系在一起而非编写新代码来构架应用。经过适当构架后,这种消息机制的应用允许公司仅通过调整原 有服务模式而非被迫进行大规模新的应用代码的开发,使得在商业环境许可的时间内对变化的市场条件做出快速的响应。

  soa也不仅仅是一种开发的方法论--它还包含管理。例如,应用soa后,管理者可以方便的管理这些搭建在服务平台上的企业应用,而不 是管理单一的应用模块。其原理是,通过分析服务之间的相互调用,soa使得公司管理人员方便的拿到什么时候、什么原因、哪些商业逻辑被执行的数据信息,这 样就帮助了企业管理人员或应用架构师迭代地优化他们的企业业务流程、应用系统。

  soa的一个中心思想就是使得企业应用摆脱面向技术的凯发天生赢家一触即发官网的解决方案的束缚,轻松应对企业商业服务变化、发展的需要。企业环境中单个应用程序 是无法包容业务用户的(各种)需求的,即使是一个大型的erp凯发天生赢家一触即发官网的解决方案,仍然不能满足这个需求在不断膨胀、变化的缺口,对市场快速做出反应,商业用户只能 通过不断开发新应用、扩展现有应用程序来艰难的支撑其现有的业务需求。通过将注意力放在服务上,应用程序能够集中起来提供更加丰富、目的性更强的商业流 程。其结果就是,基于soa的企业应用系统通常会更加真实地反映出与业务模型的结合。服务是从业务流程的角度来看待技术的--这是从上向下看的。这种角度 同一般的从可用技术所驱动的商业视角是相反的。服务的优势很清楚:它们会同业务流程结合在一起,因此能够更加精确地表示业务模型、更好地支持业务流程。相 反我们可以看到以应用程序为中心的企业应用模型迫使业务用户将其能力局限为应用程序的能力。

  企业流程(enterprise process)是流经企业框架的空气,它赋予业务模型里的组件以生命,并更加清晰地定义了它们之间的关系。流程定义了同业务模型进行交互操作的专门方 法。例如,会计可能是企业服务系统的一个组件--但是将发票寄给客户却是一个业务流程。服务被定义用来支持业务流程,因而贯穿整个流程始终的是:各种服务 组件在流程和逻辑实现过程中的装配操作。理解业务流程是定制服务的关键所在。

二、soa 的描述所适用的原则

  • 利用显式的与实现无关的接口来定义服务。
  • 利用强调位置透明性和可互操作性的通信协议。
  • 封装可重用业务功能的服务的定义。

图 1说明了这些原则。注意,虽然 web 服务技术非常符合这些原则,但它并不是唯一符合这些原则的技术。

为了实现 soa,应用程序和基础架构都必须支持 soa 原则。启用 soa 应用程序涉及到创建服务接口,服务接口可以直接也可以间接地通过使用适配器用于现有的或新的功能。从最基本的级别来看,启用该基础架构涉及到规划功能来将服务请求路由和传递给正确的服务提供者。然而,基础架构支持在不影响服务的客户端的情况下由另一个服务实现替代原有的服务实现也是至关重要的。这不仅需要根据 soa 原则指定服务接口,而且需要基础架构允许客户端代码以独立于所涉及的服务位置和通信协议的方式来调用服务。

三、esb是什么?

根据,esb有如下特性:

  1. 它是面向服务架构的实现。
  2. 它通常是操作系统和编程语言无关的;它应能在java和.net应用程序之间工作。
  3. 它使用xml(可扩展标识语言)作为标准通信语言。
  4. 它支持web服务标准。
  5. 它支持消息传递(同步、异步、点对点、发布-订阅)。
  6. 它包含基于标准的适配器(如j2c/jca),用于集成传统系统。
  7. 它包含对服务编制(orchestration)和编排(choreography)的支持。
  8. 它包含智能、基于内容的路由服务(itenerary路由)。
  9. 它包含标准安全模型,用于esb的认证、授权和审计。
  10. 它包含转换服务(通常是使用xslt),在发送应用和接收应用之间转换格式,简化数据格式和值的转换。
  11. 它包含基于模式(schema)的验证,用于发送和接收消息。
  12. 它可以统一应用业务规则,充实其它来源的消息,分拆和组合多个消息,以及处理异常。
  13. 它可以条件路由,或基于非集中策略的消息转换,即不需要集中规则引擎。
  14. 它可监视不同sla(服务级别合约)的消息响应门限,以及在sla中定义的其它特性。
  15. 它(常常)简化“服务类别”,向更高或更低优先级用户做出适当的响应。
  16. 它支持队列,在应用临时不可用时用来保存消息。
  17. 它由(地理)分布式环境中的选择性部署应用适配器组成

对于其中一些厂商(ibm、微软)来说,esb是将一系列能力联结在一起的一种模式,而其他厂商认为esb是一种产品。在2005年,微软identity platform的产品经理rich turner:

esb[产品]是一根聪明的管子,用来连接各个愚笨的节点。[……]web service的途径让节点本身也变得聪明,减少了对底下聪明管道的需要,并确保了跨越任何平台与设备的开放的通讯。




seal 2010-12-07 16:45 发表评论
]]>
网站地图