找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1934|回复: 0
打印 上一主题 下一主题
收起左侧

EIT(Enterprise IT)/企业IT(Git,Maven,Hibernate,SQL,GWT) 复习

[复制链接]
跳转到指定楼层
楼主
ID:71407 发表于 2014-12-31 02:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本学期的重头戏是两门Projektpraktika(实习课)。一门是robotik(机器人学)一门是EIT。其中机器人的实习课已经早就完成了。虽然最后的效果差强人意,但也毕竟也算是把证书拿到手了。而另外一门EIT则一直悬在半空。最后要到下个月的15号验收。希望一切顺利。

现在一点点的将EIT的内容整理一下。

EIT实习课的要求是两人一组完成一个分布式应用----书籍评价系统。其中包括后台的数据库和提供给用户操作的页面,即网络应用程序(Web Service)。其实这是最简单最常见的网络应用程序。

其中数据库由SQL和JDBC来实现,而Web Service由GWT(google web Toolkit)实现,此外还用到了的技术包括GIT、Maven和Hibernate。
GIT用于分布式版本管理。也就是说便于大家合作,以及保存历史修改记录。
Maven则是项目管理和理解工具。Install(build)和Test以及各种Dependency等都归其处理。例如本项目会用到的GWT和Hibernate等。类似于Ant,但比Ant要方便很多。
Hibernate则用于对象和关系数据库之间的映射。


其实一直以来就很怵这些东西。因为基础实在不好,而且作为实习课是没有人教的,必须自学。相比较而言,信号处理或者机器人相关的东西反倒让我感觉舒服很多。不过呢,既然已经选了EIT的模块,EIT的实习课也就逃不掉了。现在剩半个多月的时间,硬着头皮把这个弄完吧。


Git 分布式版本管理
首先介绍一个很好的网站 open-open里面有很多非常棒的文档供学习。
本来一直弄不明白怎么用Git,因为总是在wiki这样的地方晃来晃去。后来在自己写了代码要和同学的代码合并的时候才终于在实践时看了open-open的几篇文章后弄明白了。

这是一篇很不错的介绍文章:

那Git到底是什么呢?Git --- The stupid content tracker,傻瓜内容跟踪器。Linux是这样给我们介绍Git的。 —— wiki
其实非常非常的简单。就是一套帮助一个项目组的人合作完成项目的工具。
比如说项目组中有A,B和C三个人。每个人会负责一些功能的开发。而在未最终开发完成之前,三个人总是需要不停的将自己最近写的代码/完成的功能进行update,并让其他人也可以看到和用到。和以前的Subversion(svn)所不同的是,这里没有一个作为中心的服务器,而是分布到各个远程仓库中的。在每个人的本地有一个仓库保存所有代码。于此同时个人还有一个工作空间(Workplace)用于写代码,也就是自留地。每隔一段时间,或者完成了一定的功能后,将新建的文档加入到被跟踪文件中,或者将刚修改的曾经被列入到被跟踪文件加入到将升级文件中,也就是上了入库名单了。这两件事情都可以通过git add fileName来完成。而后使用git commit来将上述两类文件提交给本地仓库,也就是文件入库了。此后可以和远程仓库利用pull和push两个指令进行交互。如果产生了冲突(conflict)的话,git会标示出冲突的位置,并用<<<<<<HEAD将冲突的代码段的两方都标示出来,由开发者去选择其中正确的部分。由此解决了冲突问题。
其中常用的命令有
git add fileName 将未被跟踪的文档加入跟踪文档中,以及将已被跟踪且修改过的文档添加到将被commit的行列中
git status 查看当前文档的状态。。例如哪些文档被修改了,被删除了,以及哪些文档还没有被列入跟踪的行列中
rm -rf fileName 将某文档从被跟踪列表中移除
git commit 提交给当地的仓库
git commit -m "myMessage" 提交给当地的仓库并附带本次提交的说明信息
git pull 从远程的仓库中拉取最新的文档
git push 将本地仓库的最新文档传到远程的仓库中,这样合作同伴也可以看到了
git checkout 从多个branch中选择想要的branch
git branch 查看有哪些branch以及当前处于哪个branch中


Maven
Maven是一种项目管理和理解工具。原型是原始项目或模型,可以通过原始项目复制出其它同类型的事物。Maven中的原型就是项目模板。项目模板加上一些用户输入就可以任何用户需求的Maven项目。
在控制台中输入以下命令
mvn archetype: creat
-DarchetypeGroupID=org.apache.maven.archetypes
-DgroupID=com.mycompany.app

-DartifactID=my-app
就可以创建新项目了。

一旦执行了这些命令,就可以在新项目下发现一个名字为my-app的文件夹。此文件夹下包含了一个pom.xml的文件。如下图所示:



图1:pom.xml示意图

pom.xml包含项目的Project object model(POM)。POM是Maven中的工作的基本单元。在POM中包含了项目的各种重要信息。下面分别对各个元素进行说明。



图2:pom的说明

现在回到刚刚创建的项目中来。可以看到新的项目的目录结构如下图所示:







图3:项目的目录结构



图4:目录结构解释

可以看到依据原型生的项目包括pom和程序的源代码目录树结构以及测试源代码的目录树结构。这是标准的Maven项目的布局结构。

然后就可以在这些目录结构下写代码了。现在接着接好一些常用指令:

    编译  mvn compile
    执行该命令后会有如下输出



图5:执行编译时的输出

注意:在第一次编译的时候Maven会下载所有插件以及执行当前命令所需的依赖项。所以通常会持续一段时间。如图4中所示花费了将近4分钟。当时我在头次编译EIT的时候也花了很长时间。不过之后的话就会快很多了。

编译后的二进制class都会存放在根目录下的target/classes中。Maven相对比于Ant的一个优势就是在于你不需要指定源文件的位置以及编译后文件的保存位置。所有的都依照maven的约束来进行。

    测试 mvn test
    执行该命令后有如下输出:



                                                      


图6:测试输出

    如果只想编译测试代码则 输入 mvn test-compile


    创建jar包 mvn package
    回顾pom.xml可以看到其中packaging被设定为jar。所以执行上面的命令之后就可以在target目录中找到你需要的jar文件了。

    安装 mvn install
    执行了上面这个指令就可以将JAR文件安装到本地资料库中(默认是~/.m2/repository)。然后得到如下的输出



                                                     
图7:安装输出
经过以上几个命令已经将一个典型的Maven项目进行了设置、构建、测试、打包和安装。这基本上是使用Maven构建项目的大部分。

其实上述指令对应了Maven的生命周期。


    Maven的生命周期:
    validate :验证工程是否正确,所有需要的资源是否可用。

    compile:编译项目的源代码。

    test-compile:编译项目测试代码。

    test:使用已编译的测试代码,测试已编译的源代码。

    package:已发布的格式,如jar,将已编译的源代码打包。

    integration-test:在集成测试可以运行的环境中处理和发布包。

    verify:运行任何检查,验证包是否有效且达到质量标准。

    install:把包安装在本地的repository中,可以被其他工程作为依赖来使用。

    deploy:在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。

    generate-sources:产生应用需要的任何额外的源代码,如xdoclet。




注:主要内容节选自Maven入门指南


Hibernate

每一个持久化POJO类都是一个实体Bean,这可以通过在类的定义中使用@Entity来实现。
而@id注解则声明了该实体bean的标识属性。

SQL
本项目提供了通过控制台操作SQL的界面。地址和密码都是由管理员通过EMAIL发给每个人的。
而每句SQL指令后都强制要求加分号。

常用的SQL的指令:
SHOW TABLES; 显示当前所有表格
SELECT * FROM users; 选取users这个表的所有列
SELECT * FROM users WHERE userName = "user1"; 选取users这个表中userName是user1的所有列
INSERT INTO users VALUES (a,b,c); 添加一列到users表中
DROP users; 删除users表



GWT
GWT是google推出的用于编写网络应用程序的平台,可以作为一个插件结合在eclipse里应用。
之前完成了页面设计,但是Client-Server Communication还没有实现。现在在跟着GWT官网的Tutorials里的例子学习实现RPC(Remote Procedure Call)。也就是把原本在client的功能放到Server去做。因为只有Server才有需要的数据。

我目前要做的其实也很简单。就是一个最普通的用户登录功能。也就是在客户端由客户输入用户名和密码,然后将这些数据作为一个对象打包发送给Server,在Server完成验证之后,将验证结果反馈给客户端。

现在粗略的这部分整理一下。

1,Creating a service 创建一个Service(服务)
1.1, Defining the service 定义服务 --> the interface 接口
在GWT 中,RPC 服务是由继承自GWT RemoteService的接口所定义的。
在Client端创建一个接口,命名为UserAuthenticationService。里面只有一个返回类型为布尔值的方法,名为getAuthenticationResult。

1.2, Implementing the service 实现该服务
在Server端创建一个JAVA类,extend自the RemoteServiceServlet class,命名为UserAuthenticationServiceImpl。
然后Write the server-side implementaton 完成服务器端的实现。
在此重载唯一的一个方法getAuthenticationResult。在该方法中读取数据库来实现用户验证(未完成)。

1.3 Include the server-side code in the GWT module 将服务器端的代码加进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”这两个elements加入到web application deployment descriptor (web.xml)中去。


2. Invoking the service from the client 从客户端调用该服务
2.1 Making asynchronous calls to the server
需要将一个AsyncCallback parameter加入到所有的服务方法中。

2.2 Making the remote procedure call


其实最主要的就是两个接口(Interface)和一个实现。两个接口分别是myService和myServiceAsync,而一个实现则是myServiceImpl。其中接口都在Client端,而实现则在Server端。然后在触发事件的时候就new一个ServiceAsync的callback。由此实现RPC远程调用。

此外就是写网页的界面了。这个可以用GWT的Designer来完成,也可以手工编写。感觉就算自己写的话如果不是很复杂的界面倒也还OK。
最终本项目中在客户端有两个接口:
1. getAuthenticationResult 返回类型为UserDto。返回的是一个完整的用户对象,而如果用户名或者密码错误则返回null。
2. getAuthenticationResultAnsyc 此接口可以由Maven自动生成

在服务器有一个实现:
getAuthenticationResultImpl 具体实现RPC的调用。

后记:在15.03那天终于把这个课程结束了。最终只是完成了简单的登录操作。
GWT完成UI设计,并通过RPC调用远程服务器的方法。
MAVEN负责整个项目的管理以及部分代码的自动生成。
GIT负责整个项目组之间的合作。
Hibernate则负责JAVA的对象和关系数据库的表之间的映射。即实现对象的持久化。
当然数据库还是SQL的事了。

最后发现要让MAVEN、eclipse、GWT在一起运作会很麻烦。比如经常在用MAVEN install自动生成GWT需要的Async的接口时自动修改返回值类型。总是需要手动修改就很讨厌。

不过不管怎么说,这个Schein到手了,离毕业论文就更近一些了。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表