摘要:今天的天学习种新技术我決定介绍的集成。会警告该插件未签名。同时将创建一个私有的仓库并克隆到本地。热部署仅仅替换文件而不会停止服务。如果将其禁用,那么应用将使用。转到视图发布改动。删除模板文件以上版本下,为可选。
编者注:我们发现了有趣的系列文章《30天学习30种新技术》,正在翻译,一天一篇更新,年终礼包。下面是第 28 天的内容。
今天的《30天学习30种新技术》 我決定介绍OpenShift的Eclipse集成。应用将运行在OpenShift上,我们将使用OpenSHift的Eclipse插件来开发和部署一个应用。
预备要求基本Java知识。
在你的系统上安装最新版的JDK。你可以安装OpenJDK 7和Oracle JDK 7。OpenShift支持 OpenJDK6 和 7。
从官网 下载最新的 Eclipse 包。 在撰写本文的时候,最新的Eclipse包叫作Kepler。
安装eclipse很容易,解压缩即可。
tar -xzvf eclipse-jee-kepler-R-*.tar.gz1. 安装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. 理解开发工作流编写功能代码,通过Git Staging view提交到Git。Git Staging view提供可视化的界面,让我们很容易地查看和比较我们作的改动。
在Git Staging View下,我们有两个选择。或者我们仅仅作一个本地提交,或者同时推送到远程。推送到远程之后哦,OpenShift将开死后构建我们的应用。
4. 第一个改动为了更好地理解上述工作流,让我们做个小改动——修改下index.html:
OpenShift MongoDB Backbone.js Tutorial
访问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。
1.7 1.7
改动之后,右击项目,Maven > Update。
7. 删除模板文件Java EE 6以上版本下,web.xml为可选。我们可以使用annotation配置大多数组建。我们将删除web.xml、health.jsp、snop.jsp和image文件夹。git staging视图将显示这些改动,我们可以提交。
8. 更新Maven War插件如果现在发布,那么构建会失败。因为maven war插件预设web.xml存在。最新版的Maven war插件添加了一个配置属性。failOnMissingWebXml属性会告诉war插件,构建不应仅因web.xml不存在而失败。
修改pom.xml:
maven-war-plugin 2.4 false deployments ROOT
使用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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64020.html
摘要:会警告该插件未签名。以上命令告诉创建一个名为的项目,使用包。的工具使从部署应用非常方便。域名构成了分配给应用的的一部分。这将为我们创建一个应用容器,自动配置和。同时将创建一个私有的仓库并克隆到本地。 编者注:我们发现了有趣的系列文章《30天学习30种新技术》,正在翻译,一天一篇更新,年终礼包。下面是第 17 天的内容。 今天的30天学习30种新技术挑战,我决定学习一下JBoss ...
摘要:要安装,输入更新到最新版本,执行如果需要阅读额外的安装命令行工具时的帮助文件,可以浏览使用命令设置好账户,这个命令会为你创建一个命名空间,然后上传你的到服务器上。也有一个插件,但这篇文章中,我会使用命令行工具。 在30天学习30种新技术的第六天,我决定去学习一个 web 开发框架 : Grails。 Grails 是一个基于 Groovy 和 Java 的开源 Web 框架。它是 J...
摘要:现在可以通过点击指标检查的指标,该数据是可用的格式。健康检查被添加。现在启动,可以看到第步创建现在写类,它负责创建博客条目。为了测试,做一个请求第步更新现在,更新方法来从获取所有的博客文件。 编者注:我们发现了比较有趣的系列文章《30天学习30种新技术》,准备翻译,一天一篇更新,年终礼包。下面是第十三天的内容。 我已经是一个使用了8年Java的软件开发人员了,我写过的大多数应用程...
摘要:是什么是一个用编写的开源机器学习服务器应用,可以帮助你方便地使用搭建推荐引擎。是一个可伸缩的机器学习库,它提供众多聚集分类过滤算法。我为什么要关心我决定学习是因为我想使用一个可以帮助我加上机器学习功能的库。 编者注:我们发现了比较有趣的系列文章《30天学习30种新技术》,准备翻译,一天一篇更新,年终礼包。下面是第四天的内容。 今天是30天学习30种新技术的第4天。到目前为止我很享...
阅读 3314·2021-11-12 10:36
阅读 2467·2021-11-02 14:43
阅读 2145·2019-08-30 14:23
阅读 3462·2019-08-30 13:08
阅读 919·2019-08-28 18:09
阅读 3128·2019-08-26 12:22
阅读 3139·2019-08-23 18:24
阅读 2015·2019-08-23 18:17