// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= 在 Oracle Cloud 上运行 Web 应用程序
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 在 Oracle Cloud 上运行 Web 应用程序 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 在 Oracle Cloud 上运行 Web 应用程序

Oracle Cloud 是适合运营业务的企业云。Oracle Cloud 具有在集成开发和部署平台上提供的自助业务应用程序，并提供可快速扩展和创建新服务的工具。有关 Oracle Cloud 的详细信息，请参见 link:https://cloud.oracle.com[+Oracle Cloud 主页+]。

本文档介绍如何将 Oracle Cloud 注册到 NetBeans IDE 以及 IDE 中支持的某些 Oracle Cloud 功能。本文档讨论了完全在云上工作和先使用本地服务器然后部署到云的某些优势和劣势。在创建完简单的 Web 应用程序之后，请按照 link:quickstart-webapps.html[+Web 应用程序简介+]中的说明操作并在 Oracle Cloud 上运行该应用程序。

您可能还需要查看 Java Training Beat 博客上的link:https://blogs.oracle.com/javatraining/entry/oracle_cloud_development_with_netbeans[+使用 NetBeans 和 Eclipse (OEPE) 进行 Oracle Cloud 开发+]系列教程。


image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0"]


*要学习本教程，您需要具备以下软件和资源。*

|===
|软件或资源 |要求的版本 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.3、7.4、8.0、Java EE 版本 

|Oracle Cloud 插件 |可通过 NetBeans 插件管理器从 NetBeans 更新中心获取 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发工具包 (JDK)+] |版本 7 或版本 8 

|Oracle Java Cloud Service |在 link:http://cloudcentral.c9dev.oraclecorp.com/mycloud/f?p=SERVICE:free_trial:0[+Oracle Cloud 公共可用性主页+]上注册 

|Oracle Java Cloud Service SDK |从 link:http://cloud.oracle.com[+Oracle Cloud 主页+]下载。 

|link:http://www.oracle.com/technetwork/middleware/weblogic/overview/index.html[+Oracle WebLogic Server+] 
（用于本地开发和测试应用程序）

 |
《Oracle Java Cloud Service 用户指南》第 4 章中指示的版本
本文档可从link:https://cloudeap.oracle.com/mycloud/f?p=service:home:0[+已激活的 Java Cloud 服务+]中的 "Resources"（资源）> "Documentation"（文档）标签获取。 

|link:http://www.oracle.com/technetwork/products/express-edition/downloads/index.html[+OracleXE 数据库服务器+] 
（用于本地开发和测试应用程序） |11g 
|===


[[sdk-download]]
== 下载 Oracle Java Cloud Service SDK

您需要 Oracle Java Cloud Service SDK 的本地副本才能在 Oracle Cloud 上开发 Web 应用程序。您可以从 link:http://cloud.oracle.com[+Oracle Cloud 主页+]下载 Oracle Java Cloud Service SDK。

*下载 Oracle Java Cloud Service SDK：*

1. 使浏览器窗口指向 link:http://cloud.oracle.com[+Oracle Cloud 主页+]。
2. 在主菜单中展开 *Resources*（资源）下拉列表，然后单击 *Downloads*（下载）。
3. 在 "Oracle Java Cloud Service SDK" 部分中单击 *Download Oracle Cloud Java Service SDK*（下载 Oracle Cloud Java Service SDK）。
4. 阅读并接受 Oracle Java Cloud Service SDK 下载页上的 OTN 许可协议以便激活下载链接。
5. 将 SDK 下载到您的本地系统并提取它。


[[install-plugin]]
== 安装 Oracle Cloud 插件

要在 IDE 中启用 Oracle Java Cloud Service 支持，您需要从 NetBeans 更新中心安装 Oracle Cloud 插件。您可以使用 NetBeans 插件管理器安装 Oracle Cloud 插件。

请执行下列步骤以便安装 Oracle Cloud 插件。

1. 从主菜单中选择 "Tools"（工具）> "Plugins"（插件）以打开插件管理器。
2. 在插件管理器中选择 "Available Plugins"（可用插件）标签。
3. 定位 Oracle Cloud 插件并选中相应复选框。单击 "Install"（安装）。

单击 "Install"（安装）后，IDE 随即打开 NetBeans IDE 安装程序。您需要完成安装程序向导中的步骤才能安装此插件。

安装 Oracle Cloud 插件后，添加云提供器向导将在支持的云提供器列表中显示 Oracle Cloud。


== 在 IDE 中注册 Oracle Cloud

您需要在 IDE 的 "Services"（服务）窗口中注册 Oracle Cloud，然后才能使用它。请注意，您需要单独安装 Oracle Java Cloud Service SDK。

*注：*要在 NetBeans IDE 中使用 Oracle Cloud，您需要在 Oracle Cloud 上具有一个帐户。

*要在 IDE 中注册 Oracle Cloud，请执行下列步骤。*

1. 在 IDE 中打开 "Services"（服务）窗口（"Window"（窗口）> "Services"（服务）或 Ctrl-5 组合键）。
2. 右键单击 "Cloud"（云）节点，并选择 "Add Cloud"（添加云）打开 "Add Cloud Provider"（添加云提供器）向导。

image::images/add-cloud.png[]


. 在 "Choose Cloud"（选择云）字段中，选择 "Oracle Cloud" 并单击 "Next"（下一步）以打开 "Oracle Cloud" 面板。

image::images/oracle-cloud1.png[]


. 填写所有字段。浏览包含 Oracle Java Cloud Service SDK JAR 的文件夹。单击 "Next"（下一步）。

单击 "Next"（下一步）后，IDE 会测试到云的连接。如果连接成功，则会显示云服务列表。当前只有 Oracle Cloud Remote 服务器 (Oracle WebLogic) 可用。

*注：*在注册 Oracle Cloud 提供器之后，您可以在其 "Properties"（属性）中更改云详细信息。右键单击 "Oracle Cloud" 节点并选择 "Properties"（属性）以便打开 "Properties"（属性）。



. 确认 Oracle Cloud 提供器已在云资源列表中显示。单击 "Finish"（完成）。

现在，Oracle Cloud 将在 "Services"（服务）窗口中的 "Cloud"（云）节点下方列出。您可以右键单击 "Oracle Cloud" 节点打开上下文菜单，该菜单提供了用于刷新服务列表、打开作业和日志列表、删除云实例或查看云属性的命令。

image::images/cloud-contextmenu.png[]

在 IDE 中注册 Oracle Cloud 后，"Servers"（服务器）节点下方还会显示 "Oracle Cloud Remote" 服务器节点的实例。（如果未显示，请右键单击 "Oracle Cloud" 节点并选择 "Refresh"（刷新））。

image::images/registered-cloud-and-server.png[]

您可以展开 "Oracle Cloud Remote" 节点以便查看部署到远程服务器的应用程序的列表。


== 查看作业和日志

NetBeans IDE 发送给 Oracle Cloud 的每个请求都会生成一个作业。每个作业都具有状态（已提交、正在运行、失败、完成），并且可具有一个或多个日志文件（白名单检查日志、防病毒扫描日志、部署日志）。使用查看作业和日志操作可以查看近期的作业及其日志。

右键单击 "Oracle Cloud" 节点并选择 "View Jobs and Logs"（查看作业和日志）。在编辑器窗口中会显示前 50 个作业和日志的列表。加载此列表需要一定时间。作业列表不会自动刷新。单击 "Refresh"（刷新）可刷新此列表。

image::images/jobs-n-logs.png[]


== Oracle Cloud Remote 服务器

Oracle Cloud Remote 服务器是 Oracle Cloud 上运行的 Oracle WebLogic 的实例。展开 "Oracle Cloud Remote" 节点并查看正在该服务器上运行的应用程序的列表。您可以右键单击某个应用程序以便打开弹出式菜单，该菜单包含用于启动、停止和取消部署该应用程序的命令。单击该菜单中的 "View"（查看）可在浏览器中打开应用程序主页。

image::images/webapp-contextmenu.png[]

要更新已部署的应用程序的列表，请右键单击 "Oracle Cloud Remote" 节点并选择 "Refresh"（刷新）。

image::images/server-contextmenu.png[]

 


== 在本地计算机上开发应用程序

我们建议在本地计算机上开发应用程序，并定期将其部署到 Cloud。虽然可以完全在 Oracle Cloud 上开发 Web 应用程序，但出于以下原因，最好进行本地开发：

* 本地部署在正在运行的服务器上只需数秒钟时间。部署到云可能需要数分钟时间。
* 增量部署只能在本地进行。
* 调试只能在本地进行。

但是，本地开发并部署到 Oracle Cloud 也存在一定风险。本地开发的应用程序可能无法在 Oracle Cloud Remote 服务器上运行。出于安全原因，请在 Oracle WebLogic Server 11g 上进行本地开发，该服务器与 Oracle Cloud Remote 相同。

必须在本地服务器和 Oracle Cloud 服务器之间手动更改 Web 应用程序的服务器。无法自动进行本地开发并定期部署到 Cloud。

*在本地和 Oracle Cloud 之间更改 Web 应用程序服务器：*

1. 在 "Projects"（项目）窗口中，右键单击该应用程序的节点，然后选择 "Properties"（属性）。

image::images/project-contextmenu.png[]


. 在 "Project Properties"（项目属性）中，选择 "Run"（运行）类别。

image::images/run-properties.png[]


. 从 "Server"（服务器）下拉列表中，选择所需服务器（"Oracle Cloud Remote" 或 "local Oracle WebLogic"（本地 Oracle WebLogic））。该服务器必须已在 IDE 中注册。您可以通过在 "Services"（服务）窗口右键单击 "Servers"（服务器）节点来添加服务器。


== 创建 Web 应用程序

转至 link:quickstart-webapps.html[+Web 应用程序开发简介+]并完成该教程。在本地 Oracle WebLogic 服务器上开发 Web 应用程序。在完成应用程序之后，请将服务器更改为 Oracle Cloud Remote 并运行该应用程序。

*注：*您需要本地安装 Oracle WebLogic Server 并将该服务器注册到 IDE。有关详细信息，请参见link:https://netbeans.org/kb/docs/javaee/weblogic-javaee-m1-screencast.html[+将 Web 应用程序部署到 Oracle WebLogic Server 的视频+]。

在将应用程序部署到 Oracle Cloud Remote 服务器之前，请打开 "Output"（输出）窗口（"Window"（窗口）> "Output"（输出）> "Output"（输出）或 Ctrl-4 组合键）。请注意输出窗口中的 "Oracle Cloud Remote Deployment"（Oracle Cloud Remote 部署）标签。此标签向您显示部署进度。

image::images/output-cloud-tab.png[]


[[crud]]
== 使用 JSF 创建 CRUD 应用程序

NetBeans IDE 和 Oracle Cloud 可用于以下使用情形：您具有 Oracle 数据库后端，该后端通过 Oracle WebLogic Server 托管的 Web 应用程序进行管理。使用 NetBeans IDE 可以为现有 Oracle 数据库创建实体类，并为生成的实体类创建 JavaServer Faces (JSF) 页。此情形要求本地安装 OracleXE 数据库服务器和 Oracle WebLogic 应用程序服务器。

*重要提示：*Oracle Cloud Remote WebLogic Server 不支持 JPA 2.0。如果本地 WebLogic Server 已启用 JPA 2.0，请禁用 JPA 2.0 或者对 CRUD 应用程序使用 JPA 1.0 持久性提供器。

*注：*本文档仅简要说明了如何创建实体类和 JSF 页。有关更详细的处理方式，请参见link:jsf20crud.html[+通过数据库生成 JavaServer Faces 2.0 CRUD 应用程序+]。

*使用 JSF 创建 CRUD 应用程序：*

1. 在 OracleXE 数据库服务器上启用样例 HR 方案，并在 NetBeans IDE 中注册此方案。有关详细信息，请参见link:../ide/oracle-db.html[+从 NetBeans IDE 连接到 Oracle 数据库+]。

将 HR 方案注册到 NetBeans IDE 时，请使用 HR 用户名和口令。



. 使用 Java EE5 和 WebLogic Server 本地安装创建 Java Web 应用程序。为该应用程序启用 JSF 框架。

image::images/crudapp-eevers.png[]


image::images/crudapp-jsf.png[]


. 在 "Projects"（项目）窗口中，右键单击项目的根节点，并选择 "New"（新建）> "Entity Classes from Database"（通过数据库生成实体类）。此时将打开 "Entity Classes from Database"（通过数据库生成实体类）向导。


. 在 "Entity Classes from Database"（通过数据库生成实体类）向导中，从 "Data Source"（数据源）下拉框中选择 "New Data Source"（新建数据源）。此时将打开 "Create Data Source"（创建数据源）对话框。

image::images/crudapp-newdatasource.png[]


. 为此数据源命名，使其与已注册的 Oracle Cloud 帐户中的数据库服务名称匹配。

image::images/cloud-db-name.png[]


. 选择您在步骤 1 中创建的 OracleXE HR 数据库连接。单击 "OK"（确定）。此时将关闭 "Create Data Source"（创建数据源）对话框。

image::images/create-datasource.png[]


. 在 "Entity Classes from Database"（通过数据库生成实体类）向导中，"Available Tables"（可用表）字段已使用 HR 方案表名填充。选择某个表（例如，EMPLOYEES），然后单击 "Add"（添加）。点进向导的其余部分，为包含实体类的包指定一个任意名称，并在其他字段中接受所有默认值。


. 在 "Projects"（项目）窗口中，右键单击项目的根节点，然后选择 "New"（新建）> "JSF Pages from Entity Classes"（通过实体类创建 JSF 页）。此时将打开 "New JSF Pages from Entity Classes"（通过实体类新建 JSF 页）向导。


. 在 "Entity Classes"（实体类）面板中，单击 "Select All"（全选）和 "Next"（下一步）。


. 在 "Generate JSF Pages and Classes"（生成 JSF 页和类）面板中，为包和 JSF 文件所在的文件夹指定适当的名称并单击 "Finish"（完成）。


. 在 "Projects"（项目）窗口中，右键单击项目的根节点，然后选择 "Run"（运行）。IDE 会构建项目并将其部署到本地 WebLogic Server。该项目的登录页上会打开一个浏览器。

现在，您已使用 CRUD 和 JSF 创建 Java Web 应用程序的本地版本。您可以本地测试和调整该应用程序。当应用程序处于最终状态时，请将其部署到 Oracle Cloud。

*将 CRUD/JSF 应用程序部署到 Oracle Cloud*

1. 在 "Projects"（项目）窗口中，右键单击项目的根节点，然后选择 "Properties"（属性）。
2. 在 "Properties"（属性）窗口中选择 "Run"（运行）类别。在此类别中，展开 "Server"（服务器）下拉列表并选择 "Oracle Cloud Remote"。单击 "OK"（确定）。

image::images/crudapp-properties.png[]


. 在 "Projects"（项目）窗口中，展开项目的 "Configuration Files"（配置文件）节点，然后双击 `persistence.xml`。该文件将在 XML 编辑器的设计视图中打开。


. 在 "Table Generation Strategy"（表生成策略）下选择 "Create"（创建）。

image::images/crudapp-persistence.png[]


. 如果您的本地 WebLogic Server 已启用 JPA 2.0，则必须将持久性提供器从默认的 "EclipseLink"（使用 JPA 2.0）更改为 JPA 1.0 提供器（例如，OpenJPA）。

*注：*如果您的本地 WebLogic Server 未启用 JPA 2.0，EclipseLink 会退回到使用 JPA 1.0。此种情况下，您不必更改持久性提供器。



. 在 "Projects"（项目）窗口中，右键单击项目的根节点，然后选择 "Run"（运行）。IDE 会构建项目并将其部署到 Oracle Cloud Remote 服务器。您可以在 IDE "Output"（输出）窗口中的 "Oracle Cloud Remote Deployment"（Oracle Cloud Remote 部署）标签内跟进部署进度。

*注意：*Oracle Cloud 尚不支持上载数据库表。因此，当应用程序位于 Oracle Cloud 中时，没有任何数据可用于该应用程序。


== 测试白名单支持

Oracle Cloud 不支持某些标准 Java API 方法，例如， ``System.exit()`` 。Oracle Cloud _白名单_定义允许的所有方法。在将应用程序部署到 Oracle Cloud 时，云服务器会测试白名单相容性。如果违反白名单，云服务器会拒绝部署应用程序。

NetBeans IDE 可在您编码时向您发送白名单违规通知，从而有助于防止出现白名单相关错误。代码完成受白名单限制，并且代码中会突出显示白名单违规。对部署到 Oracle Cloud Remote 服务器的 Web 应用程序运行验证操作，并且 "Output"（输出）窗口会显示所有白名单违规。

*测试白名单：*

1. 在 "Projects"（项目）窗口中，右键单击<<create-webapp,您创建的 Web 应用程序>>，并选择 "New"（新建）> "Servlet"。此时将打开新建 Servlet 向导。

image::images/new-servlet.png[]


. 为 servlet 指定任意名称，并为其选择一个现有包，然后单击 "Finish"（完成）。servlet 类随即在编辑器中打开。


. 找到 servlet 的  ``processRequest``  方法，在方法主体中键入  ``System.ex`` ，并按 Ctrl-空格键打开代码完成。代码完成不会向您提供完成  ``System.exit``  的可能性，因为 Oracle Cloud 白名单已禁止  ``System.exit`` 。IDE 显示带有删除线的  ``exit`` 。

image::images/cc-failure.png[]


. 完成键入  ``System.exit(1);`` 。此时将出现一条警告。在警告图标上滚动光标，此时会出现一条工具提示，通知您不允许使用  ``java.lang.System.exit`` 。

image::images/whitelist-warning.png[]


. 在 "Projects"（项目）窗口中，右键单击应用程序的节点，然后选择 "Verify"（验证）。打开 "Output"（输出）窗口（"Window"（窗口）> "Output"（输出） > "Output"（输出）或 Ctrl-4 组合键）。"Output"（输出）窗口包含一个 "Whitelist"（白名单）标签，该标签显示因白名单限制而导致的错误。

image::images/whitelist-output.png[]


. 打开 "Action Items"（操作项）窗口（"Window"（窗口）> "Action Items"（操作项）或 Ctrl-6 组合键）。白名单违规作为单独的一组操作项显示。

*提示：*打开 "Group Action Items by Category"（按类别对操作项进行分组）（左下方的按钮）可以更方便地查看白名单违规。

image::images/whitelist-tasks.png[]


. 尝试部署项目。此时会显示一个警告对话框，通知您已检测到白名单违规，并询问您是否要继续部署。单击 "No"（否）。此对话框随即消失。


. 
在 "Projects"（项目）窗口中，右键单击该应用程序的节点，然后选择 "Properties"（属性）。此时将打开该应用程序的 "Project Properties"（项目属性）。选择 "Whitelists"（白名单）类别。此时会显示一个活动白名单列表。在此对话框中，您可以禁用白名单。

将 Web 应用程序的服务器设置为 Oracle Cloud Remote 后，Oracle Cloud 白名单适用于该项目及其所有子项目。例如，已设置为在 Oracle Cloud Remote 上运行的企业应用程序具有 Oracle Cloud 白名单，该白名单适用于该企业应用程序本身及其包含的所有 EJB 模块或 Web 应用程序。该项目及其子项目的 "Project Properties"（项目属性）中都具有 "Whitelist"（白名单）类别。使用 "Project Properties"（项目属性）对话框可以为该项目及其各子项目单独设置白名单。

image::images/whitelist-properties.png[]

link:/about/contact_form.html?to=3&subject=Feedback:%20Running%20Web%20Apps%20on%20Oracle%20Cloud[+请将您的反馈意见发送给我们+]

 



== 另请参见

有关 Oracle Cloud 服务的信息，请参见以下资源：

* link:https://blogs.oracle.com/javatraining/entry/oracle_cloud_development_with_netbeans[+使用 NetBeans 和 Eclipse (OEPE) 进行 Oracle Cloud 开发+]（Java Training Beat 博客）
* link:https://cloud.oracle.com/mycloud/f?p=service:home:0[+Oracle Cloud 主页+]

有关在 NetBeans IDE 中开发 Web 应用程序的相关信息，请参见以下资源：

* link:../../trails/java-ee.html[+Java EE 和 Java Web 学习资源+]
