找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2181|回復(fù): 0
收起左側(cè)

EIT(Enterprise IT)/企業(yè)IT(Git,Maven,Hibernate,SQL,GWT) 復(fù)習(xí)

[復(fù)制鏈接]
ID:71407 發(fā)表于 2014-12-31 02:56 | 顯示全部樓層 |閱讀模式
本學(xué)期的重頭戲是兩門Projektpraktika(實(shí)習(xí)課)。一門是robotik(機(jī)器人學(xué))一門是EIT。其中機(jī)器人的實(shí)習(xí)課已經(jīng)早就完成了。雖然最后的效果差強(qiáng)人意,但也畢竟也算是把證書拿到手了。而另外一門EIT則一直懸在半空。最后要到下個(gè)月的15號(hào)驗(yàn)收。希望一切順利。

現(xiàn)在一點(diǎn)點(diǎn)的將EIT的內(nèi)容整理一下。

EIT實(shí)習(xí)課的要求是兩人一組完成一個(gè)分布式應(yīng)用----書籍評(píng)價(jià)系統(tǒng)。其中包括后臺(tái)的數(shù)據(jù)庫和提供給用戶操作的頁面,即網(wǎng)絡(luò)應(yīng)用程序(Web Service)。其實(shí)這是最簡單最常見的網(wǎng)絡(luò)應(yīng)用程序。

其中數(shù)據(jù)庫由SQL和JDBC來實(shí)現(xiàn),而Web Service由GWT(google web Toolkit)實(shí)現(xiàn),此外還用到了的技術(shù)包括GIT、Maven和Hibernate。
GIT用于分布式版本管理。也就是說便于大家合作,以及保存歷史修改記錄。
Maven則是項(xiàng)目管理和理解工具。Install(build)和Test以及各種Dependency等都?xì)w其處理。例如本項(xiàng)目會(huì)用到的GWT和Hibernate等。類似于Ant,但比Ant要方便很多。
Hibernate則用于對(duì)象和關(guān)系數(shù)據(jù)庫之間的映射。


其實(shí)一直以來就很怵這些東西。因?yàn)榛A(chǔ)實(shí)在不好,而且作為實(shí)習(xí)課是沒有人教的,必須自學(xué)。相比較而言,信號(hào)處理或者機(jī)器人相關(guān)的東西反倒讓我感覺舒服很多。不過呢,既然已經(jīng)選了EIT的模塊,EIT的實(shí)習(xí)課也就逃不掉了。現(xiàn)在剩半個(gè)多月的時(shí)間,硬著頭皮把這個(gè)弄完吧。


Git 分布式版本管理
首先介紹一個(gè)很好的網(wǎng)站 open-open里面有很多非常棒的文檔供學(xué)習(xí)。
本來一直弄不明白怎么用Git,因?yàn)榭偸窃趙iki這樣的地方晃來晃去。后來在自己寫了代碼要和同學(xué)的代碼合并的時(shí)候才終于在實(shí)踐時(shí)看了open-open的幾篇文章后弄明白了。

這是一篇很不錯(cuò)的介紹文章:

那Git到底是什么呢?Git --- The stupid content tracker,傻瓜內(nèi)容跟蹤器。Linux是這樣給我們介紹Git的。 —— wiki
其實(shí)非常非常的簡單。就是一套幫助一個(gè)項(xiàng)目組的人合作完成項(xiàng)目的工具。
比如說項(xiàng)目組中有A,B和C三個(gè)人。每個(gè)人會(huì)負(fù)責(zé)一些功能的開發(fā)。而在未最終開發(fā)完成之前,三個(gè)人總是需要不停的將自己最近寫的代碼/完成的功能進(jìn)行update,并讓其他人也可以看到和用到。和以前的Subversion(svn)所不同的是,這里沒有一個(gè)作為中心的服務(wù)器,而是分布到各個(gè)遠(yuǎn)程倉庫中的。在每個(gè)人的本地有一個(gè)倉庫保存所有代碼。于此同時(shí)個(gè)人還有一個(gè)工作空間(Workplace)用于寫代碼,也就是自留地。每隔一段時(shí)間,或者完成了一定的功能后,將新建的文檔加入到被跟蹤文件中,或者將剛修改的曾經(jīng)被列入到被跟蹤文件加入到將升級(jí)文件中,也就是上了入庫名單了。這兩件事情都可以通過git add fileName來完成。而后使用git commit來將上述兩類文件提交給本地倉庫,也就是文件入庫了。此后可以和遠(yuǎn)程倉庫利用pull和push兩個(gè)指令進(jìn)行交互。如果產(chǎn)生了沖突(conflict)的話,git會(huì)標(biāo)示出沖突的位置,并用<<<<<<HEAD將沖突的代碼段的兩方都標(biāo)示出來,由開發(fā)者去選擇其中正確的部分。由此解決了沖突問題。
其中常用的命令有
git add fileName 將未被跟蹤的文檔加入跟蹤文檔中,以及將已被跟蹤且修改過的文檔添加到將被commit的行列中
git status 查看當(dāng)前文檔的狀態(tài)。。例如哪些文檔被修改了,被刪除了,以及哪些文檔還沒有被列入跟蹤的行列中
rm -rf fileName 將某文檔從被跟蹤列表中移除
git commit 提交給當(dāng)?shù)氐膫}庫
git commit -m "myMessage" 提交給當(dāng)?shù)氐膫}庫并附帶本次提交的說明信息
git pull 從遠(yuǎn)程的倉庫中拉取最新的文檔
git push 將本地倉庫的最新文檔傳到遠(yuǎn)程的倉庫中,這樣合作同伴也可以看到了
git checkout 從多個(gè)branch中選擇想要的branch
git branch 查看有哪些branch以及當(dāng)前處于哪個(gè)branch中


Maven
Maven是一種項(xiàng)目管理和理解工具。原型是原始項(xiàng)目或模型,可以通過原始項(xiàng)目復(fù)制出其它同類型的事物。Maven中的原型就是項(xiàng)目模板。項(xiàng)目模板加上一些用戶輸入就可以任何用戶需求的Maven項(xiàng)目。
在控制臺(tái)中輸入以下命令
mvn archetype: creat
-DarchetypeGroupID=org.apache.maven.archetypes
-DgroupID=com.mycompany.app

-DartifactID=my-app
就可以創(chuàng)建新項(xiàng)目了。

一旦執(zhí)行了這些命令,就可以在新項(xiàng)目下發(fā)現(xiàn)一個(gè)名字為my-app的文件夾。此文件夾下包含了一個(gè)pom.xml的文件。如下圖所示:



圖1:pom.xml示意圖

pom.xml包含項(xiàng)目的Project object model(POM)。POM是Maven中的工作的基本單元。在POM中包含了項(xiàng)目的各種重要信息。下面分別對(duì)各個(gè)元素進(jìn)行說明。



圖2:pom的說明

現(xiàn)在回到剛剛創(chuàng)建的項(xiàng)目中來。可以看到新的項(xiàng)目的目錄結(jié)構(gòu)如下圖所示:







圖3:項(xiàng)目的目錄結(jié)構(gòu)



圖4:目錄結(jié)構(gòu)解釋

可以看到依據(jù)原型生的項(xiàng)目包括pom和程序的源代碼目錄樹結(jié)構(gòu)以及測(cè)試源代碼的目錄樹結(jié)構(gòu)。這是標(biāo)準(zhǔn)的Maven項(xiàng)目的布局結(jié)構(gòu)。

然后就可以在這些目錄結(jié)構(gòu)下寫代碼了,F(xiàn)在接著接好一些常用指令:

    編譯  mvn compile
    執(zhí)行該命令后會(huì)有如下輸出



圖5:執(zhí)行編譯時(shí)的輸出

注意:在第一次編譯的時(shí)候Maven會(huì)下載所有插件以及執(zhí)行當(dāng)前命令所需的依賴項(xiàng)。所以通常會(huì)持續(xù)一段時(shí)間。如圖4中所示花費(fèi)了將近4分鐘。當(dāng)時(shí)我在頭次編譯EIT的時(shí)候也花了很長時(shí)間。不過之后的話就會(huì)快很多了。

編譯后的二進(jìn)制class都會(huì)存放在根目錄下的target/classes中。Maven相對(duì)比于Ant的一個(gè)優(yōu)勢(shì)就是在于你不需要指定源文件的位置以及編譯后文件的保存位置。所有的都依照maven的約束來進(jìn)行。

    測(cè)試 mvn test
    執(zhí)行該命令后有如下輸出:



                                                      


圖6:測(cè)試輸出

    如果只想編譯測(cè)試代碼則 輸入 mvn test-compile


    創(chuàng)建jar包 mvn package
    回顧pom.xml可以看到其中packaging被設(shè)定為jar。所以執(zhí)行上面的命令之后就可以在target目錄中找到你需要的jar文件了。

    安裝 mvn install
    執(zhí)行了上面這個(gè)指令就可以將JAR文件安裝到本地資料庫中(默認(rèn)是~/.m2/repository)。然后得到如下的輸出



                                                     
圖7:安裝輸出
經(jīng)過以上幾個(gè)命令已經(jīng)將一個(gè)典型的Maven項(xiàng)目進(jìn)行了設(shè)置、構(gòu)建、測(cè)試、打包和安裝。這基本上是使用Maven構(gòu)建項(xiàng)目的大部分。

其實(shí)上述指令對(duì)應(yīng)了Maven的生命周期。


    Maven的生命周期:
    validate :驗(yàn)證工程是否正確,所有需要的資源是否可用。

    compile:編譯項(xiàng)目的源代碼。

    test-compile:編譯項(xiàng)目測(cè)試代碼。

    test:使用已編譯的測(cè)試代碼,測(cè)試已編譯的源代碼。

    package:已發(fā)布的格式,如jar,將已編譯的源代碼打包。

    integration-test:在集成測(cè)試可以運(yùn)行的環(huán)境中處理和發(fā)布包。

    verify:運(yùn)行任何檢查,驗(yàn)證包是否有效且達(dá)到質(zhì)量標(biāo)準(zhǔn)。

    install:把包安裝在本地的repository中,可以被其他工程作為依賴來使用。

    deploy:在整合或者發(fā)布環(huán)境下執(zhí)行,將最終版本的包拷貝到遠(yuǎn)程的repository,使得其他的開發(fā)者或者工程可以共享。

    generate-sources:產(chǎn)生應(yīng)用需要的任何額外的源代碼,如xdoclet。




注:主要內(nèi)容節(jié)選自Maven入門指南


Hibernate

每一個(gè)持久化POJO類都是一個(gè)實(shí)體Bean,這可以通過在類的定義中使用@Entity來實(shí)現(xiàn)。
而@id注解則聲明了該實(shí)體bean的標(biāo)識(shí)屬性。

SQL
本項(xiàng)目提供了通過控制臺(tái)操作SQL的界面。地址和密碼都是由管理員通過EMAIL發(fā)給每個(gè)人的。
而每句SQL指令后都強(qiáng)制要求加分號(hào)。

常用的SQL的指令:
SHOW TABLES; 顯示當(dāng)前所有表格
SELECT * FROM users; 選取users這個(gè)表的所有列
SELECT * FROM users WHERE userName = "user1"; 選取users這個(gè)表中userName是user1的所有列
INSERT INTO users VALUES (a,b,c); 添加一列到users表中
DROP users; 刪除users表



GWT
GWT是google推出的用于編寫網(wǎng)絡(luò)應(yīng)用程序的平臺(tái),可以作為一個(gè)插件結(jié)合在eclipse里應(yīng)用。
之前完成了頁面設(shè)計(jì),但是Client-Server Communication還沒有實(shí)現(xiàn),F(xiàn)在在跟著GWT官網(wǎng)的Tutorials里的例子學(xué)習(xí)實(shí)現(xiàn)RPC(Remote Procedure Call)。也就是把原本在client的功能放到Server去做。因?yàn)橹挥蠸erver才有需要的數(shù)據(jù)。

我目前要做的其實(shí)也很簡單。就是一個(gè)最普通的用戶登錄功能。也就是在客戶端由客戶輸入用戶名和密碼,然后將這些數(shù)據(jù)作為一個(gè)對(duì)象打包發(fā)送給Server,在Server完成驗(yàn)證之后,將驗(yàn)證結(jié)果反饋給客戶端。

現(xiàn)在粗略的這部分整理一下。

1,Creating a service 創(chuàng)建一個(gè)Service(服務(wù))
1.1, Defining the service 定義服務(wù) --> the interface 接口
在GWT 中,RPC 服務(wù)是由繼承自GWT RemoteService的接口所定義的。
在Client端創(chuàng)建一個(gè)接口,命名為UserAuthenticationService。里面只有一個(gè)返回類型為布爾值的方法,名為getAuthenticationResult。

1.2, Implementing the service 實(shí)現(xiàn)該服務(wù)
在Server端創(chuàng)建一個(gè)JAVA類,extend自the RemoteServiceServlet class,命名為UserAuthenticationServiceImpl。
然后Write the server-side implementaton 完成服務(wù)器端的實(shí)現(xiàn)。
在此重載唯一的一個(gè)方法getAuthenticationResult。在該方法中讀取數(shù)據(jù)庫來實(shí)現(xiàn)用戶驗(yàn)證(未完成)。

1.3 Include the server-side code in the GWT module 將服務(wù)器端的代碼加進(jìn)GWT組件中
The embedded servlet container (Jetty) can host the servlets that contain your service implementation. This means you can take advantage of running your application in development mode while testing and debugging the server side Java code.
為此,將"servlet" 和“servlet-mapping”這兩個(gè)elements加入到web application deployment descriptor (web.xml)中去。


2. Invoking the service from the client 從客戶端調(diào)用該服務(wù)
2.1 Making asynchronous calls to the server
需要將一個(gè)AsyncCallback parameter加入到所有的服務(wù)方法中。

2.2 Making the remote procedure call


其實(shí)最主要的就是兩個(gè)接口(Interface)和一個(gè)實(shí)現(xiàn)。兩個(gè)接口分別是myService和myServiceAsync,而一個(gè)實(shí)現(xiàn)則是myServiceImpl。其中接口都在Client端,而實(shí)現(xiàn)則在Server端。然后在觸發(fā)事件的時(shí)候就new一個(gè)ServiceAsync的callback。由此實(shí)現(xiàn)RPC遠(yuǎn)程調(diào)用。

此外就是寫網(wǎng)頁的界面了。這個(gè)可以用GWT的Designer來完成,也可以手工編寫。感覺就算自己寫的話如果不是很復(fù)雜的界面倒也還OK。
最終本項(xiàng)目中在客戶端有兩個(gè)接口:
1. getAuthenticationResult 返回類型為UserDto。返回的是一個(gè)完整的用戶對(duì)象,而如果用戶名或者密碼錯(cuò)誤則返回null。
2. getAuthenticationResultAnsyc 此接口可以由Maven自動(dòng)生成

在服務(wù)器有一個(gè)實(shí)現(xiàn):
getAuthenticationResultImpl 具體實(shí)現(xiàn)RPC的調(diào)用。

后記:在15.03那天終于把這個(gè)課程結(jié)束了。最終只是完成了簡單的登錄操作。
GWT完成UI設(shè)計(jì),并通過RPC調(diào)用遠(yuǎn)程服務(wù)器的方法。
MAVEN負(fù)責(zé)整個(gè)項(xiàng)目的管理以及部分代碼的自動(dòng)生成。
GIT負(fù)責(zé)整個(gè)項(xiàng)目組之間的合作。
Hibernate則負(fù)責(zé)JAVA的對(duì)象和關(guān)系數(shù)據(jù)庫的表之間的映射。即實(shí)現(xiàn)對(duì)象的持久化。
當(dāng)然數(shù)據(jù)庫還是SQL的事了。

最后發(fā)現(xiàn)要讓MAVEN、eclipse、GWT在一起運(yùn)作會(huì)很麻煩。比如經(jīng)常在用MAVEN install自動(dòng)生成GWT需要的Async的接口時(shí)自動(dòng)修改返回值類型?偸切枰謩(dòng)修改就很討厭。

不過不管怎么說,這個(gè)Schein到手了,離畢業(yè)論文就更近一些了。


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表