
網(wǎng)名:hoojo
E-mail:hoojo_@126.com
專(zhuān)注于Java,現(xiàn)從事電警卡口、智能交通、電子警察、數(shù)字城市等應(yīng)用開(kāi)發(fā),擅長(zhǎng)JavaEE、Flex、ActionScript及Web前端HTML、CSS、JavaScript、ExtJS、jQuery、Mootools等開(kāi)發(fā)。對(duì)常用開(kāi)源框架有一定的認(rèn)識(shí)和見(jiàn)解。
Linux中JDK1.6的安裝和配置方法
一、安裝
創(chuàng)建安裝目錄,在/usr/java下建立安裝路徑,并將文件考到該路徑下:
# mkdir /usr/java
1、jdk-6u11-linux-i586.bin 這個(gè)是自解壓的文件,在linux上安裝如下:
# chmod 755 jdk-6u11-linux-i586.bin
# ./jdk-6u11-linux-i586.bin (注意,這個(gè)步驟一定要在jdk-6u11-linux-i586.bin所在目錄下)
在按提示輸入yes后,jdk被解壓。
出現(xiàn)一行字:Do you aggree to the above license terms? [yes or no]
安裝程序在問(wèn)您是否愿意遵守剛才看過(guò)的許可協(xié)議。當(dāng)然要同意了,輸入"y" 或 "yes" 回車(chē)。
2、若是用jdk-6u11-linux-i586-rpm.bin 這個(gè)也是一個(gè)自解壓文件,不過(guò)解壓后的文件是jdk-6u11-linux-i586-rpm 包,執(zhí)行rpm命令裝到linux上就可以了。安裝如下:
#chmod 755 ./jdk-6u11-linux-i586-rpm
# ./jdk-6u11-linux-i586-rpm .bin
# rpm -ivh jdk-6u11-linux-i586-rpm
出現(xiàn)一行字:Do you aggree to the above license terms? [yes or no]
安裝程序在問(wèn)您是否愿意遵守剛才看過(guò)的許可協(xié)議。當(dāng)然要同意了,輸入"y" 或 "yes" 回車(chē)。
安裝軟件會(huì)將JDK自動(dòng)安裝到 /usr/java/目錄下。
二、配置
#vi /etc/profile
在里面添加如下內(nèi)容
export JAVA_HOME=/usr/java/jdk1.6.0_27
export JAVA_BIN=/usr/java/jdk1.6.0_27/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH讓/etc/profile文件修改后立即生效 ,可以使用如下命令:
# . /etc/profile
注意: . 和 /etc/profile 有空格.重啟測(cè)試
java -version
set 查看環(huán)境變量
pwd 顯示當(dāng)前位置
samba文件共享服務(wù)可以讓linux和linux系統(tǒng)、linux和windows系統(tǒng)之間共享文件
服務(wù)查詢
默認(rèn)情況下,Linux系統(tǒng)在默認(rèn)安裝中已經(jīng)安裝了Samba服務(wù)包的一部分,為了對(duì)整個(gè)過(guò)程有一個(gè)完整的了解,在此先將這部分卸載掉。使用命令
rpm -qa | grep samba,默認(rèn)情況下可以查詢到兩個(gè)已經(jīng)存在的包:
samba-client-xxx-xxx
samba-common-xxx.xxx
卸載Samba
用rpm -e 將兩個(gè)包卸載掉。對(duì)于samba-common-xxx.xxx,因?yàn)榕c其它rpm包之間存在依賴關(guān)系,所以必須加參數(shù)-f和--nodeps,-f是指強(qiáng)制,--nodeps是指不檢查依賴關(guān)系,具體完整命令為:
rpm -e samba-common-xxx -f --nodeps
rpm -e samba-client-xxx -f –nodeps
掛在鏡像文件
因?yàn)榘惭bsamba你需要下載對(duì)應(yīng)的安裝包,一般系統(tǒng)盤(pán)就有這些軟件,所以可以直接掛載上去
mount -o loop /home/rhel-server-6.2-x86_64-dvd.iso /media/OS
這樣就將系統(tǒng)盤(pán)掛載到指定的OS目錄了,在OS目錄下的Packages下有很多安裝包可以使用。
安裝Samba
用以下命令安裝:
rpm -ivh samba-xxx.rpm -f --nodeps
rpm -ivh samba-client-xxx.rpm -f --nodeps
rpm -ivh samba-common-xxx.rpm -f --nodeps
安裝完成后,使用命令rpm -qa | grep samba進(jìn)行查詢,發(fā)現(xiàn)搭建samba服務(wù)器所依賴的所有服務(wù)器都已經(jīng)安裝好了即可。
安裝完成后配置/etc/samba/smb.conf配置文件,你可以備份原來(lái)的配置,把下面的配置覆蓋當(dāng)前配置即可:
[global]
workgroup=takecarnetbios name=Linux-108.12server string=Linux Samba Server TestServer#security=sharesecurity=user
map to guest=Bad User[takecar]path=/opt/takecar
writable=yesbrowseable=yesguest ok=yes以上就是配置匿名用戶共享目錄/opt/takecar
其中writable是寫(xiě)入權(quán)限、browseable是瀏覽權(quán)限、guest是貴賓用戶
建立相應(yīng)目錄并授權(quán)
[root@localhost ~]# mkdir -p /opt/linuxsir
[root@localhost ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
[root@localhost ~]# chown -R nobody:nobody /opt/linuxsir
注釋?zhuān)宏P(guān)于授權(quán)nobody,我們先用id命令查看了nobody用戶的信息,發(fā)現(xiàn)他的用戶組也是nobody,我們要以這個(gè)為準(zhǔn)。有些系統(tǒng)nobody用戶組并非是nobody ;
啟動(dòng)smbd和nmbd服務(wù)器
[root@localhost ~]# smbd
[root@localhost ~]# nmbd關(guān)閉和查詢服務(wù)
pkill smbd
pkill nmbd
pgrep smbd
pgrep nmbd
如果啟動(dòng)后不能訪問(wèn)可能是防火墻原因,關(guān)閉防火墻
service iptables stop
chkconfig iptables off
設(shè)置服務(wù)開(kāi)機(jī)啟動(dòng) ntsysv命令可以進(jìn)入圖形界面設(shè)置,如果windows不能建立linux的共享目錄可能是window中的某個(gè)服務(wù)原因。
摘要: oracle job有定時(shí)執(zhí)行的功能,可以在指定的時(shí)間點(diǎn)或每天的某個(gè)時(shí)間點(diǎn)自行執(zhí)行任務(wù)。 一、查詢系統(tǒng)中的job,可以查詢視圖 --相關(guān)視圖select * from dba_jobs;select * from all_jobs;select * from user_jobs;-- 查詢字段描述/*字段(列) 類(lèi)型 描述JOB ... 閱讀全文直接用進(jìn)程殺死程序
ps -ef|grep smb
kill -9 pid #pid 為相應(yīng)的進(jìn)程號(hào)
#直接查看指定端口的進(jìn)程pid
netstat -anp|grep 9217
// 方式一:
double f = 3.1516;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// 方式二:
new java.text.DecimalFormat("#.00").format(3.1415926);
// #.00 表示兩位小數(shù) #.0000四位小數(shù) 以此類(lèi)推…
// 方式三:
double d = 3.1415926;
String result = String.format("%.2f", d);
// %.2f %. 表示 小數(shù)點(diǎn)前任意位數(shù) 2 表示兩位小數(shù) 格式后的結(jié)果為f 表示浮點(diǎn)型。
//方法四:
Math.round(5.2644555 * 100) * 0.01d;
//String.format("%0" + 15 + "d", 23) 23不足15為就在前面補(bǔ)0
在使用cxf實(shí)現(xiàn)webservice時(shí),經(jīng)常碰到的問(wèn)題就是如果在服務(wù)端,修改了一個(gè)接口的簽名實(shí)現(xiàn),如增加一個(gè)字段,或者刪除一個(gè)字段。在這種情況下,在默認(rèn)的配置中,就會(huì)報(bào)以下的錯(cuò)誤信息:
org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element . Expected elements are
這種錯(cuò)誤即客戶端使用的傳輸對(duì)象與服務(wù)端接收的參數(shù)的字段不匹配。但如果,每次修改服務(wù)端的實(shí)現(xiàn),都需要更新客戶端時(shí),就會(huì)出現(xiàn)一些問(wèn)題,如在某些情況下,客戶端的更新是不可能的事(如不在自己掌握之內(nèi),或者服務(wù)不能隨便更新,或者其它計(jì)劃時(shí))。
如果避免這種問(wèn)題,其實(shí)也很簡(jiǎn)單,就是禁用cxf中的字段信息驗(yàn)證,如果禁用掉此驗(yàn)證,就不再會(huì)對(duì)相應(yīng)的字段信息進(jìn)行驗(yàn)證,同時(shí)沒(méi)有的字段也會(huì)自動(dòng)的忽略。整個(gè)解決只需要增加以下的一行配置即可,在cxf.xml(spring集成文件)中增加以下配置項(xiàng):
<cxf:properties>
<entry key="set-jaxb-validation-event-handler" value="false"/>
</cxf:properties>
這樣,即會(huì)禁用掉所有cxf的數(shù)據(jù)驗(yàn)證,在大多數(shù)情況下,這可以滿足我們的要求(除非你有其它和cxf集成的數(shù)據(jù)驗(yàn)證要求)。
轉(zhuǎn)載請(qǐng)標(biāo)明出處:i flym
本文地址:http://www.iflym.com/index.php/code/201307310001.html
ant 命令行方式執(zhí)行build javac編譯class出現(xiàn) 泛型無(wú)法轉(zhuǎn)換 無(wú)法確定 <X>X 的類(lèi)型參數(shù);對(duì)于上限為 X,java.lang.Object 的類(lèi)型變量 X,不存在唯一最大實(shí)例
解決方法:
需要用到eclipse的jdt來(lái)編譯class,不能再使用javac的默認(rèn)編譯方式。
在eclipse或MyEclipse的eclipse/plugin目錄中找到org.eclipse.jdt.core_3.5.2.v_981_R35x.jar里面找到j(luò)dtCompilerAdapter.jar
還有
org.eclipse.jdt.compiler.tool_1.0.100.v_972_R35x.jar
org.eclipse.jdt.core_3.5.2.v_981_R35x.jar
org.eclipse.jdt.debug.ui_3.4.1.v20090811_r351.jar
jdtCompilerAdapter.jar并拷貝到ant_home/lib下。
在ant的build.xml腳本中加入
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
<javac nowarn="false" debug="true" debuglevel="source,lines,vars" destdir="${dist.path}/classes" source="1.6" target="1.6" encoding="utf-8" fork="true" memoryMaximumSize="512m" includeantruntime="false">
或者
<javac compiler="org.eclipse.jdt.core.JDTCompilerAdapter" nowarn="false" debug="true" debuglevel="source,lines,vars" destdir="${dist.path}/classes" source="1.6" target="1.6" encoding="utf-8" fork="true" memoryMaximumSize="512m" includeantruntime="false"/>
摘要: 一、摘要 上兩篇文章分別介紹了Spring3.3 整合 Hibernate3、MyBatis3.2 配置多數(shù)據(jù)源/動(dòng)態(tài)切換數(shù)據(jù)源 方法 和 Spring3 整合Hibernate3.5 動(dòng)態(tài)切換SessionFactory (切換數(shù)據(jù)庫(kù)方言),這篇文章將介紹Spring整合Mybatis 如何完成SqlSessionFactory的動(dòng)態(tài)切換的。并且會(huì)簡(jiǎn)單的介紹下MyBatis整合Spring中的... 閱讀全文 摘要: 一、緣由 上一篇文章Spring3.3 整合 Hibernate3、MyBatis3.2 配置多數(shù)據(jù)源/動(dòng)態(tài)切換數(shù)據(jù)源 方法介紹到了怎么樣在Sping、MyBatis、Hibernate整合的應(yīng)用中動(dòng)態(tài)切換DataSource數(shù)據(jù)源的方法,但最終遺留下一個(gè)問(wèn)題:不能切換數(shù)據(jù)庫(kù)方言。數(shù)據(jù)庫(kù)方言可能在當(dāng)前應(yīng)用的架構(gòu)中意義不是很大,但是如果單純用MyBatis或Hibernate做數(shù)據(jù)庫(kù)持久化操作,還... 閱讀全文 摘要: 一、開(kāi)篇 這里整合分別采用了Hibernate和MyBatis兩大持久層框架,Hibernate主要完成增刪改功能和一些單一的對(duì)象查詢功能,MyBatis主要負(fù)責(zé)查詢功能。所以在出來(lái)數(shù)據(jù)庫(kù)方言的時(shí)候基本上沒(méi)有什么問(wèn)題,但唯一可能出現(xiàn)問(wèn)題的就是在hibernate做添加操作生成主鍵策略的時(shí)候。因?yàn)槲覀兌贾纇ibernate的數(shù)據(jù)庫(kù)本地方言會(huì)針對(duì)不同的數(shù)據(jù)庫(kù)采用不同的主鍵生成策略。 所以針對(duì)這一問(wèn)... 閱讀全文 摘要: 基于HTTP的長(zhǎng)連接,是一種通過(guò)長(zhǎng)輪詢方式實(shí)現(xiàn)"服務(wù)器推"的技術(shù),它彌補(bǔ)了HTTP簡(jiǎn)單的請(qǐng)求應(yīng)答模式的不足,極大地增強(qiáng)了程序的實(shí)時(shí)性和交互性。 一、什么是長(zhǎng)連接、長(zhǎng)輪詢? 用通俗易懂的話來(lái)說(shuō),就是客戶端不停的向服務(wù)器發(fā)送請(qǐng)求以獲取最新的數(shù)據(jù)信息。這里的“不停”其實(shí)是有停止的,只是我們?nèi)搜蹮o(wú)法分辨是否停止,它只是一種快速的停下然后又立即開(kāi)始連接而已。 二、長(zhǎng)連接... 閱讀全文
如果是用eclipse運(yùn)行ant腳本,在右鍵菜單選擇從RUN as Ant 啟動(dòng)build.xml時(shí),在對(duì)話框中 選擇Runtime jRE:run in the same JRE as workspace.記得要引入上面需要的幾個(gè)jar包
UML是一種通用的建模語(yǔ)言,其表達(dá)能力相當(dāng)?shù)膹?qiáng),不僅可以用于軟件系統(tǒng)的建模,而且可用于業(yè)務(wù)建模以及其它非軟件系統(tǒng)建模。UML綜合了各種面向?qū)ο蠓椒ㄅc表示法的優(yōu)點(diǎn),至提出之日起就受到了廣泛的重視并得到了工業(yè)界的支持。
本章將按視圖、模型元素、圖以及公共機(jī)制依次介紹UML的構(gòu)造和基本元素,以使得讀者對(duì)UML有一個(gè)總體了解,其具體細(xì)節(jié)將在后續(xù)章節(jié)中詳細(xì)描述。
畫(huà)圖工具:eDraw、jude
歡迎大家繼續(xù)支持和關(guān)注我的博客:
http://blog.csdn.net/IBM_hoojo
也歡迎大家和我交流、探討IT方面的知識(shí)。
email:hoojo_@126.com
如果你覺(jué)得本文不錯(cuò)的話,請(qǐng)你點(diǎn)擊屏幕右下方的
。如果你以后會(huì)用到這篇文章的或覺(jué)得以后要重新翻閱的話,你可以點(diǎn)擊屏幕右下角的
。如果你覺(jué)得我的博文不錯(cuò)或是想在第一時(shí)間看到我的動(dòng)態(tài)的話,你可以點(diǎn)擊屏幕右下角
。如果你想說(shuō)點(diǎn)什么的話,你可以點(diǎn)擊屏幕右下方的
。如果你都點(diǎn)過(guò)了,那真的太謝謝你了,兄弟太支持了。此時(shí),或許你可以點(diǎn)擊
按鈕,然后看看博文的導(dǎo)航繼續(xù)瀏覽其他文章。
1. UML的組成
UML由視圖(View)、圖(Diagram)、模型元素(Model Element)和通用機(jī)制(General Mechanism)等幾個(gè)部分組成。
a) 視圖(View): 是表達(dá)系統(tǒng)的某一方面的特征的UML建模元素的子集,由多個(gè)圖構(gòu)成,是在某一個(gè)抽象層上,對(duì)系統(tǒng)的抽象表示。
b) 圖(Diagram): 是模型元素集的圖形表示,通常是由弧(關(guān)系)和頂點(diǎn)(其他模型元素)相互連接構(gòu)成的。
c) 模型元素(Model Element):代表面向?qū)ο笾械念?lèi)、對(duì)象、消息和關(guān)系等概念,是構(gòu)成圖的最基本的常用概念。
d) 通用機(jī)制(General Mechanism):用于表示其他信息,比如注釋、模型元素的語(yǔ)義等。另外,UML還提供擴(kuò)展機(jī)制,使UML語(yǔ)言能夠適應(yīng)一個(gè)特殊的方法(或過(guò)程),或擴(kuò)充至一個(gè)組織或用戶。
2. UML視圖的分類(lèi)
UML是用來(lái)描述模型的,用模型來(lái)描述系統(tǒng)的機(jī)構(gòu)或靜態(tài)特征,以及行為或動(dòng)態(tài)特征。從不同的視角為系統(tǒng)構(gòu)架建模,形成系統(tǒng)的不同視圖。
(1) 用例視圖(Use Case View),強(qiáng)調(diào)從用戶的角度看到的或需要的系統(tǒng)功能,是被稱為參與者的外部用戶所能觀察到的系統(tǒng)功能的模型圖。
(2) 邏輯視圖(Logical View),展現(xiàn)系統(tǒng)的靜態(tài)或結(jié)構(gòu)組成及特征,也稱為結(jié)構(gòu)模型視圖(Structural Model View)或靜態(tài)視圖(Static View)。
(3) 并發(fā)視圖(Concurrent View),體現(xiàn)了系統(tǒng)的動(dòng)態(tài)或行為特征,也稱為行為模型視圖(Behavioral Model View)或動(dòng)態(tài)視圖(Dynamic View)。
(4) 組件視圖(Component View),體現(xiàn)了系統(tǒng)實(shí)現(xiàn)的結(jié)構(gòu)和行為特征,也稱為實(shí)現(xiàn)模型視圖(Implementation Model View)。
(5) 配置視圖(Deployment View),體現(xiàn)了系統(tǒng)實(shí)現(xiàn)環(huán)境的結(jié)構(gòu)和行為特征,也稱為環(huán)境模型視圖(Environment Model View)或物理視圖(Physical View)。
視圖是由圖組成的,UML提供9種不同的圖:
(1) 用例圖(Use Case Diagram),描述系統(tǒng)功能;
(2) 類(lèi)圖(Class Diagram),描述系統(tǒng)的靜態(tài)結(jié)構(gòu);
(3) 對(duì)象圖(Object Diagram),描述系統(tǒng)在某個(gè)時(shí)刻的靜態(tài)結(jié)構(gòu);
(4) 組件圖(Component Diagram),描述了實(shí)現(xiàn)系統(tǒng)的元素的組織;
(5) 配置圖(Deployment Diagram),描述了環(huán)境元素的配置,并把實(shí)現(xiàn)系統(tǒng)的元素映射到配置上;
(6) 狀態(tài)圖(State Diagram),描述了系統(tǒng)元素的狀態(tài)條件和響應(yīng);
(7) 時(shí)序圖(Sequence Diagram),按時(shí)間順序描述系統(tǒng)元素間的交互;
(8) 協(xié)作圖(Collaboration Diagram),按照時(shí)間和空間順序描述系統(tǒng)元素間的交互和它們之間的關(guān)系;
(9) 活動(dòng)圖(Activity Diagram),描述了系統(tǒng)元素的活動(dòng);
建模方法由建模語(yǔ)言和建模過(guò)程兩部分構(gòu)成。其中建模語(yǔ)言是用來(lái)表述設(shè)計(jì)方法的表示法,建模過(guò)程是對(duì)設(shè)計(jì)中所應(yīng)采取的步驟的描述。UML是一種建模語(yǔ)言,它在很大程度上獨(dú)立于建模過(guò)程。在實(shí)際建模中,建模人員最好把UML用于以用案驅(qū)動(dòng)的、以體系機(jī)構(gòu)為中心的、迭代的和漸增式的開(kāi)發(fā)過(guò)程中。
一般而言,軟件系統(tǒng)的體系結(jié)構(gòu)給出了軟件系統(tǒng)的組織、組成系統(tǒng)的構(gòu)造元素及其接口的選擇、系統(tǒng)的行為和體系結(jié)構(gòu)風(fēng)格等信息。也就是說(shuō),它不僅關(guān)心系統(tǒng)的結(jié)構(gòu)和行為等功能性需求,而且也涉及系統(tǒng)的性能、易理解性、易復(fù)用性等非功能性需求。如下圖所示,UML利用用戶模型視圖、結(jié)構(gòu)模型視圖、行為模型視圖、實(shí)現(xiàn)模型視圖和環(huán)境模型視圖來(lái)描述軟件系統(tǒng)的體系結(jié)構(gòu)。
根據(jù)它們?cè)诓煌軜?gòu)視圖的應(yīng)用,可以把9種圖分成:
(2) 結(jié)構(gòu)模型視圖:類(lèi)圖和對(duì)象;
(3) 行為模型視圖:狀態(tài)圖、時(shí)序圖、協(xié)作圖和活動(dòng)圖(動(dòng)態(tài)圖);
(4) 實(shí)現(xiàn)模型視圖:組件圖;
(5) 環(huán)境模型視圖:配置圖。
用戶模型視圖由專(zhuān)門(mén)描述最終用戶、分析人員和測(cè)試人員看到的系統(tǒng)行為的用案組成,它實(shí)際上是從用戶角度來(lái)描述系統(tǒng)應(yīng)該具有的功能。用戶模型視圖所描述的系統(tǒng)功能依靠外部用戶或者另外一個(gè)系統(tǒng)來(lái)激活,為用戶或者另一系統(tǒng)提供服務(wù),從而實(shí)現(xiàn)用戶或另一系統(tǒng)與系統(tǒng)的交互。系統(tǒng)實(shí)現(xiàn)的最終目標(biāo)是提供用戶模型視圖中所描述的功能。在UML中,用戶模型視圖是由用案圖組成。
結(jié)構(gòu)模型視圖描述組成系統(tǒng)的類(lèi)、對(duì)象以及它們之間的關(guān)系等靜態(tài)結(jié)構(gòu),用來(lái)支持系統(tǒng)的功能需求,即描述系統(tǒng)內(nèi)部功能是如何設(shè)計(jì)的。結(jié)構(gòu)模型視圖由類(lèi)圖和對(duì)象圖構(gòu)成,主要供設(shè)計(jì)人員和開(kāi)發(fā)人員使用。
行為模型視圖主要用來(lái)描述形成系統(tǒng)并發(fā)與同步機(jī)制的線程和進(jìn)程,其關(guān)注的重點(diǎn)是系統(tǒng)的性能、易伸縮性和系統(tǒng)的吞吐量等非功能性需求。行為模型視圖利用并發(fā)來(lái)描述資源的高效使用、并行執(zhí)行和處理異步事件。除了講系統(tǒng)劃分為并發(fā)執(zhí)行的控制線程之外,行為模型還必須處理通信和這些線程及進(jìn)程之間的同步問(wèn)題。行為模型視圖主要供系統(tǒng)開(kāi)發(fā)人員和系統(tǒng)集成人員使用,它由序列圖、協(xié)作圖、狀態(tài)圖和活動(dòng)圖組成。
實(shí)現(xiàn)模型視圖用來(lái)描述系統(tǒng)的實(shí)現(xiàn)模塊它們之間的依賴關(guān)系以及資源分配情況。這種視圖主要用于系統(tǒng)的配置管理,它是由一些獨(dú)立的構(gòu)件組成的。實(shí)現(xiàn)模型視圖由構(gòu)件圖組成。其中構(gòu)件是代碼模塊,不同類(lèi)型的代碼模塊形成不同的構(gòu)件。實(shí)現(xiàn)模型視圖主要供開(kāi)發(fā)人員使用。
環(huán)境模型視圖用來(lái)描述物理系統(tǒng)的硬件拓?fù)浣Y(jié)構(gòu)。例如,系統(tǒng)中的計(jì)算機(jī)和設(shè)備的分布情況以及它們之間的連接方式,其中計(jì)算機(jī)和設(shè)備統(tǒng)稱為節(jié)點(diǎn)。在UML中環(huán)境模型視圖是由部署圖來(lái)表示的。系統(tǒng)部署圖描述了系統(tǒng)構(gòu)件在節(jié)點(diǎn)上的分布情況,即用來(lái)描述軟件構(gòu)件到物理節(jié)點(diǎn)的映射。部署圖主要供開(kāi)發(fā)人員、系統(tǒng)集成人員和測(cè)試人員使用。
上面每一種視圖反映了系統(tǒng)的一個(gè)特定方面,不同人員可以單獨(dú)的使用其中每一種視圖,從而可以關(guān)注特定的體系結(jié)構(gòu)問(wèn)題。但在通常情況下,由于系統(tǒng)的最終目標(biāo)是提供用戶模型視圖中描述的功能以及其它一些非功能性需求,因此,用戶模型視圖是其它視圖的核心基礎(chǔ),其它視圖的構(gòu)造都依賴與用戶模型視圖中所描述的類(lèi)容。
細(xì)心的讀者已經(jīng)發(fā)現(xiàn),每一種UML圖都是由多個(gè)圖組成的,每一種圖都是體系結(jié)構(gòu)某個(gè)側(cè)面的表示,各種圖實(shí)際上是一致的,所有的圖在一起組成了系統(tǒng)的完整視圖。如下圖所示,UML中總共提供了用案圖、類(lèi)圖、對(duì)象圖、序列圖、協(xié)作圖、狀態(tài)圖、活動(dòng)圖、構(gòu)建圖和部署圖9種圖。根據(jù)它們描述的是系統(tǒng)的靜態(tài)結(jié)構(gòu)還是動(dòng)態(tài)行為,可以將它們分為靜態(tài)圖和動(dòng)態(tài)圖兩類(lèi)。再進(jìn)一步介紹這9中UML圖時(shí),先了解下什么是模型元素:
3. UML的建模機(jī)制
UML有兩套建模機(jī)制:靜態(tài)建模機(jī)制和動(dòng)態(tài)建模機(jī)制。靜態(tài)建模機(jī)制包括用例圖、類(lèi)圖、對(duì)象圖、包、組件圖和配置圖。動(dòng)態(tài)建模機(jī)制包括狀態(tài)圖、時(shí)序圖、協(xié)作圖、活動(dòng)圖。
(1) 用例圖:用例的可視化工具,它提供計(jì)算機(jī)系統(tǒng)的高層次的用戶視圖,表示以外部活動(dòng)者的角度來(lái)看系統(tǒng)將是怎樣使用的。
用例圖(用案圖)是用于描述一組用案,參與者以及它們之間的連接關(guān)系。一個(gè)用案圖描述了一組動(dòng)作序列,每一個(gè)序列表示系統(tǒng)的外部設(shè)施(系統(tǒng)的參與者)與系統(tǒng)本身的交互。從一個(gè)特定參與者的角度看,一個(gè)用案完成對(duì)其有價(jià)值的工作。如圖2.5所示,用案圖僅僅是從參與者使用系統(tǒng)的角度來(lái)描述系統(tǒng)中的信息,即站在系統(tǒng)外部查看系統(tǒng)應(yīng)該具有什么功能,而并不描述該功能在軟件內(nèi)部是如何實(shí)現(xiàn)的。用案可以應(yīng)用于整個(gè)系統(tǒng),也可以應(yīng)用于系統(tǒng)的一個(gè)部分,包括子系統(tǒng)、單個(gè)的類(lèi)或者接口。通常,用案不僅代表這些元素所期望的行為,而且還可以把這些元素用作開(kāi)發(fā)過(guò)程中測(cè)試用案的基礎(chǔ)。
用例圖包括以下3方面內(nèi)容:
(a) 用例(Use Case)
(b) 參與者(Actor)
(c) 依賴、泛化和關(guān)聯(lián)關(guān)系
用例圖示例:
(2) 類(lèi)圖:描述類(lèi)、接口、協(xié)作以及它們之間關(guān)系的圖。
類(lèi)圖是用于描述一組類(lèi)、接口、協(xié)作以及它們之間的靜態(tài)關(guān)系。在面向?qū)ο笙到y(tǒng)的建模中,類(lèi)圖是最為常用的圖,它用來(lái)闡明系統(tǒng)的靜態(tài)結(jié)構(gòu)。事實(shí)上類(lèi)是對(duì)一組具有相同屬性、操作、關(guān)系和語(yǔ)義的對(duì)象的描述,其中對(duì)類(lèi)的屬性和操作進(jìn)行描述時(shí)的一個(gè)最重要的細(xì)節(jié)就是它的可見(jiàn)性。
類(lèi)可以以多種形式連接,例如關(guān)聯(lián)、泛化、依賴和實(shí)現(xiàn)等。一個(gè)典型的系統(tǒng)中通常有若干個(gè)類(lèi)圖。一個(gè)類(lèi)圖不一定要包含系統(tǒng)中所有的類(lèi),一個(gè)類(lèi)可以加到幾個(gè)類(lèi)圖中。
類(lèi)圖示例:
(3) 對(duì)象圖:表示在某一時(shí)間上一組對(duì)象以及它們之間的關(guān)系的圖。對(duì)象圖可以被看做是類(lèi)圖在系統(tǒng)某一時(shí)刻的實(shí)例。
對(duì)象圖是類(lèi)圖的實(shí)例,用來(lái)描述特定運(yùn)行時(shí)刻一組對(duì)象之間的關(guān)系。也就是說(shuō),對(duì)象用于描述交互的靜態(tài)部分,它由參與協(xié)作的有關(guān)對(duì)象組成。但不包括在對(duì)象之間傳遞的任何消息。
在創(chuàng)建對(duì)象圖時(shí),建模人員并不需要用單個(gè)的對(duì)象圖來(lái)描述系統(tǒng)中的每一個(gè)對(duì)象。事實(shí)上,絕大多數(shù)系統(tǒng)中都會(huì)包含成百上千的對(duì)象。用對(duì)象來(lái)描述系統(tǒng)的所有對(duì)象以及它們之間的關(guān)系一般是不太現(xiàn)實(shí)的。因此,建模人員可以選擇所感興趣的對(duì)象極其之間的關(guān)系來(lái)描述。
對(duì)象圖中所使用的符號(hào)和類(lèi)圖中使用的符號(hào)幾乎完全相同,區(qū)別僅在于對(duì)象圖的對(duì)象名帶有下劃線,而且類(lèi)與類(lèi)之間關(guān)系的所有的實(shí)例都要畫(huà)出來(lái)。
(4) 組件圖:描述軟件組件以及組件之間的關(guān)系,組件本身是代碼的物理模塊,組件圖則顯示了代碼的結(jié)構(gòu)。
組件圖(構(gòu)件圖)是用于描述一組構(gòu)件之間的組織和依賴關(guān)系,用于建模系統(tǒng)的靜態(tài)實(shí)現(xiàn)視圖。構(gòu)件可以是可執(zhí)行程序集、庫(kù)、表、文件和文檔等,它包含了邏輯類(lèi)或者邏輯類(lèi)的實(shí)現(xiàn)信息,因此結(jié)構(gòu)模型視圖和實(shí)現(xiàn)模型視圖之間存在映射關(guān)系。
構(gòu)建圖中也可以包括包或子系統(tǒng),它們都是用于將模型元素組成較大的組塊。
組件圖例圖:
(5) 配置圖:描述系統(tǒng)硬件的物理拓?fù)浣Y(jié)構(gòu)以及在此結(jié)構(gòu)上執(zhí)行的軟件。配置圖可以顯示計(jì)算節(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu)和通信路徑、結(jié)點(diǎn)上運(yùn)行的軟件組件、軟件組件包含的邏輯單元(對(duì)象、類(lèi))等。配置圖常常用于幫助理解分布式系統(tǒng)。
配置圖(部署圖)用來(lái)描述系統(tǒng)運(yùn)行是進(jìn)行處理的節(jié)點(diǎn)以及在節(jié)點(diǎn)上活動(dòng)的構(gòu)件的配置。部署圖用來(lái)對(duì)系統(tǒng)的環(huán)境模型視圖進(jìn)行建模。在大多數(shù)情況下,部署圖用來(lái)描述系統(tǒng)硬件的擴(kuò)普結(jié)構(gòu)。
在UML中,建模人員可以用類(lèi)圖來(lái)描述系統(tǒng)的靜態(tài)結(jié)構(gòu),可以用序列圖、協(xié)作圖、狀態(tài)圖、活動(dòng)圖來(lái)描述系統(tǒng)的動(dòng)態(tài)行為,而用部署圖來(lái)描述軟件所執(zhí)行所需的處理器和設(shè)備的拓?fù)浣Y(jié)構(gòu)。
(6) 狀態(tài)圖:通過(guò)類(lèi)對(duì)象的生命周期建立模型來(lái)描述對(duì)象隨時(shí)間變化的動(dòng)態(tài)行為。
狀態(tài)圖實(shí)際上是一種由狀態(tài)、變遷、事件和活動(dòng)組成的狀態(tài)機(jī)。狀態(tài)圖描述從狀態(tài)到狀態(tài)的控制流,常用于系統(tǒng)的動(dòng)態(tài)特性建模。在大多數(shù)情況下,它用來(lái)對(duì)反應(yīng)型對(duì)象的行為建模。
在UML中,狀態(tài)圖可以用來(lái)對(duì)一個(gè)對(duì)象按事件排序的行為建模。一個(gè)狀態(tài)圖是強(qiáng)調(diào)從狀態(tài)到狀態(tài)的控制流的狀態(tài)機(jī)的簡(jiǎn)單表示。一般而言,狀態(tài)圖是對(duì)類(lèi)所描述的設(shè)施的補(bǔ)充說(shuō)明,它描述了類(lèi)的所有對(duì)象可能具有的狀態(tài)以及引起狀態(tài)變化的事件。
(7) 時(shí)序圖:交互圖描述了一個(gè)交互,它由一組對(duì)象和它們之間的關(guān)系組成,并且還包括在對(duì)象間傳遞的信息。交互圖表達(dá)對(duì)象之間的交互,是描述一組對(duì)象如何協(xié)作完成某個(gè)行為的模型化工具。
序列圖和協(xié)作圖統(tǒng)稱為交互圖。其中,序列圖用來(lái)描述對(duì)象之間消息發(fā)送的先后次序,闡明對(duì)象之間的交互過(guò)程以及在系統(tǒng)執(zhí)行過(guò)程中的某一具體時(shí)刻將會(huì)發(fā)生什么事件。序列圖是一種強(qiáng)調(diào)時(shí)間順序的交互圖,其中對(duì)象沿橫軸方向排列,消息沿縱軸方向排列。
序列圖中的對(duì)象生命線是一條垂直的虛線,它表示一個(gè)對(duì)象在一段時(shí)間內(nèi)存在。由于序列圖中大多數(shù)對(duì)象都存在于整個(gè)交互過(guò)程中,因此這些對(duì)象全部排列在圖的頂部,它們的生命線從圖的頂部畫(huà)到圖的底部。每個(gè)對(duì)象的下方有一個(gè)矩形條,它與對(duì)象的生命線重疊,它表示該對(duì)象的控制焦點(diǎn)。序列圖中的消息可以有序號(hào),但由于這種圖上的消息已經(jīng)從縱軸上按時(shí)間順序排序,因此消息序號(hào)通常予以省略。
(8) 協(xié)作圖:包含類(lèi)元角色和關(guān)聯(lián)角色,而不僅僅是類(lèi)元和關(guān)聯(lián)。協(xié)作圖強(qiáng)調(diào)參加交互的各對(duì)象的組織。協(xié)作圖只對(duì)相互間有交互作用的對(duì)象和這些對(duì)象間的關(guān)系建模,而忽略了其他對(duì)象和關(guān)聯(lián)。協(xié)作圖也是一種交互圖,它強(qiáng)調(diào)收發(fā)消息的對(duì)象的組織結(jié)構(gòu)。
協(xié)作圖和序列圖是協(xié)作的,它們可以互相轉(zhuǎn)換。在多數(shù)情況下,協(xié)作圖主要對(duì)單調(diào)的、順序的控制流建模,但它也可以用來(lái)對(duì)包括迭代和分支在內(nèi)的復(fù)雜控制流進(jìn)行建模。
一般而言,建模人員可以創(chuàng)建多個(gè)協(xié)作圖,其中一些是主要的,另外一些是可選擇的路徑或者異常條件。建模人員可以用包來(lái)組織這些協(xié)作圖,并給每個(gè)圖起一個(gè)合適的名字,以便與其它圖區(qū)別開(kāi)。
(9) 活動(dòng)圖:用于展現(xiàn)參與行為的類(lèi)的活動(dòng)或動(dòng)作。
活動(dòng)圖是狀態(tài)圖的一種特殊情況,其中幾乎所有或大多數(shù)狀態(tài)都處于活動(dòng)狀態(tài),而且?guī)缀跛谢蛘叽蠖鄶?shù)變遷都是由源狀態(tài)中活動(dòng)的完成觸發(fā)的。活動(dòng)圖本質(zhì)上是一種流程圖,它描述了從活動(dòng)到活動(dòng)的控制流。
可以把活動(dòng)圖看作是新樣的交互圖,但交互圖觀察的是傳遞消息的對(duì)象,而活動(dòng)圖觀察到的是對(duì)象之間傳送的消息。盡管兩者在語(yǔ)義上的區(qū)別很細(xì)微,但它們使用不同的方式來(lái)看系統(tǒng)的。
如果你覺(jué)得本文不錯(cuò)的話,請(qǐng)你點(diǎn)擊屏幕右下方的
。如果你以后會(huì)用到這篇文章的或覺(jué)得以后要重新翻閱的話,你可以點(diǎn)擊屏幕右下角的
。如果你覺(jué)得我的博文不錯(cuò)或是想在第一時(shí)間看到我的動(dòng)態(tài)的話,你可以點(diǎn)擊屏幕右下角
。如果你想說(shuō)點(diǎn)什么的話,你可以點(diǎn)擊屏幕右下方的
。如果你都點(diǎn)過(guò)了,那真的太謝謝你了,兄弟太支持了。此時(shí),或許你可以點(diǎn)擊
按鈕,然后看看博文的導(dǎo)航繼續(xù)瀏覽其他文章。
摘要: 在flex組件中嵌入html代碼,可以利用flex iframe。這個(gè)在很多時(shí)候會(huì)用到的,有時(shí)候flex必須得這樣做,如果你不這樣做還真不行…… flex而且可以和html進(jìn)行JavaScript交互操作,flex調(diào)用到html中的JavaScript方法以及獲取調(diào)用后的返回值。 1、flex iframe下載地址:https://github.com/downloads/flex... 閱讀全文最后,歡迎大家繼續(xù)支持和關(guān)注我的博客:
http://blog.csdn.net/IBM_hoojo
也歡迎大家和我交流、探討IT方面的知識(shí)。
在UML類(lèi)圖中,常見(jiàn)的有以下幾種關(guān)系: 泛化(Generalization), 實(shí)現(xiàn)(Realization),關(guān)聯(lián)(Association),聚合(Aggregation),組合(Composition),依賴(Dependency)。
1.1、 繼承關(guān)系—泛化(Generalization)
指的是一個(gè)類(lèi)(稱為子類(lèi)、子接口)繼承另外的一個(gè)類(lèi)(稱為父類(lèi)、父接口)的功能,并可以增加它自己的新功能的能力,繼承是類(lèi)與類(lèi)或者接口與接口之間最常見(jiàn)的關(guān)系;在Java中用extends關(guān)鍵字。
【泛化關(guān)系】是一種繼承關(guān)系,表示一般與特殊的關(guān)系,它指定了子類(lèi)如何特化父類(lèi)的所有特征和行為。例如:貓頭鷹是鳥(niǎo)的一種,即有鳥(niǎo)的特性也有貓頭鷹的共性。
【箭頭指向】帶三角箭頭的實(shí)線,箭頭指向父類(lèi)。
【描述】上圖中的類(lèi)bird有嘴、翅膀、羽毛等屬性。會(huì)飛、會(huì)唧唧喳喳的叫,那么就有這些方法。而貓頭鷹有大眼睛和捕捉老鼠的本領(lǐng),這則是自身的特性。
1.2、 實(shí)現(xiàn)關(guān)系(Realization)
指的是一個(gè)class類(lèi)實(shí)現(xiàn)interface接口(可以是多個(gè))的功能;實(shí)現(xiàn)是類(lèi)與接口之間最常見(jiàn)的關(guān)系;在Java中此類(lèi)關(guān)系通過(guò)關(guān)鍵字implements明確標(biāo)識(shí)。
【實(shí)現(xiàn)關(guān)系】是一種類(lèi)與接口的關(guān)系,表示類(lèi)是接口所有特征和行為的實(shí)現(xiàn).
【箭頭指向】帶三角箭頭的虛線,箭頭指向接口。
【描述】上圖中IFly是一個(gè)接口,接口中有時(shí)間、速度等常量,還有一個(gè)fly方法。FlyImpl繼承了這個(gè)IFly接口后,需要實(shí)現(xiàn)fly方法,同時(shí)實(shí)現(xiàn)類(lèi)也可以擁有自己的屬性和方法。
1.3、 依賴(Dependency)
可以簡(jiǎn)單的理解,就是一個(gè)類(lèi)A使用到了另一個(gè)類(lèi)B,而這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,但是B類(lèi)的變化會(huì)影響到A;比如某人要過(guò)河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴;表現(xiàn)在代碼層面,為類(lèi)B作為參數(shù)、屬性被類(lèi)A在某個(gè)method方法中使用;
【依賴關(guān)系】是一種使用的關(guān)系,即一個(gè)類(lèi)的實(shí)現(xiàn)需要另一個(gè)類(lèi)的協(xié)助,所以要盡量不使用雙向的互相依賴。
【代碼表現(xiàn)】局部變量、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用
【箭頭及指向】帶箭頭的虛線,指向被使用者
【描述】Bird類(lèi)中有一個(gè)setFly方法,它需要使用者用到IFly接口的實(shí)現(xiàn),那么這種關(guān)系就是依賴關(guān)系。
1.4、 關(guān)聯(lián)
他體現(xiàn)的是兩個(gè)類(lèi)、或者類(lèi)與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴關(guān)系,比如我和我的朋友;這種關(guān)系比依賴更強(qiáng)、不存在依賴關(guān)系的偶然性、關(guān)系也不是臨時(shí)性的,一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的、關(guān)聯(lián)可以是單向、雙向的;表現(xiàn)在代碼層面,為被關(guān)聯(lián)類(lèi)B以類(lèi)屬性的形式出現(xiàn)在關(guān)聯(lián)類(lèi)A中,也可能是關(guān)聯(lián)類(lèi)A引用了一個(gè)類(lèi)型為被關(guān)聯(lián)類(lèi)B的全局變量;
【關(guān)聯(lián)關(guān)系】是一種擁有的關(guān)系,它使一個(gè)類(lèi)知道另一個(gè)類(lèi)的屬性和方法;如:老師與學(xué)生,丈夫與妻子關(guān)聯(lián)可以是雙向的,也可以是單向的。雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒(méi)有箭頭,單向的關(guān)聯(lián)有一個(gè)箭頭。
【代碼體現(xiàn)】成員變量
【箭頭及指向】帶普通箭頭的實(shí)心線,指向被擁有者
【描述】在Bird類(lèi)中有一個(gè)IFly類(lèi)型的fly屬性,需要提供IFly的接口實(shí)現(xiàn)。Bird對(duì)象會(huì)利用IFly接口的實(shí)現(xiàn)完成fly方法。
1.4.1、雙向關(guān)聯(lián)
雙方都知道對(duì)方的存在,都可以調(diào)用對(duì)方的公共屬性、方法。
【關(guān)聯(lián)關(guān)系】雙方都有關(guān)聯(lián)的關(guān)系,通過(guò)自身對(duì)對(duì)方關(guān)聯(lián)的屬性來(lái)訪問(wèn)對(duì)方的屬性和方法。
【代碼體現(xiàn)】成員變量
【箭頭及指向】用不帶箭頭的實(shí)線連接雙方
【描述】在中國(guó)一個(gè)妻子只能嫁給一個(gè)丈夫,一個(gè)丈夫也只能取一個(gè)妻子。
1.4.2、自身關(guān)聯(lián)
自己關(guān)聯(lián)自己,這種情況比較少出現(xiàn)但是也有用到。
【自關(guān)聯(lián)關(guān)系】雙方都有關(guān)聯(lián)的關(guān)系,通過(guò)自身對(duì)自身關(guān)聯(lián)的屬性引用來(lái)訪問(wèn)對(duì)方的屬性和方法。
【代碼體現(xiàn)】成員變量
【箭頭及指向】用帶普通箭頭的實(shí)線連接自己
【描述】在盜夢(mèng)空間中,演員需要在夢(mèng)中再造夢(mèng),這種夢(mèng)中夢(mèng)的情況跟上圖描述很符合。
1.5、 聚合(Aggregation)
聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分、擁有的關(guān)系,即has-a的關(guān)系,此時(shí)整體與部分之間是可分離的,他們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享;比如計(jì)算機(jī)與CPU、公司與員工的關(guān)系等;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分;
【聚合關(guān)系】是整體與部分的關(guān)系,且部分可以離開(kāi)整體而單獨(dú)存在。如車(chē)和輪胎是整體和部分的關(guān)系,輪胎離開(kāi)車(chē)仍然可以存在。聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系;關(guān)聯(lián)和聚合在語(yǔ)法上無(wú)法區(qū)分,必須考察具體的邏輯關(guān)系。
【代碼體現(xiàn)】成員變量
【箭頭及指向】帶空心菱形的實(shí)心線,菱形指向整體
【描述】birdChild一只鳥(niǎo)有很多鳥(niǎo)寶寶,所以自引用。鳥(niǎo)有很多不同數(shù)量和顏色的羽毛,所以引用關(guān)系是0~*。
1.6、 組合(Composition)
組合也是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱為強(qiáng)聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束;比如你和你的大腦;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分;
【組合關(guān)系】是整體與部分的關(guān)系,但部分不能離開(kāi)整體而單獨(dú)存在。如公司和部門(mén)是整體和部分的關(guān)系,沒(méi)有公司就不存在部門(mén)。組合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系還要強(qiáng)的關(guān)系,它要求普通的聚合關(guān)系中代表整體的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期。
【代碼體現(xiàn)】成員變量
【箭頭及指向】帶實(shí)心菱形的實(shí)線,菱形指向整體
【描述】一個(gè)學(xué)校由多個(gè)班級(jí)組成,班級(jí)離開(kāi)學(xué)校也就不存在、而學(xué)校離開(kāi)班級(jí)也不成立。像這種不可分離的關(guān)系就需要用組合。
綜合示例
對(duì)于繼承、實(shí)現(xiàn)這兩種關(guān)系沒(méi)多少疑問(wèn),他們體現(xiàn)的是一種類(lèi)與類(lèi)、或者類(lèi)與接口間的縱向關(guān)系;其他的四者關(guān)系則體現(xiàn)的是類(lèi)與類(lèi)、或者類(lèi)與接口間的引用、橫向關(guān)系,是比較難區(qū)分的,有很多事物間的關(guān)系要想準(zhǔn)備定位是很難的,前面也提到,這幾種關(guān)系都是語(yǔ)義級(jí)別的,所以從代碼層面并不能完全區(qū)分各種關(guān)系;但總的來(lái)說(shuō),后幾種關(guān)系所表現(xiàn)的強(qiáng)弱程度依次為:泛化 = 實(shí)現(xiàn) > 組合 > 聚合 > 關(guān)聯(lián) > 依賴。
異常信息如下:
org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.Date' to required type 'java.sql.Timestamp' for property 'wfsj'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.util.Date] to required type [java.sql.Timestamp] for property 'wfsj': no matching editors or conversion strategy found
at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:463)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:494)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1097)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:882)
at org.springframework.flex.core.io.SpringPropertyProxy.setValue(SpringPropertyProxy.java:182)
at flex.messaging.io.amf.Amf3Input.readScriptObject(Amf3Input.java:438)
at flex.messaging.io.amf.Amf3Input.readObjectValue(Amf3Input.java:152)
at flex.messaging.io.amf.Amf3Input.readObject(Amf3Input.java:130)
at flex.messaging.io.amf.Amf3Input.readArray(Amf3Input.java:358)
…………
at flex.messaging.io.amf.AmfMessageDeserializer.readObject(AmfMessageDeserializer.java:227)
at flex.messaging.io.amf.AmfMessageDeserializer.readBody(AmfMessageDeserializer.java:206)
at flex.messaging.io.amf.AmfMessageDeserializer.readMessage(AmfMessageDeserializer.java:126)
at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:145)
at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:291)
at flex.messaging.endpoints.AMFEndpoint$$EnhancerByCGLIB$$6f090fa2.service(<generated>)
at org.springframework.flex.servlet.MessageBrokerHandlerAdapter.handle(MessageBrokerHandlerAdapter.java:109)
…………
Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.util.Date] to required type [java.sql.Timestamp] for property 'wfsj': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:264)
at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:448)
... 59 more
看異常信息大概知道屬性wfsj這個(gè)字段,不能完成java.util.Date 到 java.sql.Timestamp 日期時(shí)間戳的轉(zhuǎn)換。后面還有提示, 沒(méi)有找到匹配的conversion或editor。
conversion 在Spring中轉(zhuǎn)換對(duì)象屬性會(huì)用到,而editor和converter 以及formatter也是在轉(zhuǎn)換對(duì)象(String –> Date, String –> Timestamp),從字符串到對(duì)象,從對(duì)象到字符串的時(shí)候會(huì)經(jīng)常用到。
解決方法:
<bean id="customConfigProcessor" class="com.jp.tic.framework.flex.converter.CustomAmfConversionServiceConfigProcessor"/><flex:message-broker services-config-path="/WEB-INF/flex/services-config.xml"><flex:exception-translator ref="flexExceptionTranslator" /><flex:config-processor ref="configProcessor"/><flex:config-processor ref="customConfigProcessor"/><!--<flex:message-interceptor ref="flexMessageInterceptor" />
<flex:message-interceptor ref="loginMessageInterceptor" />-->
</flex:message-broker>為message-broker對(duì)象注入CustomAmfConversionServiceConfigProcessor對(duì)象,CustomAmfConversionServiceConfigProcessor是繼承AbstractAmfConversionServiceConfigProcessor對(duì)象。
AbstractAmfConversionServiceConfigProcessor對(duì)象中提供了對(duì)各個(gè)類(lèi)型轉(zhuǎn)換serialization/deserialization的方法。
package com.jp.tic.framework.flex.converter;
import java.util.HashSet;
import java.util.Set;
import org.springframework.flex.core.io.AbstractAmfConversionServiceConfigProcessor;
/**
* <b>function:</b> 自定義AMF轉(zhuǎn)換服務(wù)
* @author hoojo
* @createDate 2013-7-17 下午01:35:12
* @file CustomAmfConversionServiceConfigProcessor.java
* @package com.jp.tic.framework.flex.converter
* @project JTZHJK-Server
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class CustomAmfConversionServiceConfigProcessor extends AbstractAmfConversionServiceConfigProcessor {private static Set<Class<?>> classes = new HashSet<Class<?>>();@Overrideprotected Set<Class<?>> findTypesToRegister() {
return classes;
}}
摘要: 一、 概述與介紹 ActiveMQ 是Apache出品,最流行的、功能強(qiáng)大的即時(shí)通訊和集成模式的開(kāi)源服務(wù)器。ActiveMQ 是一個(gè)完全支持JMS1.1和J2EE 1.4規(guī)范的 JMS Provider實(shí)現(xiàn)。提供客戶端支持跨語(yǔ)言和協(xié)議,帶有易于在充分支持JMS 1.1和1.4使用J2EE企業(yè)集成模式和許多先進(jìn)的功能。 二、 特性 1、 多種語(yǔ)言和協(xié)議編寫(xiě)客戶端。語(yǔ)言: Java... 閱讀全文如果你還需要添加更多自己的轉(zhuǎn)化服務(wù),那么你需要給CustomAmfConversionServiceConfigProcessor 注入conversionService對(duì)象。
<!-- 添加配置類(lèi)型轉(zhuǎn)換器、轉(zhuǎn)換服務(wù) -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><list><bean class="com.jp.tic.framework.mvc.convert.StringToTimestampConverter"/><bean class="com.jp.tic.framework.mvc.convert.DateToTimestampConverter"/></list></property><property name="formatters"><list><bean class="com.jp.tic.framework.mvc.formatter.SimpleDateTimeFormatAnnotationFormatterFactory"/><bean class="com.jp.tic.framework.mvc.formatter.TimestampFormatterFactory"/></list></property></bean>
<bean id="customConfigProcessor" class="com.jp.tic.framework.flex.converter.CustomAmfConversionServiceConfigProcessor"><property name="conversionService" ref="conversionService"/></bean>