今天的《30天学习30种新技术》 我決定介绍OpenShift的Eclipse集成。应用将运行在OpenShift上,我们将使用OpenSHift的Eclipse插件来开发和部署一个应用。

预备要求

  1. 基本Java知识。

  2. 在你的系统上安装最新版的JDK。你可以安装OpenJDK 7和Oracle JDK 7。OpenShift支持 OpenJDK6 和 7。

  3. 从官网 下载最新的 Eclipse 包。 在撰写本文的时候,最新的Eclipse包叫作Kepler。

安装eclipse很容易,解压缩即可。

tar -xzvf eclipse-jee-kepler-R-*.tar.gz

1. 安装OpenShfit的Eclipse插件

打开Eclipse,进入你的项目工作空间。打开 Help > Eclipse Marketplace,你会看到如下屏幕。

在搜索框中搜寻“jboss tools”。第一个结果就是“JBoss Tools(Kepler)”。

点击“安装”,会出现选择安装插件的列表。由于本文的目的是演示,我们只选上JBoss OpenShift Tools。选中之后点击“确认”。

现在我们需要接受许可协议。选择接受后点击完成。

Eclipse会警告该插件未签名。点击“确认”然后Eclipse会要求重启,点击“是”,重启一下。

2. 创建一个OpenShift应用

插件安装好之后,创建OpenShift应用很容易。

在eclipse中点击 File > New > Other > OpenShift Application,在下图所示页面中点击“下一步”:

需要填写OpenShift账号信息,如果你还没有注册,你可以点击“现在注册”,会有一个向导界面引导你注册。

接下来要创建一个OpenShift域名。每一个账号有且仅有一个独特的域名。域名构成了OpenShift分配给应用的URL的一部分。例如,如果你的应用的名字是“sharemylocation”,你的域名是“onopenshiftcloud”,那么应用的URL就是 http://sharemylocation-onopenshiftcloud.rhcloud.com。

接着我们需要上传SSH key到OpenShift. SSH key 用于进行Git操作和访问应用gear。

我们可以上传已有的,也可以新建。点击New按钮可以新建。

我们需要提供key名和私钥、公钥的文件名。

接着会出现应用创建向导,我们需要填写应用的一些细节。注意选择MongoDB。

接着我们需要配置sharemylocation应用和服务器。选择默认的就行。

接着会询问关于git仓库的一些信息。保留默认选项即可。

最后,点击“完成”按钮。这将为我们创建一个应用容器(gear),自动配置SELinux和cgroup。OpenShift同时将创建一个私有的git仓库并克隆到本地。然后会配置DNS。OpenShift也将安装MongoDB。

最后,这个项目会以Maven项目的形式被导入到Eclipse的工作空间。

导入之后,会询问是否将未提交的代码推送到OpenShift。

你可能会寻思,你并没有改动这个应用,那为什么会询问是否推送呢?原因在于当项目导入到Eclipse的时候,JBoss在.settings文件夹下创建了一个.jsdtscope文件。由于这个文件并没有被忽略,OpenShift Eclipse插件会询问是否部署。我们可以设置忽略这个文件,访问Window > Show View > Other > Git > Git Staging.

我们可以在OpenShift的explore view中查看我们的在线应用。访问Window > Show View > Other > JBoss Tools > OpenShift Explorer.

右击应用,点击Web browser,会在默认浏览器中打开模板应用。

3. 理解开发工作流

  1. 编写功能代码,通过Git Staging view提交到Git。Git Staging view提供可视化的界面,让我们很容易地查看和比较我们作的改动。

  2. 在Git Staging View下,我们有两个选择。或者我们仅仅作一个本地提交,或者同时推送到远程。推送到远程之后哦,OpenShift将开死后构建我们的应用。

4. 第一个改动

为了更好地理解上述工作流,让我们做个小改动——修改下index.html

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

访问Git Staging view能看到改动:

将改动拖到到Staged Changes,撰写提交信息。

点击Commit按钮提交改动。如上所述,不要使用Commit and Push,以免触发应用部署而不显示构建日志。构建日志很有用,特别是在构建失败的时候。

访问Server view:

右击应用服务器,点击发布:

会出现确认框,点击Yes。

会出现一个console界面,显示构建的进展:

如果想查看JBoss EAP的应用服务器,只需在Server view下右击sharemylocation,选择Tail files.

默认tail所有的日志文件,包括数据库日志文件。我们将配置仅仅tail server.log文件。

这会开启一个新的console界面,里面只显示JBoss EAP server.log

最后,我们可以在浏览器里查看改动,右击sharemylocation服务器,接着点击 Show In > Web Browser.

我们可以在默认浏览器里看到改动。

5. 热部署

默认配置下,一旦我们发布了应用,或者进行了git push,OpenShift会停止MongoDB和JBoss EAP server等服务,然后做一个maven构建,构建完毕之后才会重启各项服务,开始部署。这会消耗很多时间,不利于快速开发。我们可以通过启用热部署来提速。热部署仅仅替换文件而不会停止服务。

右击项目,访问OpenShift > Configure Markers来激活热部署。

然后需要做一些配置。我们看到Java 7默认是启用的。如果将其禁用,那么应用将使用Java 6。

我们启用Hot Deploy。这会在.openshift/markers文件夹下创建一个hot_deploy空文件。

接着我们访问Git Staging视图,可以看到hot_deploy文件位于Unstaged Changes中。

将其拖动到Staged Changes,撰写提交信息,点击Commit按钮提交。

转到Server视图发布改动。构建日志会显示热部署已启用。

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

类似的,server日志会显示它只是替换了WAR文件。这是秒部署。

2013/10/30 03:31:57,174 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015877: Stopped deployment ROOT.war (runtime-name: ROOT.war) in 260ms
2013/10/30 03:31:57,200 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015876: Starting deployment of "ROOT.war" (runtime-name: "ROOT.war")
2013/10/30 03:31:57,316 INFO  [org.jboss.web] (ServerService Thread Pool -- 67) JBAS018210: Register web context:
2013/10/30 03:31:57,630 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018565: Replaced deployment "ROOT.war" with deployment "ROOT.war"

好极了!改动代码之后很快就能得到反馈。节省了很多时间,提高了我们的生产效率。

6. 升级到Java 7

尽管OpenShift使用Java 7构建项目,但是Maven项目仍然使用Java 6。修改pom.xml中的以下属性,以便升级到Java 7。

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

改动之后,右击项目,Maven > Update。

7. 删除模板文件

Java EE 6以上版本下,web.xml为可选。我们可以使用annotation配置大多数组建。我们将删除web.xmlhealth.jspsnop.jsp和image文件夹。git staging视图将显示这些改动,我们可以提交。

8. 更新Maven War插件

如果现在发布,那么构建会失败。因为maven war插件预设web.xml存在。最新版的Maven war插件添加了一个配置属性。failOnMissingWebXml属性会告诉war插件,构建不应仅因web.xml不存在而失败。

修改pom.xml

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

使用Git Staging视图提交改动。然后发布。

9. 编写PingResource

我们将编写一个简单的RESTful服务,当/api/v1/ping收到请求后会回应{'ping': 'pong'},以确保一切工作正常。

我们将使用JAX-RS来编写RESTful服务。JAX-RS定义了一组annotation驱动的API,可以用于编写RESTful服务。

编写PingResource,我们需要在应用中启用JAX-RS。创建一个javax.ws.rs.core的扩展类。

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

最后,我们编写响应/api/v1/ping请求的PingResource。

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'}";}
}

提交、发布之后,我们可以查看效果:

PingResource Demo

今天的内容就是这些了。继续回馈。


原文 Day 28: OpenShift Eclipse Integration for Java Developers
翻译 SegmentFault

Day 28: OpenShift的Eclipse集成相关推荐

  1. Java-Maven(四):Eclipse集成Maven环境配置

    一般maven都需要集成到IDE上使用的,而不是单独的使用,常见的maven可集成IDE:eclipse.IntelliJ IDEA.但这里就只学习eclipse集成maven的基础上,进行maven ...

  2. Java开发SVM之Eclipse集成LibSVM示例

    LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单.易于使用和快速有效的SVM模式识别与回归的软件包. 1.官网下载LibSVM    1)官网:http://www.c ...

  3. eclipse集成tomcat运行web时提示引入jar包的类找不到的解决办法

    在eclipse集成tomcat开发web时,java类引入的jar包,编译通过,但启动tomcat运行web时提示找不到jar包内的类,需要作如下配置,将jar包在部署到集成的tomcat环境中. ...

  4. ubuntu下部署eclipse集成hadoop\android\web\GCC开发环境小记

    Hadoop环境: 1.部署:    1)ubuntu上创建新用户账号:hadoop/123,并设置为管理员:    2)ubuntu上安装SSH:创建rsa无密码ssh-key:    3)ubun ...

  5. GWT与Eclipse集成开发初步研究

    GWT与Eclipse集成开发初步研究 原文:http://blog.sina.com.cn/s/blog_415bd707010086cy.html JDK6.0 下载.安装.配置 http://b ...

  6. 掌握python编程语言tensorflow_手把手教你eclipse集成Python语言+Tensorflow环境

    本文主要向大家介绍了手把手教你eclipse集成Python语言+Tensorflow环境,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.安装Eclipse 百度Eclips ...

  7. jetty eclipse_3个步骤实现Jetty和Eclipse集成

    jetty eclipse 本教程将引导您逐步了解如何集成Jetty和Eclipse,以及如何在Eclipse中的Jetty服务器上运行Web应用程序. 脚步: 安装Jetty Eclipse插件 建 ...

  8. 3步实现Jetty和Eclipse集成

    本教程将引导您逐步了解如何集成Jetty和Eclipse,以及如何在Eclipse中的Jetty服务器上运行Web应用程序. 脚步: 安装Jetty Eclipse插件 建立网路应用程式 运行网络应用 ...

  9. maven2 + tomcat6 + eclipse集成配置

    转载:http://wenku.baidu.com/view/d64147c676eeaeaad1f330d4.html?re=view /* maven2 + tomcat6 + eclipse集成 ...

最新文章

  1. 数字信号处理与音频处理(使用Audition)
  2. 3.1 神经网络概览-深度学习-Stanford吴恩达教授
  3. python图书管理系统
  4. linux vi脚本,linux下vi(vim)的新的用法总结
  5. Bootstrap HTML 编码规范之字符编码
  6. 毕业设计论文封面模板
  7. 应用系统运行监控界面_重庆悦来会展二期电力监控系统的设计与应用
  8. 从源码角度深入理解LayoutInflater
  9. c语言课程表代码,[计算机]c语言课程表源代码
  10. Java电子发票管理系统
  11. GD32系列外部中断
  12. 全新一代智慧园区数字孪生解决方案,为园区运营商和集成商赋能
  13. 1K直接金属涂层(DTM)-市场现状及未来发展趋势
  14. 【中文乱码】深入分析 Java Web 中的中文编码问题
  15. unit怎么发音_“unit”怎么读?
  16. 顺序表——基本概念、顺序表类实现、基本操作
  17. MySQL-01.深入理解MySQL底层数据结构
  18. Redis第六讲 Redis之List底层数据结构实现
  19. Serv-u + 花生壳实现FTP内网穿透
  20. MnTTS: 开源蒙古语语音合成数据集及其基线模型

热门文章

  1. 盘点过去一年,MIT人工智能实验室的那些创新
  2. LeetCode_349. 两个数组的交集
  3. java web 播放音频_使用Java ME以流形式播放Web服务器上的音乐文件
  4. 【Linux】【服务器】 CentOS7下安装Redis详细过程步骤
  5. linux shell 输出到数据库,linux shell 入门
  6. 威联通架设php网站_使用QNAP NAS虚拟主机功能架设多个网站
  7. object-c html,object.html
  8. python中global的用法
  9. css选择器 pa,p~a,p+a区别
  10. 小程序菜单栏吸顶效果