[译] 第二十八天:Java开发者的OpenShift Eclipse 集成

前言

今天的30天挑战,我决定来写OpenShift Eclipse集成。程序在OpenShift上运行,从开始咱们就用OpenShift Eclipse插件远程开发和部署程序。这个系列大部分咱们会用Eclipse Kepler,请先下载它,而后开始。 html

前提准备

  1. 掌握Java基础知识。
  2. 安装最新的Java Development      Kit(JDK), 能够安装OpenJDK 7或者Oracle JDK 7, OpenShift支持OpenJDK 6 和7. 本文咱们用JDK 7.
  3. 官网下载最新的Eclipse包,目前最新版本叫Kepler.
     

安装eclipse很简单,只需解压下载的包就可,Linux或者Mac上,打开终端输入如下命令:java

$ tar -xzvf eclipse-jee-kepler-R-*.tar.gz
View Code

Windows上,用7-zip或者其余解压工具解压,解压后,会有一个eclipse的文件夹,也能够对可执行文件建立一个快捷方式linux

第一步:安装OpenShift Eclipse 插件

下载和解压Java EE的Eclipse Kepler IDE后,打开Eclipse导航到项目空间,到Help>Eclipse Marketplace能够看到如图。git

  

在搜索框内输入'jboss tools'点击Go按钮。 web

点击后能看到第一个结果'Jboss Tools(Kepler)'.mongodb

 

如今点击install按钮,能够看到可安装的插件列表。由于本文的目的是用OpenShift, 只需选择'Jboss OpenShift Tools', 选择后点'Confirm'按钮。数据库

 

接受服务条款,点击'I accept the terms of the license agreement' 而后点Finish.json

 

Eclipse会给出一个安全警示框由于这个插件没有签名,点击OK, 最后重启Eclipse使改动生效,点击Yes重启。api

第二步:建立OpenShift程序

安装后OpenShift Eclipse 插件后,就能够开始建立程序了。到File>New>Other>OpenShift Application新建程序。浏览器

  

点击'Next', 会要求提供OpenShift帐号和密码,若是你尚未OpenShift帐号,能够点击窗口上的注册连接注册。

 

点击从这里注册,Eclipse 内置浏览器会打开OpenShift注册页面,咱们能够从Windows>Preferences或者Eclipse>Preferences改默认浏览器。

  

经过第一次选择'用外部浏览器'能够把默认浏览器改为Chrome或者FireFox,而后点New按钮,输入你喜欢的浏览器信息。

 

接下来选择新加的Google Chrome做为默认浏览器。最后点击Apply 再点OK.

再次到File > New > Other > OpenShift Application,若是再点注册,连接会在Chrome打开。 

注册后,咱们会获得一个验证邮件,这是在开始用OpenShift前须要作的。 

成功验证后,能够输入帐号密码新建OpenShift链接,勾上'保存密码',就不用每次都输密码了,填好后点击Next.

当按Next按钮时,咱们能够输入额外信息恢复密码,我选的是'No', 咱们也能够选Yes.

 

点击'No'以后,须要新建OpenShift 域,若是咱们这个帐号尚未OpenShift域,那就须要新建一个。这个域名是一个惟一的命名空间,全部程序都在这个空间下。不一样用户不会有相同域名,域名能够是任何不超过32个字符的字母或数字。它是程序url的一部分,例如,程序名sharemylocation,域名onppenshiftcloud,那我完成的程序名是 http://sharemylocation-onopenshiftcloud.rhcloud.com.

 

接下来,会加载一个视图,用于上传ssh密钥到OpenShift, OpenShift须要SSH.

  1. 执行Git操做。
  2. 远程程序gear. 

咱们能够上传已有的SSH或者点击New按钮新建,如今咱们新建一个密钥,点击New.

 

咱们须要提供密钥的名字,以及私有和公共密钥文件名,我用的是个人名字做为密钥和文件名。

  

接下来会被引到程序建立窗口,须要输入程序信息,包括程序名,类型,gear文件(小型的或者普通型,对于免费用户,咱们只能用小型的),能否升级程序,是否想嵌入一种或多种cartridge如MySQL, PostgreSQL, MongoDB或者其余的。咱们采用MongoDB.

 

而后须要安装sharemylocation 程序并配置服务适配器,选择默认点下一步。

 

接下来会让咱们指定克隆git仓库的路径和远程git的名字。

 

最后点击finish按钮,程序就会开始建立,这会建立一个叫gear的程序容器,安装所需的SELinux策略和cgroup配置。OpenShift会在gear安装MongoDB, Jboss工具 OpenShift插件会显示MongoDB详细信息。

 

OpenShift也会为你安装一个私有git仓库,克隆到本地,而后它会把DNS传播到网络。最后,项目会在Eclipse空间做为Maven项目导入。 

导入Eclipse后,会问咱们是否想发布没有执行的更新。

 

你也许会好奇你尚未做任何改动,怎么会问你发布更新,缘由是当项目导入到Eclipse, Jboss工具在.settings文件件下建立了一个.jsdtscope的文件,OpenShift Eclipse插件让咱们发布时这个文件没有被忽略,咱们能够到Git Staging View很容易的忽略它,到 Window > Show View > Other > Git > Git Staging.

 

在Git Staging视图下右击.jsdtscope,选择忽略。

  

咱们能够到OpenShift查看在线运行程序。打开OpenShift Explorer视图,到 Window > Show View > Other > JBoss Tools > OpenShift Explorer,它会新开一个视图。

  

右击程序,点击'Web browser', 就会在默认浏览器打开程序模板。

 

 

第三步:理解部署流程

在继续以前,咱们须要了解部署流程怎样工做的。

  1. 咱们写功能代码,而后用Git Staging view提交代码到Git本地仓库,Git Stagng view会给出图像视图显示更新,能够很容易比较和查看咱们更新的文件。
  2. 在Git Staging View里,咱们有两个选择,能够提交更新到本地仓库,或者提交并推送。后者,代码推送到远程的origin git, 这个origin远程指向有OpenShift建立的私有git仓库。当代码推送到远程仓库,OpenShift会开始构建。用Git Staging View提交并推送的问题是咱们不能监测程序构建日志。要查看日志,咱们须要用服务器查看发布机制。咱们用服务器配置sharemylocation,右击程序点击发布去发布更新。这本质也是作了一次git推送,好处是会新开一个控制台能查看监测程序构建进程。 

第四步:首次更改

来作点小改动来更好理解上一步提到的部署流程,打开index.html,作以下更改。

<h1>
    Welcome to OpenShift, JBossEAP6.0 Cartridge
</h1>
View Code

改为

<h1>
    OpenShift MongoDB Backbone.js Tutorial
</h1>
View Code

到Git Staging View, 能够看到更新。

 

而后拖动更新到Staged Changes, 输入提交信息。

 

点击'Commit'提交,前面提到,不要用'Commit and Push', 它会自动触发程序发布,不能查看日志。这个日志很重要,当构建失败时能够帮到咱们。 

到服务器视图,能够看到sharemylocation程序的服务器配置。

 

右击程序服务,点击'Publish'.

会有一个窗口确认是否想发布更新。

点击'Yes', 它会新开一个控制台视图,咱们能够在这里查看构建进度。

 

要查看Jboss EAP程序服务器的日志文件,在服务器视图上右击sharemylocation,而后点Tail files.

 

而后配置tail只对服务器.log文件,默认的,它会tail全部日志包括数据库日志。

 

它会另外开一个控制台视图,只会tail Jboss EAP服务器.log文件。

 

最后,咱们能够在浏览器里右击sharemylocation>Show In>Web Browser 查看更新.

 

它会在默认浏览器里显示咱们在index.html里作的更新。

 

第五步:激活热部署

默认行为是当咱们有任何发布或者git推送时,OpenShift会先中止cartridge(MongoDB和Jboss EAP服务),而后作maven构建,构建成功后,再启动cartridge,部署war. 这会花不少时间,也不是快速部署的理想状态。咱们能够启动热部署来加速这个过程,热部署不会中止cartridge,只需替换war文件。 

要激活热部署,右击程序,到OpenShift>Configure Markers.

 

而后咱们会看到一个视图,能够配置想激活的OpenShift Markers, 能够看到,默认的,java7 marker是激活的,这确保程序用Java 7,若是咱们不激活它,Java 6 就会被使用。

咱们选择Hot Deploy Marker, 这会在 .openshift/markers文件夹下新建空文件hot_deploy.

 

接下来,到Git Staging View, 能够看到hot_deploy文件在'Unstaged Changes'下。

拖动hot_deploy文件到'Staged Changes', 填写提交信息,而后点击'Commit'.

 

到'Server View', 发布更新,如今能够清晰的从日志中看到cartridges没有中止,由于激活了热部署。

Not stopping cartridge jbosseap because hot deploy is enabled
Not stopping cartridge mongodb because hot deploy is enabled
Building jbosseap cartridge
Scaling down Maven heap settings due to presence of hot_deploy marker
Found pom.xml... attempting to build with 'mvn -e clean package -Popenshift -DskipTests'
Apache Maven 3.0.3 (r1075437; 2011-06-20 13:22:37-0400)
Maven home: /etc/alternatives/maven-3.0
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.45/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "2.6.32-358.23.2.el6.x86_64", arch: "i386", family: "unix"
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building sharemylocation 1.0
[INFO] ------------------------------------------------------------------------
 
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/lib/openshift/526f931ce0b8cd94f300003f/app-root/runtime/repo/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ sharemylocation ---
[INFO] Packaging webapp
[INFO] Assembling webapp [sharemylocation] in [/var/lib/openshift/526f931ce0b8cd94f300003f/app-root/runtime/repo/target/sharemylocation]
[INFO] Processing war project
[INFO] Building war: /var/lib/openshift/526f931ce0b8cd94f300003f/app-root/runtime/repo/deployments/ROOT.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
Starting application sharemylocation
Not starting cartridge mongodb because hot deploy is enabled
Deploying jbosseap cartridge

Not starting cartridge jbosseap because hot deploy is enabled
View Code

太棒了,当程序代码有更新时它能很快给出反馈,这为咱们节省了大量时间,提升了效率。 

第六步:更新到Java 7

虽然OpenShift是用Java 7构建项目,可是Maven项目仍然用的Java 6, 要更新到Java 7, 在pom.xml里更新以下属性。

<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
View Code

更改后,点击项目,到Maven>Update Project.

 

这就会更新项目到Java 7. 

第七步:删除模板文件

自Java EE 6起,web.xml是可选的,咱们能够用注释配置大部分的组件。删除由OpenShift建立的除index.html之外的全部模板文件。删除web.xml, health.jsp, snoop.jsp, image文件夹。Git Staging View会显示更新,而后咱们提交。

 

第八步:更新Maven War插件

若是咱们发布这些更新,构建会失败,由于maven war插件配置在pom.xml里,期待web.xml是存在,最新的Maven war插件添加了一个配置属性,failOnMissingWebXml属性通知war插件,若是web.xml不存在,构建也不该该失败。

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <outputDirectory>deployments</outputDirectory>
        <warName>ROOT</warName>
    </configuration>
</plugin>
View Code

如今用Git Staging View提交更新,而后用前面提到的sharemylocation 服务发布。

 

第九步:写PingResource

本文最后写一个简单的RESTful资源,当有请求到/api/v1/ping时做为响应返回'{'ping':'pong'}',我习惯写一个ping服务确保全部配置都正确。 

咱们用JAX-RS写RESTful web services. JAX-RS为写RESTful 服务定义了annotation-driven API. 

在写PingResource前,须要激活JAX-RS,建立一个类继承javax.ws.rs.core。 程序和程序指定路径用 javax.ws.rs.ApplicationPath.

javax.ws.rs.ApplicationPath.
 
package com.sharemylocation.rest;
 
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
 
@ApplicationPath("/api/v1")
public class RestInitializer extends Application {
 

}
View Code

最后,写PingResource用于响应'/api/v1/ping'请求。

package com.sharemylocation.rest;
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
 
@Path("/ping")
public class PingResource {
 
    @GET
    @Produces(value = "application/json")
    public String ping() {
        return "{'ping': 'pong'}";
    }

}
View Code

如今用Git Staging View提交更新,而后用前面提到的sharemylocation 服务发布。 

 

这就是今天的内容,继续给反馈吧。 

原文:https://www.openshift.com/blogs/day-28-openshift-eclipse-integration-for-java-developers

相关文章
相关标签/搜索