锘??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩亚洲翔田千里在线,亚洲一久久久久久久久,亚洲精品成人网久久久久久http://www.tkk7.com/vikings/category/1406.htmlzh-cnFri, 02 Mar 2007 06:29:52 GMTFri, 02 Mar 2007 06:29:52 GMT60Tapestry 4.0 beta 鏂扮壒鎬?-7http://www.tkk7.com/Vikings/articles/18825.htmlVikingsVikingsTue, 08 Nov 2005 10:00:00 GMThttp://www.tkk7.com/Vikings/articles/18825.htmlhttp://www.tkk7.com/Vikings/comments/18825.htmlhttp://www.tkk7.com/Vikings/articles/18825.html#Feedback0http://www.tkk7.com/Vikings/comments/commentRss/18825.htmlhttp://www.tkk7.com/Vikings/services/trackbacks/18825.html Tapestry4鏂扮壒鎬?鍥?-婧愪唬鐮佹爣娉ㄧ殑寮傚父澶勭悊 Tapestry鏈潵鎻愪緵鐨刣ebug鍔熻兘灝卞崄鍒嗗己澶э紝4.0鐗堟湰涓彁渚涗簡鏇村姞璇︾粏鐨勬姤閿欐満鍒訛紝鍙互鏄劇ず閿欒鐨勪唬鐮侊紝騫跺湪鎶ラ敊鐨勫湴鏂瑰姞浜爣娉紝鍏蜂綋鎴浘璇風湅闄勪歡(璋佽兘鍛婅瘔鎴戞庝箞灝嗗浣欑殑鐓х墖鍒犻櫎鍛)
x1pc_jqddVOWRleOL7C8xpqaKS3AGUAvBT1MIRFANda_NKbU4VLeU4oBwzLDK28sn7jVevA1K85S_hQ00Oz6G95NKXye0F245JuqXGvav5vixzNs9HU6A4cW4wlt3uPg1dt.jpg

Tapestry4鏂扮壒鎬?浜?-Friendly URLs
Tapestry4.0浠ュ墠鐗堟湰涓殑URL涓鐩磋浜烘墍璇熺梾錛屽綋鐒剁幇鍦ㄥ凡緇忔湁寰堝鐨勮В鍐蟲柟
妗堬紝4.0鐗堟湰涓凡緇忓姝ゅ仛浜嗘敼榪涳紝
鍥犱負鐜板湪鐨勭増鏈渶瑕侀氳繃hivemind鏉ラ厤緗紝鎵浠ラ渶瑕佽緗甴ivemind.xml涓殑涓浜涘睘
鎬э紝鍏蜂綋閰嶇疆濡備笅錛?BR><?xml version="1.0"?> 
<module id="tapestry4" version="1.1.0">
 <contribution configuration-id="tapestry.url.ServiceEncoders">
  <page-service-encoder id="page" extension="html" service="page"/>
  <direct-service-encoder id="direct" stateless-extension="direct"
   stateful-extension="sdirect"/>
  <asset-encoder id="asset" path="/assets/"/>
  <extension-encoder id="extension" extension="svc" after="*"/>
 </contribution>
</module>

鍚屾椂web.xml涓姞鍏ユ槧灝勶細
<servlet>
<servlet-name>tapestry4</servlet-name>
<servlet-class> org.apache.tapestry.ApplicationServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>*.direct</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>*.sdirect</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>/assets/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>tapestry4</servlet-name>
<url-pattern>*.svc</url-pattern>
</servlet-mapping>
濡傛灉甯屾湜棣栭〉鐨勮皟鐢ㄤ笉鏄氳繃/app鏉ユ槧灝勶紝鍙互鍦╳eb.xml涓洿鏀箁edirect錛?BR><filter-name>redirect</filter-name>
<filter-class>org.apache.tapestry.RedirectFilter</filter-class>
<init-param>
<param-name>redirect-path</param-name>
<param-value>/Home.html</param-value>
</init-param>
</filter>
榪欐牱閿叆http://localhost:8080/tapestry4錛岀郴緇熷鑸埌http://localhost:
8080/tapestry4/Home.html,
娣誨姞涓涓狿age欏甸潰渚嬪Test.page錛屽湪Home.html涓姞鍏?lt;a href="#"
jwcid="@PageLink" page="Test">test</a>錛?BR>鍦ㄧ敓鎴愮殑Home.html涓敓鎴愮殑test鐨勯摼鎺ュ湴鍧涓猴細http://localhost:
8080/tapestry4/Test.html

Tapestry4鏂扮壒鎬?鍏?-鑷姩瀹氫綅欏甸潰綾繪枃浠?/STRONG>

鍏充簬姝ょ壒鎬х殑浠嬬粛璇峰弬鑰冿細http://jakarta.apache.org/tapestry/current/UsersGuide/page-class.html 璇存槑錛?BR>閫氫織鐐硅灝辨槸鎮ㄥ彲浠ヤ笉瀹氫箟.page鏂囦歡鎴栬呭畾涔夌殑.page鏂囦歡涓笉鎸囧畾class 灞炴э紝鑰岃鏈嶅姟鍣ㄨ嚜鍔ㄦ牴鎹?html鏂囦歡鐨勮礬寰勬潵瀵繪壘瀵瑰簲鐨勭被鏂囦歡銆?閰嶇疆錛?BR>鍦?application鐨勫畾涔夋枃浠朵腑娣誨姞錛? 榪欐牱濡傛灉鍦ㄦ枃妗f牴鐩綍涓嬫湁涓狧ome.html鏂囦歡錛屼綘灝卞彲浠ュ皢Home.java鏀懼埌 org.edynasty.pages(瀹為檯寮鍙戜腑閰嶇疆涓烘偍鑷繁鐨勫寘鍚?鍖呬腑錛宼apestry鑷姩鏍規嵁 Home.hmtl鏋勯爋rg.edynasty.pages.Home鏉ュ畾浣嶉〉闈㈢殑綾繪枃浠?褰撶劧鎮ㄤ篃鍙互鍦╓EB -INF鐩綍涓嬫斁涓涓狧ome.page,涓嶉渶瑕佸畾涔塩lass灞炴э紝tapestry鑷姩鎸夌収涓婅竟鐨勫師 鐞嗗畾浣嶃?鏁堟灉錛?BR>榪欐牱鎮ㄥ彲浠ヤ笉闇瑕佺淮鎶?page涓殑class灞炴э紝鐩存帴鏍規嵁.html鏂囦歡鏉ュ啓瀵瑰簲 鐨勭被鏂囦歡銆傝屼笖鍙互鏍規嵁涓氬姟閫昏緫鏉ュ畾涔夌洰褰曠粨鏋勶紝渚嬪灝?org.edynasty.pages.user瀹氫箟涓簎ser鐩稿叧鐨勭被錛?html涔熷氨鍙互鏀懼埌user鐩綍涓?杈癸紝鐩綍緇撴瀯濡備笅錛?user/ListUsers.html user/EditUser.html course/ListCourses.html course/EditCourses.html Home.html


Tapestry4鏂扮壒鎬?涓?-Application鍜孲ession鑼冨洿瀵硅薄鐨勪嬌鐢?/STRONG>
Application鍜孲ession鑼冨洿瀵硅薄鐨勪嬌鐢?BR>
鍏充簬姝ょ壒鎬х殑浠嬬粛璇峰弬鑰冿細http://jakarta.apache.org/tapestry/UsersGuide/state.html
璇存槑錛?BR>Application鍜孲ession鑼冨洿鐨勬蹇靛氨涓嶈浜嗭紝T4浠ュ墠鐨勭増鏈彧鍙互鍒嗗埆鎸囧畾涓涓璞★紝
浠ュ墠鐗堟湰鐨勫畾涔夊涓?
<property name="org.apache.tapestry.visit-class" value="your.package.Visit"/>
<property name="org.apache.tapestry.global-class" value="your.package.Global"/>,
T4涓彲浠ユ寚瀹氫換鎰忓鐨勫璞★紝鑰屼笖榛樿鐨剉isit鍜実lobal浠嶇劧鍙互浣跨敤銆?BR>
閰嶇疆錛氬湪hivemodule.xml鐨勫畾涔夋枃浠朵腑娣誨姞錛?BR><contribution configuration-id="tapestry.state.ApplicationObjects">
<state-object name="applicationUser" scope="application">
<create-instance class="org.edynasty.model.User"/>
</state-object>
<state-object name="sessionUser" scope="session">
<create-instance class="org.edynasty.model.User"/>
</state-object>
</contribution>
涓や釜user鍒嗗埆瀵瑰簲Application鍜孲ession鑼冨洿錛屽湪闇瑕佷嬌鐢╱ser鐨刾age涓敞鍏ワ細
<inject property="applicationUser" type="state" object="applicationUser"/>
<inject property="sessionUser" type="state" object="sessionUser"/>錛岄氳繃
getter鍜宻etter鏂規硶璋冪敤銆?BR>
鏁堟灉錛氭庝箞璇村憿錛屽彲浠ヤ笉闇瑕佸湪涓涓獀isit涓畾涔塏澶氬睘鎬э紝鍥犱負Session鐨勫垱寤洪渶瑕佽祫婧愶紝
鍙鎿嶄綔涓涓獀isit鐨勫睘鎬э紝灝遍渶瑕佸垱寤烘暣涓獀isit錛屽垎鍒畾涔変箣鍚庯紝鍙互鍦ㄩ渶瑕佸瓨鍙栨椂鍒嗗埆鍒涘緩銆?/TD>


Vikings 2005-11-08 18:00 鍙戣〃璇勮
]]>
TapeStry 4.0 beta 鏂扮壒鎬?1-3http://www.tkk7.com/Vikings/articles/18824.htmlVikingsVikingsTue, 08 Nov 2005 09:55:00 GMThttp://www.tkk7.com/Vikings/articles/18824.htmlhttp://www.tkk7.com/Vikings/comments/18824.htmlhttp://www.tkk7.com/Vikings/articles/18824.html#Feedback0http://www.tkk7.com/Vikings/comments/commentRss/18824.htmlhttp://www.tkk7.com/Vikings/services/trackbacks/18824.htmlhttp://spaces.msn.com/members/jface/PersonalSpace.aspx?_c01_blogpart=blogmgmt&_c=blogpart

Tapestry4鏂扮壒鎬?涓)錛峝efault binding types

涓銆乨efault binding types(榛樿鐨勭粦瀹氱被鍨?
    姣忎竴涓粍浠剁殑鍙傛暟閮藉彲浠ュ畾涔夐粯璁ょ殑緇戝畾綾誨瀷錛屽鏋滀竴涓粦瀹氱殑鍙傛暟娌℃湁鍓嶇紑錛屽皢浣跨敤榛樿鐨勭粦瀹氱被鍨嬨?BR>    涓嬮潰鐨勪唬鐮佸疄鐜板悓鏍風殑鍔熻兘:

   

     鍔犵矖鐨勯儴鍒嗘樉紺哄墠鍚庣殑鍙樺寲錛屼箣鎵浠ュ彲浠ヨ繖鏍峰畾涔夛紝鏄洜涓篒nsert緇勪歡瀹氫箟value鍙傛暟鐨勯粯璁ょ粦瀹氱被鍨嬩負ongl.
     娉ㄦ剰錛氶粯璁ょ殑緇戝畾鍙傛暟鎬繪槸鍙互琚樉寮忕殑緇戝畾澹版槑瑕嗙洊鎺夈?BR>    濡傛灉娌℃湁瀹氫箟榛樿鐨勭粦瀹氬弬鏁幫紝閭d箞鍦╤tml妯℃澘涓畾涔夌殑榛樿緇戝畾鍙傛暟涓簂iteral錛岄〉闈㈠畾涔夋枃浠墮噷鐨勯粯璁ょ粦瀹氬弬鏁頒負ognl

淇錛?/STRONG>

浠巄eta4鐗堟湰寮濮嬶紝姝ょ壒鎬у凡緇忚鍒犻櫎錛?

Beta4鐨刢hange log錛?/P>

 Remove default-binding attribute from element(HLS)

浣嗘槸鈥滃鏋滄病鏈夊畾涔夐粯璁ょ殑緇戝畾鍙傛暟錛岄偅涔堝湪html妯℃澘涓畾涔夌殑榛樿緇戝畾鍙傛暟涓簂iteral錛岄〉闈㈠畾涔夋枃浠墮噷鐨勯粯璁ょ粦瀹氬弬鏁頒負ognl鈥濊繖涓晥鏋滅粡嫻嬭瘯渚濈劧瀛樺湪銆?

鎬蹇碉細

姝ゆ鏂囧瓧鍦╞eta3涓瓨鍦紝beta4鍚庡氨鍒犳帀浜嗭紒

Binding Type Defaults

Tapestry 4.0 introduces a new idea: default binding types. Each component parameter may define a default binding type (using the default-binding attribute of the element).

If a binding reference does not have a prefix, the default binding type is used.

Because of this, the following two snippets are identical:

This works because the Insert component defines the default-binding for the value parameter to be "ognl". Likewise, the source and value parameters of the Foreach component are defined to be "ognl". However, the element parameter of the Foreach component has a binding type of "literal".

This is a decision made by the component author. If a particular parameter is (nearly) always bound using a particular binding type, then a default-binding may be set. The default binding can always be overriden with an explicit binding type prefix.

What about parameters that don't define a default binding type? The answer to this question (which includes all informal parameters), is that it depends on whether the parameter is bound in an HTML template, or in a page or component specification. In an HTML template, the default binding type is "literal". In a specification, the default binding type is "ognl".



Tapestry4鏂扮壒鎬?浜?錛峫istener method
浜屻乴istener method
     濡傛灉浣跨敤榪噒apestry鐨勫簲璇ョ煡閬搇istener鏂規硶鍦?.X浠ュ墠鐗堟湰涓殑瀹氫箟錛屽public void formSubmit(IRequestCycle cycle)錛屾柟娉曞繀欏?BR>鏈変竴涓狪RequestCycle鍙傛暟銆傚弬鏁扮殑鍙栧緱鏂瑰紡濡備笅錛歄bject[] parameters = cycle.getServiceParameters();
     鍦?.X涓弬鏁扮殑鍙栧緱鍙互閫氳繃浠ヤ笅涓ょ鏂瑰紡錛?BR>
  1. 璋冪敤IRequestCycle.getListenerParameters()鏂規硶,闇瑕佷紶鍏RequestCycle瀹炰緥浣滀負鍙傛暟銆?
  2. 鎸夌収鍙傛暟鐨勫0鏄庨『搴忎緷嬈″畾涔変負listener鏂規硶鐨勫弬鏁般?/LI>

     絎簩縐嶆柟娉曟瘮杈冪鍚堣蔣浠剁殑璁捐鎬濈淮錛岃屼笖鍙傛暟鐨勭被鍨嬪湪浼犲叆鍚庝繚瀛橈紝鑰屼笉鏄兂璞′腑鐨勭粺涓String綾誨瀷銆?BR>渚嬪錛?BR>. . .
鍏朵腑objectId涓篠tring綾誨瀷錛宨ndex涓篿nt錛屽0鏄庝腑浣跨敤浜嗛粯璁ょ殑鍙傛暟緇戝畾綾誨瀷銆?
瀵瑰簲鐨勬柟娉曞0鏄庡涓?
public void doClick(String objectId, int index)
{ . . . }
姝や負絎簩縐嶆柟寮忥紝鍙鏂規硶鐨勫畾涔夌鍚堣嚜鐒朵範鎯紝褰撶劧浣犱篃鍙互閫氳繃浼犵粺鐨勬柟娉曪紝濡備笅鎵紺猴細 public void doClick(IRequestCycle cycle)
{ Object[] parameters = cycle.getListenerParameters();
String objectId = (String)parameters[0];
int index = ((Integer)parameters[1]).intValue(); . . . } 
榪欑鏂瑰紡鏄負浜嗗悜鍚庡吋瀹逛互鍓嶇殑鐗堟湰錛屽綋鐒朵篃閫傜敤閭g鍙傛暟鏁扮洰涓嶇‘瀹氱殑鎯呭喌銆?Tapestry榛樿鎼滅儲浠ヤ笅鐨勬柟娉曞0鏄庯細

  • public void method(parameters)錛堥〉闈㈢殑璺寵漿 cycle.activate()濡備綍瀹炵幇錛燂級
  • public void method(IRequestCycle cycle, parameters) 錛堝懼悜浜庝嬌鐢ㄦ鏂瑰紡錛?
  • public void method()錛堟棤闇鍙傛暟浼犻掑拰欏甸潰璺寵漿鐨勬儏鍐碉紝浼拌鍙兘鎬т笉澶э級
  • public void method(IRequestCycle cycle)錛堜紶緇熸柟寮忥級
   涓嶈璇曞浘閫氳繃鍙傛暟鐨勭被鍨嬫潵鏄犲皠listener鏂規硶錛宼apestry鏄牴鎹弬鏁扮殑鏁扮洰鏉ョ‘瀹氭柟娉曠殑銆?BR>
Tapestry4鏂扮壒鎬?涓?錛峠lobal property source
涓夈丟lobal Property Source(鍏ㄥ眬鐨勬秷鎭睘鎬ч厤緗?
娑堟伅灞炴ч厤緗惉璧鋒潵涓嶆槸寰堣垝鏈嶏紝鏆傛椂榪欐牱縐板懠濂戒簡錛屾秷鎭睘鎬ч厤緗篃灝辨槸閫氱О鐨勫浗闄呭寲閰?BR>緗紝閫氳繃閰嶇疆涓涓猵roperties鏂囦歡浣夸笉鍚岃璦鐨勬祻瑙堣呯湅鍒板搴旇璦鐨勭増鏈紝涓鑸?BR>鐨勪嬌鐢ㄥ涓嬶紝涓涓猵age欏甸潰錛屼緥濡俥xample.page,鍚岀洰褰曚笅鏀句竴涓?BR>example.properties,鍦?example.html涓嬌鐢?SPAN key="key">鏉ユ寚瀹氭樉紺哄鹼紝
涓枃鍙互浣跨敤example_zh_CN.properties鏉ラ厤緗傜湅璧鋒潵鎸烘柟渚跨殑錛屽彲
tapestry4.0浠ュ墠鐨勭増鏈殑鍥介檯鍖栦笉鏀寔鍏ㄥ眬鐨勫睘鎬ч厤緗枃浠訛紝蹇呴』姣忎釜欏甸潰瀹氫箟
鑷繁鐨勶紝鏃犳硶鍑犱釜欏甸潰鍏變韓錛屼絾瀹為檯寮鍙戜腑錛屽欏甸潰鍏變韓灞炴ч厤緗槸寰堝父瑙佺殑錛?BR>tapestry4.0涓彲浠ラ氳繃浠ヤ笅鏂瑰紡鑾峰緱鍏ㄥ眬鐨勫睘鎬ч厤緗枃浠訛細
鍒涘緩涓涓窡浣犵殑欏圭洰鍏ㄥ眬閰嶇疆鏂囦歡錛屽yourApp.application,姝ゆ枃浠跺湪4.0浠ュ墠鐨?BR>鐗堟湰涓槸蹇呴』鐨勶紝4.0涓鏋滄病鏈夊繀瑕侀厤緗紝鍙互涓嶉渶瑕佹鏂囦歡(鎵繙浜?,yourApp
鏄牴鎹綘鍦╳eb.xml瀹氫箟鐨勶紝渚嬪

tapesty4
org.apache.tapestry.ApplicationServlet
1

閭e睘鎬у畾涔夋枃浠跺氨搴旇鏄痶apestry4.properties,榪欐牱鍦ㄦ鏂囦歡涓畾涔変竴涓細test=
嫻嬭瘯錛屽湪Home.html涓嬌鐢?lt; span key="test">test,鐪嬪埌鈥滄祴璇曗濇紜樉紺恒?BR>


Vikings 2005-11-08 17:55 鍙戣〃璇勮
]]>
Jive璁哄潧涓嶴pring妗嗘灦,緇忓吀浠g爜鍜屾灦鏋? http://www.tkk7.com/Vikings/articles/4815.htmlVikingsVikingsWed, 18 May 2005 15:46:00 GMThttp://www.tkk7.com/Vikings/articles/4815.htmlhttp://www.tkk7.com/Vikings/comments/4815.htmlhttp://www.tkk7.com/Vikings/articles/4815.html#Feedback0http://www.tkk7.com/Vikings/comments/commentRss/4815.htmlhttp://www.tkk7.com/Vikings/services/trackbacks/4815.html鏉挎ˉ閲屼漢 http://www.jdon.com 2004/07/01

銆銆娌℃湁涓縐嶆柊鎶鏈槸鍑┖璇炵敓鐨勶紝瀹冪殑钀岃娊鎴栬儦鑳庢繪槸鎴栧鎴栧皯鏄劇幇浜庝互鍓嶇殑鎶鏈腑錛孞ive璁哄潧鏄ぇ瀹舵綔蹇冪爺絀剁殑璁捐鍨嬪簲鐢ㄧ▼搴忥紝鍏剁浉鍏寵В鏋愬彲瑙佹湰鏍忕殑GoF璁捐妯″紡涓撴爮銆?/P>

銆銆Jive鍜孲pring鍚屼負鐢盝avaBeans緇勬垚鐨凧2EE Web緋葷粺錛孞ive浣滀負鏃╂湡鎴愬姛璁捐妗堜緥錛屽叾涓昏鏋舵瀯鎴愪負澶у鏁扮函JavaBeans緋葷粺鐨勬祦琛屾灦鏋勶紝Spring涔熶笉渚嬪銆?/P>

銆銆Spring妗嗘灦闄や簡鏄竴縐峎eb灞傚簲鐢ㄦ鏋訛紝榪樻彁渚涗簡璁塊棶EJB灞傜殑鎺ュ彛錛屼篃鏈塉DBC/ORM鐨勭洿鎺ユ搷浣溿係pring妗嗘灦涓昏欖呭姏鏄嬌鐢↖oC妯″紡鍜孉OP瀹炵幇浜咼ive緋葷粺鐨勯氱敤鍔熻兘錛屼粠鑰屼嬌寰桱ive榪欐牱鐨勭函JavaBeans鏋舵瀯璁捐鍙互閲嶇敤鍦ㄥ叾瀹冪郴緇熶腑銆?/P>

銆銆濡傛灉浣犳劅鎱ㄤ簬Jive鐨勮璁$悊蹇碉紝浣嗘槸鍙堣嫤浜庢棤娉曢噸鐢ㄥ叾璁捐鏃訛紝Spring妗嗘灦宸茬粡甯綘瀹炵幇浜嗐?/P>

銆銆鍚屾椂涔熻娉ㄦ剰鍒幫細Spring妗嗘灦綾諱技鈥滄潅鐑┾濓紝瀹冨寘鍚簡寰堝J2EE搴旂敤鐨勫伐鍏鳳紝綾誨瀵笶JB鐨勮皟鐢紝瀹冪殑MVC涓嶴truts JSF涔熸槸鐩哥珵浜夌殑錛屼互綰疘oc鍜孉OP璁捐鏉ヨ錛孲pring妗嗘灦涔熸槸涓縐嶅緢閲嶇殑(Heavy銆乄eight)妗嗘灦銆係pring妗嗘灦鏄鏉傜殑錛屽鏋滄兂浠pring鏇夸唬EJB錛岄偅涔堟棤鐤戞寜浜嗚懌鑺︽誕璧風摙銆?/P>

銆銆灝咼ive璁哄潧鍜孲pring妗嗘灦鑱旂郴璧鋒潵錛屼細甯姪鏇村鐞嗚В璁捐妯″紡鐨勭▼搴忓憳榪呴熸帉鎻℃渶鏂扮殑璁捐鎬濇疆錛岃屼笉鏄竴縐嶈煩璺冨紡鐨勫己榪帴鍙椼傚鏋滀綘瀵笿ive鏈夊緢濂界殑鐮旂┒錛屽皢浼氬彂鐜癝pring妗嗘灦鏄疛ive璁捐鐨勬洿鍔犻氱敤鐨勬彁鍗囥?/P>

銆銆鍦↗ive涓?ForumFactory鏄暣涓郴緇熺殑鍏ュ彛鍜岀獊鐮寸偣錛孞ive閫氳繃ForumFactory灝嗘暣涓郴緇熸帉鎺у湪涓涓伐鍘傛ā寮忎笅錛岃繖鏍峰仛鐨勫ソ澶勬槸錛氫究浜庢帶鍒剁郴緇熺殑JavaBeans錛屼緥濡傦紝瀹㈡埛绔氳繃ForumFactory鍙垱寤轟竴涓狥orum鎴栬闂竴涓狥orum錛屼絾鏄槸鍚︽湁鏉冮檺璁塊棶鍛紵濡備笅鍥撅細


銆銆
銆銆 Jive閫氳繃ForumFactory灝嗚繖縐嶈闂紩瀵煎埌鐩稿簲鐨凱roxy綾誨幓錛屽ForumFactoryProxy綾葷瓑錛岄氳繃浠g悊妯″紡瀵硅繖浜涚被榪涜鏉冮檺鎺у埗璁塊棶銆傝繖鏄唬鐞嗘ā寮忕殑涓涓富瑕佺敤澶勶紝浣嗘槸鐮旇Jive鐨勪唬鐞嗘ā寮忎細鍙戠幇錛岃涓烘瘡涓被瀹炵幇涓涓狿roxy綾伙紝闈炲父鐞愮錛屾湁娌℃湁鏇翠紭闆呯殑鏂瑰紡鍛紵 褰撶劧浣跨敤鍔ㄦ佷唬鐞嗐?/P>

銆銆Spring妗嗘灦鍩烘湰鏄娊璞′笂榪拌璁★紝Spring妗嗘灦瀵規墍鏈塉avaBeans鐨勭鐞嗕篃鏄熀浜庝竴涓誨叆鍙ean Factory鏈哄埗錛屼笉鍚岀殑鏄紝BeanFactory鍙互 綆$悊鎵鏈夊簲鐢ㄧ殑JavaBeans錛屼嬌鐢ㄨ呭彧瑕佸皢鑷繁鐨凧avaBeans閫氳繃閰嶇疆鏂囦歡鍛婅瘔BeanFactory錛岄偅涔圔eanFactory灝嗕細鍔犺澆榪欎簺JavaBeans錛屼緥濡傦細

銆銆<beans>
銆銆銆銆<bean id="exampleBean" class="eg.ExampleBean"/>
銆銆銆銆<bean id="anotherExample" class="eg.ExampleBeanTwo"/>
銆銆</beans>

銆銆鍦↗ive涓紝ForumFactory鍔犺澆Jive鑷繁鐨凧avaBeans鏄氳繃宸ュ巶瀹炵幇DbForumFactory瀹炵幇鐨勶紝濡備笅浠g爜錛孌bForumFactory寮曞彂浜嗗悗鍙頒竴緋誨垪鍔熻兘瀹炵幇錛岃繖鏄旱鍚戯紝鑰宺eturn new ForumFactoryProxy榪欎釜璇彞鍒欑被浼煎紩鏉ヤ竴涓垏闈紝浠庝竴涓í鍚戞柟闈㈠疄鐜頒簡鏉冮檺璁塊棶絳夊姛鑳斤細

private static String className = "com.jivesoftware.forum.database.DbForumFactory";

public static ForumFactory getInstance(Authorization authorization) {
銆銆銆銆 //If no valid authorization passed in, return null.
銆銆銆銆 if (authorization == null) {
銆銆銆銆銆銆 return null;
銆銆銆銆 }
銆銆銆銆 //浠ヤ笅浣跨敤浜哠ingleton 鍗曟佹ā寮?
銆銆銆銆 if (factory == null) {
銆銆銆銆銆銆 synchronized(initLock) {
銆銆銆銆銆銆銆銆 if (factory == null) {
銆銆銆銆銆銆銆銆銆銆銆銆 ......

銆銆銆銆 銆銆銆銆 try {
銆銆銆銆銆銆銆銆銆銆銆銆銆銆 //鍔ㄦ佽漿杞界被
銆銆銆銆銆銆銆銆銆銆銆銆銆銆 Class c = Class.forName(className);
銆銆銆銆銆銆銆銆銆銆銆銆銆銆 factory = (ForumFactory)c.newInstance();
銆銆銆銆銆銆銆銆銆銆 }
銆銆銆銆銆銆銆銆銆銆 catch (Exception e) {
銆銆銆銆銆銆銆銆銆銆銆銆銆銆 return null;
銆銆銆銆銆銆銆銆銆銆 }
銆銆銆銆銆銆銆銆 }
銆銆銆銆銆銆 }
銆銆銆銆 }

銆銆銆銆 //Now, 榪斿洖 proxy.鐢ㄦ潵闄愬埗鎺堟潈瀵筬orum鐨勮闂?
銆銆銆銆 return new ForumFactoryProxy(authorization, factory, 銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆 factory.getPermissions(authorization));
銆銆 }

銆銆鏃㈢劧Spring妗嗘灦涔熸槸閫氳繃涓涓狟ean Factory鍔犺澆鎵鏈夌殑綾伙紝閭d箞瀹冩槸濡備綍鍔犺澆鐨勶紵閫氳繃IoC妯″紡錛屼篃灝辨槸渚濊禆鎬ф敞灝勬ā寮忋傚湪鎴戜互鍓嶆枃绔犫?A target=_blank>IoC妯″紡鈥濅腑錛屾垜姣旇緝浜咶actory宸ュ巶妯″紡鍒涘緩瀵硅薄鍜孖oc妯″紡鐨勬敞灝勫璞″疄鐜頒箣闂寸殑寮傚悓錛孖oc鐩告瘮宸ュ巶妯″紡鍒欐洿鍔犺В鑰︿簡璋冪敤鑰呭拰琚皟鐢ㄨ呬箣闂村叧緋伙紝浣跨敤Ioc妯″紡錛屾棤闇鍦ㄨ皟鐢ㄨ呬唬鐮佷腑娑夊強琚皟鐢ㄨ呯殑鍏蜂綋瀹炵幇銆?/P>

銆銆Spring妗嗘灦涓嶄絾鍙互鍚戣嚜宸卞鍣ㄤ腑娉ㄥ皠搴旂敤鑰呰嚜宸卞畾涔夌殑JavaBeans錛堜篃灝辨槸鍒涘緩瀹冧滑錛夛紝鑰屼笖涔熷彲浠ュ悜榪欎簺JavaBeans閫氳繃set鏂規硶瀹炵幇鏁版嵁璧嬪箋?/P>

銆銆涓鏃ean Factory榪愯鏃跺埢鎺岀榪欎簺嬋媧葷殑瀵硅薄錛孲pring閫氳繃AOP鏂瑰紡錛屼粠涓涓í鍒囬潰涓鴻繖浜汮avaBeans鎻愪緵浜嗘潈闄愯闂佷簨鍔¢攣絳夐氱敤鍔熻兘鐨勫疄鐜幫紝榪欑瀹炵幇鏄熀浜庡姩鎬佷唬鐞嗘ā寮忥紝鑰屽姩鎬佷唬鐞嗘槸AOP瀹炵幇鐨勪竴縐嶆柟寮忋?/P>

銆銆鍓嶉潰鎻愬埌錛孞ive涓嬌鐢ㄤ唬鐞嗘ā寮忓疄鐜版潈闄愯闂紝姣斾唬鐞嗘ā寮忔洿鍔犵畝媧佸拰鎶借薄鐨勬槸鍔ㄦ佷唬鐞嗭紝浣跨敤鍔ㄦ佷唬鐞嗗皢浣垮緱璋冪敤鑰呮棤闇鎸囧畾琚皟鐢ㄨ呯殑浠g悊綾伙紝榪欐槸鍔ㄦ佷唬鐞嗗尯鍒唬鐞嗘ā寮忕殑鏈川銆?/P>

銆銆鍔ㄦ佷唬鐞嗚繖涓浼樺娍錛屽張鍙互浣撶幇鍦ㄥ彟澶栦竴鍙ヨ瘽璇笂錛氬姩鎬佷唬鐞嗘嫤鎴簡璋冪敤鑰呭琚皟鐢ㄨ呯殑璋冪敤錛屾鏄繖涓鍔熻兘絎﹀悎浜咥OP鐨勬嫤鎴櫒鍔熻兘錛屼負AOP瀹炵幇鎻愪緵浜嗗彲鑳姐?/P>

銆銆Spring妗嗘灦浣跨敤浜嗗姩鎬佷唬鐞嗗疄鐜扮殑AOP錛屾鏄氳繃鍔ㄦ佷唬鐞嗘満鍒舵嫤鎴簡澶栫晫瀵笲ean Factory綆$悊涓嬬殑瀵硅薄鐨勮皟鐢ㄣ傚涓嬪浘錛?/P>

 

銆銆浠ヤ笂鍙槸澶т綋瑙f瀯浜哠pring鐨勬灦鏋勶紝Spring妗嗘灦鍦ㄨ繖涓灦鏋勪笅錛岃繕欏哄甫浜嗗緢澶氬叾瀹冨姛鑳斤紝濡俉eb MVC銆?DAO JDBC銆?DAO ORM 銆佷互鍙妑emote錛屽悗鑰呯被浼兼垜璁捐鐨凟JB鏂規硶璋冪敤妗嗘灦銆?/P>

銆銆鎬諱箣錛孲pring紜疄鏄疘oc鍜孉OP鐨勫畬緹庡簲鐢紝Ioc鐢ㄦ潵瑁呰澆JavaBeans錛屽垱寤鴻繖浜涘璞★紱AOP鐢ㄦ潵鎷︽埅榪欎簺瀵硅薄鐨勪嬌鐢紝榪欐墠鏄鏋惰璁$殑蹇呯劧緇忓吀鏂瑰紡銆?/P>

 

ZT:
http://www.zahui.com/html/6/40477.htm



Vikings 2005-05-18 23:46 鍙戣〃璇勮
]]>
EJB 宸ヤ綔鍘熺悊 (ZT) -鐩歌鎭ㄦ櫄http://www.tkk7.com/Vikings/articles/4013.htmlVikingsVikingsTue, 03 May 2005 19:04:00 GMThttp://www.tkk7.com/Vikings/articles/4013.htmlhttp://www.tkk7.com/Vikings/comments/4013.htmlhttp://www.tkk7.com/Vikings/articles/4013.html#Feedback0http://www.tkk7.com/Vikings/comments/commentRss/4013.htmlhttp://www.tkk7.com/Vikings/services/trackbacks/4013.html鍘熷笘: xanada ----
http://www.hibernate.org.cn/viewtopic.php?t=3832&postdays=0&postorder=asc&start=0


鍓嶄袱澶╁湪榪欎釜鐗堝潡鐨勭簿鍗庡尯閲岀炕鍒頒簡Robbin鍏充簬EJB鐨勮皟鐢ㄥ師鐞嗙殑鍒嗘瀽錛屽彈鐩婇潪嫻咃紝浣嗘劅瑙夌敤綰枃瀛楁潵琛ㄨ揪鏁堟灉浼間箮涓嶅鐩磋錛岃屼笖瀵筊MI鐨勯槓榪頒篃鐣ュ珜灝戜簡浜涖傝繖閲屾垜鏍規嵁鑷繁鐨勪竴鐐逛綋浼氾紝鍦≧obbin甯栧瓙鐨勫熀紜涓婂啀鏉ヨ璇磋繖涓瘽棰橈紝渚涘ぇ瀹跺弬鑰冦?

棣栧厛錛屾垜鎯沖厛璇磋RMI鐨勫伐浣滃師鐞嗭紝鍥犱負EJB姣曠珶鏄熀浜嶳MI鐨勫槢銆傚簾璇濆氨涓嶅璁蹭簡錛孯MI鐨勬湰璐ㄥ氨鏄疄鐜板湪涓嶅悓JVM涔嬮棿鐨勮皟鐢紝宸ヤ綔鍘熺悊鍥懼涓嬶細



瀹冪殑瀹炵幇鏂規硶灝辨槸鍦ㄤ袱涓狫VM涓悇寮涓涓猄tub鍜孲keleton錛屼簩鑰呴氳繃socket閫氫俊鏉ュ疄鐜板弬鏁板拰榪斿洖鍊肩殑浼犻掋?

鏈夊叧RMI鐨勪緥瀛愪唬鐮佺綉涓婂彲浠ユ壘鍒頒笉灝戯紝浣嗙粷澶ч儴鍒嗛兘鏄氳繃extend the interface java.rmi.Remote瀹炵幇錛屽凡緇忓皝瑁呯殑寰堝畬鍠勪簡錛屼笉鍏嶄嬌浜烘湁闆鵑噷鐪嬭姳鐨勬劅瑙夈備笅闈㈢殑渚嬪瓙鏄垜鍦ㄣ奅nterprise JavaBeans銆嬮噷鐪嬪埌鐨勶紝铏界劧寰堢矖緋欙紝浣嗗緢鐩磋錛屽埄浜庡緢蹇簡瑙e畠鐨勫伐浣滃師鐞嗐?

1. 瀹氫箟涓涓狿erson鐨勬帴鍙o紝鍏朵腑鏈変袱涓猙usiness method, getAge() 鍜実etName()

java浠g爜: 


public interface Person {
    public int getAge() throws Throwable;
    public String getName() throws Throwable;
}



2. Person鐨勫疄鐜癙ersonServer綾?
java浠g爜: 


public class PersonServer implements Person {
    int age;
    String name;

    public PersonServer(String name, int age) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}



3. 濂斤紝鎴戜滑鐜板湪瑕佸湪Client鏈哄櫒涓婅皟鐢╣etAge()鍜実etName()榪欎袱涓猙usiness method錛岄偅涔堝氨寰楃紪鍐欑浉搴旂殑Stub(Client绔?鍜孲keleton(Server绔?紼嬪簭銆傝繖鏄疭tub鐨勫疄鐜幫細
java浠g爜: 


import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;

public class Person_Stub implements Person {
    Socket socket;

    public Person_Stub() throws Throwable {
        // connect to skeleton
        socket = new Socket("computer_name", 9000);
    }

    public int getAge() throws Throwable {
        // pass method name to skeleton
        ObjectOutputStream outStream =
            new ObjectOutputStream(socket.getOutputStream());
        outStream.writeObject("age");
        outStream.flush();

        ObjectInputStream inStream =
            new ObjectInputStream(socket.getInputStream());
        return inStream.readInt();
    }

    public String getName() throws Throwable {
        // pass method name to skeleton
        ObjectOutputStream outStream =
            new ObjectOutputStream(socket.getOutputStream());
        outStream.writeObject("name");
        outStream.flush();

        ObjectInputStream inStream =
            new ObjectInputStream(socket.getInputStream());
        return (String)inStream.readObject();
    }
}



娉ㄦ剰錛孭erson_Stub鍜孭ersonServer涓鏍鳳紝閮絠mplements Person銆傚畠浠兘瀹炵幇浜唃etAge()鍜実etName()涓や釜business method錛屼笉鍚岀殑鏄疨ersonServer鏄湡鐨勫疄鐜幫紝Person_Stub鏄緩绔媠ocket榪炴帴錛屽茍鍚慡keleton鍙戣姹傦紝鐒跺悗閫氳繃Skeleton璋冪敤PersonServer鐨勬柟娉曪紝鏈鍚庢帴鏀惰繑鍥炵殑緇撴灉銆?

4. Skeleton瀹炵幇
java浠g爜: 


import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.net.ServerSocket;

public class Person_Skeleton extends Thread {
    PersonServer myServer;

    public Person_Skeleton(PersonServer server) {
        // get reference of object server
        this.myServer = server;
    }

    public void run() {
        try {
            // new socket at port 9000
            ServerSocket serverSocket = new ServerSocket(9000);
            // accept stub's request
            Socket socket = serverSocket.accept();

            while (socket != null) {
                // get stub's request
                ObjectInputStream inStream =
                    new ObjectInputStream(socket.getInputStream());
                String method = (String)inStream.readObject();

                // check method name
                if (method.equals("age")) {
                    // execute object server's business method
                    int age = myServer.getAge();
                    ObjectOutputStream outStream =
                        new ObjectOutputStream(socket.getOutputStream());

                    // return result to stub
                    outStream.writeInt(age);
                    outStream.flush();
                }

                if(method.equals("name")) {
                    // execute object server's business method
                    String name = myServer.getName();
                    ObjectOutputStream outStream =
                        new ObjectOutputStream(socket.getOutputStream());

                    // return result to stub
                    outStream.writeObject(name);
                    outStream.flush();
                }
            }
        } catch(Throwable t) {
            t.printStackTrace();
            System.exit(0);
        }
    }

    public static void main(String args []) {
        // new object server
        PersonServer person = new PersonServer("Richard", 34);

        Person_Skeleton skel = new Person_Skeleton(person);
        skel.start();
    }
}



Skeleton綾?extends from Thread錛屽畠闀塊┗鍦ㄥ悗鍙拌繍琛岋紝闅忔椂鎺ユ敹client鍙戣繃鏉ョ殑request銆傚茍鏍規嵁鍙戦佽繃鏉ョ殑key鍘昏皟鐢ㄧ浉搴旂殑business method銆?

5. 鏈鍚庝竴涓紝Client鐨勫疄鐜?
java浠g爜: 


public class PersonClient {
    public static void main(String [] args) {
        try {
            Person person = new Person_Stub();
            int age = person.getAge();
            String name = person.getName();
            System.out.println(name + " is " + age + " years old");
        } catch(Throwable t) {
            t.printStackTrace();
        }
    }
}



Client鐨勬湰璐ㄦ槸錛屽畠瑕佺煡閬揚erson鎺ュ彛鐨勫畾涔夛紝騫跺疄渚嬩竴涓狿erson_Stub錛岄氳繃Stub鏉ヨ皟鐢╞usiness method錛岃嚦浜嶴tub鎬庝箞鍘誨拰Server娌熼氾紝Client灝變笉鐢ㄧ浜嗐?

娉ㄦ剰瀹冪殑鍐欐硶錛?
Person person = new Person_Stub();
鑰屼笉鏄?
Person_Stub person = new Person_Stub();

涓轟粈涔堬紵鍥犱負瑕侀潰鍚戞帴鍙g紪紼嬪槢錛屽懙鍛點?

鎰熻阿鎮ㄦ湁鑰愬績鐪嬪埌榪欓噷錛屽叧浜嶳MI錛屾垜鎯寵鐨勫氨榪欎箞澶氫簡銆備絾鏄ソ璞¤繕娌″啓鍒癊JB錛屾湰浜哄氨绱簡涓崐姝伙紝綆椾簡錛屾垜榪樻槸鍏堝幓鐫¤錛屾槑澶╁啀寰涓嬬畫鍚с傘傘?BR>
鏈漢娌℃湁鐢ㄨ繃Weblogic錛岃繖閲屽氨緇撳悎WebSphere鏉ヨ璁插悇涓被鐨勮皟鐢ㄥ叧緋誨惂銆?

鍋囧畾鎴戜滑瑕佸垱寤轟竴涓鍙朥ser淇℃伅鐨凷essionBean錛岄渶瑕佹垜浠啓鐨勬湁3涓枃浠訛細
1. UserServiceHome.java
Home鎺ュ彛

2. UserService.java
Remote鎺ュ彛

3. UserServiceBean.java
Bean瀹炵幇

WSAD鏈緇堜細鐢熸垚10涓猚lass銆傚叾瀹?涓槸浠涔堝憿錛熸垜浠竴涓竴涓暟榪囨潵錛?

4. _UserServiceHome_Stub.java
榪欎釜褰撶劧灝辨槸Home鎺ュ彛鍦–lient绔?鍔ㄦ佸姞杞?鐨凷tub綾諱簡錛屽畠implements UserServiceHome銆?

5. _EJSRemoteStatelessUserServiceHome_a940aa04_Tie.java
Home鎺ュ彛鍦⊿erver绔殑Skeleton綾伙紝"a940aa04"搴旇鏄殢鏈虹敓鎴愮殑錛屾墍鏈夊叾浠栫殑鐩稿叧class鍚嶉噷閮戒細鏈夎繖涓爣蹇椾覆錛孴ie鏄疌orba瀵筍keleton鐨勫彨娉曘?

6. EJSRemoteStatelessUserServiceHome_a940aa04.java
Home鎺ュ彛鍦⊿erver绔殑瀹炵幇錛屽綋鐒訛紝瀹冧篃implements UserServiceHome銆?

7. EJSStatelessUserServiceHomeBean_a940aa04.java
鐢?6璋冪敤錛宑reate _UserService_Stub銆?涓轟粈涔?6涓嶈兘鐩存帴create _UserService_Stub鍛紵鍚庨潰鍐嶈銆?

8. _UserService_Stub.java
Remote鎺ュ彛鍦–lient绔?鍔ㄦ佸姞杞?鐨凷tub綾匯傚畠implements UserService銆?

9. _EJSRemoteStatelessUserService_a940aa04_Tie.java
Remote鎺ュ彛鍦⊿erver绔殑Skeleton綾匯?

10. EJSRemoteStatelessUserService_a940aa04.java
Remote鎺ュ彛鍦⊿erver绔殑瀹炵幇錛屽綋鐒訛紝瀹冧篃implements UserService銆傚茍涓旓紝瀹冭礋璐h皟鐢║serServiceBean鈥斺斾篃灝辨槸鎴戜滑鎵鍐欑殑Bean瀹炵幇綾燴斺旈噷闈㈢殑business method銆?

閭d箞錛屽悇涓被涔嬮棿鐨勮皟鐢ㄥ叧緋誨埌搴曟槸鎬庝箞鏍風殑鍛紵綆鍗曠殑璇達紝灝辨槸涓ゆRMI寰幆銆?BR>
鍏堟潵鐪嬬湅Client绔殑紼嬪簭鏄庝箞鍐欑殑錛?

java浠g爜: 


try {
    InitialContext ctx = new InitialContext();

    //絎竴姝?/SPAN>
    UserServiceHome home =
        (UserServiceHome) PortableRemoteObject.narrow(
            ctx.lookup(JNDIString),
            UserServiceHome.class);

    //home: _UserServiceHome_Stub
    System.out.println(home.toString());

    //絎簩姝?/SPAN>
    UserService object = home.create();

    //ojbect: _UserService_Stub
    System.out.println(object.toString());

    //絎笁姝?/SPAN>
    int userId = 1;
    UserInfo ui = object.getUserInfo(userId);
}



鍦ㄧ涓姝ヤ箣鍚庯紝鎴戜滑寰楀埌浜嗕竴涓猆serServiceHome(interface)瀹氫箟鐨勫璞ome錛岄偅涔堬紝home鍒板簳鏄摢涓猚lass鐨刬nstance鍛紵鐢╠ebug鐪嬩竴涓嬶紝鐭ラ亾浜唄ome鍘熸潵灝辨槸_UserServiceHome_Stub鐨勫疄渚嬨?

浠庣浜屾寮濮嬶紝灝辨槸鎴戜滑鐨勫叧娉ㄦ墍鍦紝铏界劧鍙湁綆鍗曠殑涓琛屼唬鐮侊紝
UserService object = home.create();
浣嗘槸浠栬儗鍚庣殑緋葷粺鏄庝箞榪愬仛鐨勫憿錛熸垜浠繘鍏ヤ唬鐮佹潵鐪嬪惂錛?

1. 璋冪敤home.create()
java浠g爜: 


UserServiceHome home;
UserService obj = home.create();



2. 瀹為檯鏄皟鐢╛UserServiceHome_Stub.create()錛屽湪榪欎釜鏂規硶閲岄潰錛孲tub鍚慡keleton鍙戦佷簡涓涓猚reate鐨勫瓧涓詫細
java浠g爜: 


org.omg.CORBA.portable.OutputStream out = _request("create", true);
in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);



3. Server绔殑Skeleton鎺ユ敹Stub鍙戞潵鐨剅equest錛屽茍璋冪敤鐩稿簲鐨勬柟娉曪細
java浠g爜: 


_EJSRemoteStatelessUserServiceHome_a940aa04_Tie._invoke() {
    ......
    switch (method.length()) {
        case 6:
            if (method.equals("create")) {
                return create(in, reply);
            }
        ......
    }
}



java浠g爜: 


_EJSRemoteStatelessUserServiceHome_a940aa04_Tie.create() {
    EJSRemoteStatelessUserServiceHome_a940aa04 target = null;
    result = target.create();
    org.omg.CORBA.portable.OutputStream out = reply.createReply();
    Util.writeRemoteObject(out,result);
    return out;
}



4. Skeleton璋冪敤鐨勬槸UserServiceHome鐨凷erver绔疄鐜扮被鐨刢reate鏂規硶
java浠g爜: 


EJSRemoteStatelessUserServiceHome_a940aa04.create() {
    UserService _EJS_result;
    _EJS_result = EJSStatelessUserServiceHomeBean_a940aa04.create();
}



5. #4鍙堣皟鐢‥JSStatelessUserServiceHomeBean_a940aa04.create()
java浠g爜: 


    UserService result = super.createWrapper(new BeanId(this, null));



鑷蟲錛屾垜浠粓浜庣粨鏉熶簡絎竴涓猂MI寰幆錛屽茍寰楀埌浜哛emote鎺ュ彛UserService鐨凷tub綾籣UserService_Stub錛屽氨鏄?5閲岄潰鐨剅esult銆?

榪欓噷鏈変竴涓棶棰橈紝涓轟粈涔?4涓嶇洿鎺reate _UserService_Stub錛岃屽張杞簡涓閬?5鐨勬墜鍛紵鍥犱負#4 extends from EJSWrapper錛屽畠娌℃湁鑳藉姏create Stub錛屽洜姝ゅ繀欏誨熷姪#5錛寃hich extends from EJSHome錛岃繖鏍鋒墠鍙互鐢熸垚涓涓猄tub銆傚鏋滀笉鏄負浜嗙敓鎴愯繖涓猄tub錛屽簲璇ュ彲浠ヤ笉璧?5榪欎竴姝ャ?BR>
OK, now we got the object which is instanceOf _UserService_Stub, and implements UserService

鐜板湪鎴戜滑鐨凜lient绔蛋鍒扮涓夋浜嗭細
UserInfo ui = object.getUserInfo(userId);

緇х畫鐪嬩唬鐮侊紝寮濮嬬浜屼釜RMI寰幆錛?

1. 璋冪敤object.getUserInfo()
java浠g爜: 


UserService object;
object.getUserInfo(userId);



2. 瀹為檯鏄皟鐢╛UserService_Stub.getUserInfo(int arg0)錛屽湪榪欎釜鏂規硶閲岄潰錛孲tub鍚慡keleton鍙戦佷簡涓涓猤etUserInfo鐨勫瓧涓插拰arg0榪欎釜鍙傛暟錛?

java浠g爜: 


org.omg.CORBA.portable.OutputStream out = _request("getUserInfo", true);
out.write_long(arg0);
in = (org.omg.CORBA_2_3.portable.InputStream)_invoke(out);



3. Server绔殑Skeleton鎺ユ敹Stub鍙戞潵鐨剅equest錛屽茍璋冪敤鐩稿簲鐨勬柟娉曪細
java浠g爜: 


_EJSRemoteStatelessUserService_a940aa04_Tie._invoke() {
    switch (method.charAt(5))
    {
        case 83:
            if (method.equals("getUserInfo")) {
                return getUserInfo(in, reply);
            }
        ......
    }
}

_EJSRemoteStatelessUserService_a940aa04_Tie.getUserInfo() {
    EJSRemoteStatelessUserService_a940aa04 target = null;
    int arg0 = in.read_long();
    UserDTO result = target.getUserInfo(arg0);
    org.omg.CORBA_2_3.portable.OutputStream out = reply.createReply();
    out.write_value(result,UserDTO.class);
    return out;
}



4. Skeleton璋冪敤鐨勬槸UserService鐨凷erver绔疄鐜扮被鐨刧etUserInfo鏂規硶
java浠g爜: 


EJSRemoteStatelessUserService_a940aa04.getUserInfo() {
    UserServiceBean _EJS_beanRef = container.preInvoke(this, 0, _EJS_s);
    _EJS_result = _EJS_beanRef.getUserInfo(id);
}



鏈鍚庣殑鏈鍚庯紝#4緇堜簬璋冪敤浜嗘垜浠啓鐨刄serServiceBean閲岀殑getUserInfo鏂規硶錛岃繖鎵嶆槸鎴戜滑鐪熸鎯寵鍘誨仛鐨勪簨鎯呫?

鑷蟲錛岀浜屼釜RMI寰幆涔熺粓浜庣粨鏉熶簡銆?BR>
鍥為【涓涓嬩笂闈㈢殑鍒嗘瀽錛屽彲浠ュ緢娓呮櫚鐨勭湅鍒頒袱嬈MI寰幆鐨勮繃紼嬶紝涓嬪浘(瑙侀摼鎺?鎻忚堪浜嗘暣涓祦紼嬶細

http://www.pbase.com/image/27229257 
http://mk23.image.pbase.com/u42/nobo123/upload/27229257.ejb2.jpg

榛勮壊鐨?錛?錛?0鏄▼搴忓憳瑕佸啓鐨勶紝鍏朵綑鏄郴緇熺敓鎴愮殑銆?

#1鏄疕ome interface, #2鍜?4閮絠mplements 浜嗗畠銆?
#6鏄疪emote interface, #7鍜?9閮絠mplements 浜嗗畠銆?
#10鏄疊ean瀹炵幇銆?

鍐欏埌榪欓噷錛屽熀鏈璇寸殑灝辮瀹屼簡銆傝繖瀹炲湪鏄竴欏圭瘡姝諱漢鐨勫伐浣滐紝甯屾湜鎮ㄨ兘紼楗傛榪庤ˉ鍏咃紝嬈㈣繋鎽橀敊銆傝阿璋紝鍛靛懙銆?BR>

綆鍗曡錛屽氨鏄負浜嗛傚簲鍒嗗竷寮忓紑鍙戠殑闇瑕併?

棣栧厛錛屽洖鍒版垜鏈鍚庣粰鍑虹殑嫻佺▼鍥俱?

Client绔渶鍘熷鐨勫啿鍔紝鑲畾鏄兘鐩存帴璋冪敤#10.UserServiceBean灝辯埥浜嗐傞偅涔堢涓涓棶棰樻潵浜嗭紝
Client鍜孲erver涓嶅湪涓涓狫VM閲?/SPAN>銆?

榪欏ソ鍔烇紝鎴戜滑涓嶆槸鏈塕MI鍚楋紝濂斤紝榪欎釜闂灝辮繖涔堣В鍐充簡錛?
1. UserServiceBeanInterface.getUserInfo()
2. UserServiceBeanStub
3. UserServiceBeanSkeleton
4. UserServiceBean

鐢ㄧ潃鐢ㄧ潃錛岀浜屼釜闂鏉ヤ簡錛?
UserServiceBean鍙湁浜虹敤錛屾病浜虹鐞嗭紝transaction logic, security logic, bean instance pooling logic榪欎簺涓嶅緱涓嶈冭檻鐨勯棶棰樻誕鍑烘按闈簡銆?

OK錛屾垜浠兂鍒扮敤涓涓猟elegate錛孍JBObject錛屾潵榪涜鎵鏈夎繖浜沴ogic鐨勭鐞嗐俢lient鍜孍JBObject鎵撲氦閬擄紝EJBObject璋冪敤UserServiceBean銆?

娉ㄦ剰錛岃繖涓狤JBObject涔熸槸涓涓狪nterface錛?6.UserService榪欎釜interface姝f槸浠庡畠extends鑰屾潵銆傚茍涓擡JBObject鎵綆$悊鐨勮繖浜沴ogic錛屾鏄疉ppServer鐨勪竴閮ㄥ垎銆?

鐜板湪鐨勬祦紼嬪彉涓轟簡錛?
EJBObject
1. UserService.getUserInfo()
2. UserServiceStub
3. UserServiceSkeleton
4. UserServiceImp
5. UserServiceBean

榪欏凡緇忓拰鏁村箙鍥鵑噷鐨?6, #7, #8, #9, #10涓涓瀵瑰簲浜嗐?

鐜板湪鑳芥弧瓚蟲垜浠殑闇姹備簡鍚楋紵涓嶏紝絎笁涓棶棰樺張鏉ヤ簡錛?
鏃㈢劧鏄垎甯冨紡寮鍙戯紝閭d箞鎴戝綋鐒舵病鐞嗙敱鍙敤涓涓猄pecified Server錛屾垜鍙兘闇瑕佺敤鍒板ソ鍑犱釜涓嶅悓鐨凷erver錛岃屼笖EJBObject涔熼渶瑕佺鐞嗗憖

OK錛屼負浜嗛傚簲浣犵殑闇瑕侊紝鎴戜滑榪樺緱鍔犲啀涓涓狧omeObject錛岄鍏堝畠鏉ュ喅瀹氱敤鍝釜Server(褰撶劧錛屾槸鐢變綘鐢↗NDI String璁懼畾鐨?錛屽叾嬈★紝瀹冩潵綆$悊EJBObject銆?

娉ㄦ剰錛岃繖涓狤JBHome涔熸槸涓涓狪nterface錛?1.UserServiceHome榪欎釜interface姝f槸浠庡畠extends鑰屾潵銆傚茍涓擡JBHome綆$悊EJBObject鐨刲ogic錛屼篃鏄疉ppServer鐨勪竴閮ㄥ垎銆?

鐜板湪鐨勮皟鐢ㄦ搴忔槸
1. EJBHome.create()
2. EJBHomeStub
3. EJBHomeSkeleton
4. EJBHomeImp(EJSWrapper)
5. EJSHome

寰楀埌EJBObject

6. UserService.getUserInfo()
7. UserServiceStub
8. UserServiceSkeleton
9. UserServiceImp
10. UserServiceBean

鐜板湪宸茬粡瀹屽叏鍜屾祦紼嬪浘鐨勮皟鐢ㄩ『搴忎竴鑷翠簡銆?

緇間笂鎵榪幫紝EJB鐨勮皟鐢ㄧ‘瀹炲緢楹葷儲錛屼絾鏄悶鐨勮繖涔堥夯鐑︼紝紜疄鏄湁鎼炵殑楹葷儲鐨勯亾鐞嗭紝瀹炲湪鏄笉寰椾笉涓轟篃銆?

鍝庡摕錛屽ソ绱晩銆傚笇鏈涙垜鎶婅繖涓棶棰樿娓呮浜嗭紝鎮ㄤ篃娌$粰鎴戠粫榪風硦銆傝阿璋€?/SPAN>


Vikings 2005-05-04 03:04 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 又粗又硬又黄又爽的免费视频| 亚洲Av综合色区无码专区桃色 | 国产AV无码专区亚洲精品| 亚洲一区免费观看| 亚洲色大情网站www| 亚洲成AⅤ人影院在线观看| 免费无码成人AV在线播放不卡| 亚洲精品无码成人| 亚洲韩国精品无码一区二区三区 | 国产jizzjizz视频全部免费| 国产成年无码久久久免费| 亚洲人成欧美中文字幕| 亚洲成亚洲乱码一二三四区软件| 可以免费看黄视频的网站| 国产黄片不卡免费| 亚洲综合精品成人| 亚洲免费观看视频| 日韩精品视频免费网址| 免费在线观看一级片| 亚洲AV无码专区亚洲AV桃| 亚洲AV午夜福利精品一区二区| 日韩高清免费观看| 最近2019中文字幕免费大全5 | 亚洲精品国产专区91在线| 亚洲人成网站18禁止一区| 在线观看AV片永久免费| 中文字幕乱理片免费完整的| 中文日韩亚洲欧美制服| 亚洲综合国产精品| 亚洲伊人成无码综合网| 日韩免费毛片视频| 曰曰鲁夜夜免费播放视频| 日本免费人成网ww555在线| 边摸边吃奶边做爽免费视频网站 | 免费一级国产生活片| 在线观看免费人成视频色9 | 亚洲成AV人片在线观看WWW| 国产成人涩涩涩视频在线观看免费| 亚洲黄色免费观看| 久久国产精品免费网站| 成人国产精品免费视频|