领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多当 VMware 推出的新的开源平台即服务 (PaaS) 产品 Cloud Foundry 在今年早些时候推出时,它包含了一个由 MySQL 提供支持的关系数据库服务,以及 MongoDB 和 Redis 的 NoSQL 选项。开放 PaaS 的承诺之一是提供选择,包括您可以开发的语言和框架,以及可供使用的数据库服务。我们现在可以使用 PostgreSQL 提供新的关系数据库服务。这很棒,因为我们现在可以在两个最流行的开源关系数据库之间进行选择。PostgreSQL 是一个非常强大可靠的数据库,已经存在很长时间了,因此它绝对经受了考验。
那么,从开发人员的角度来看,vFabric Postgres 和常规 PostgreSQL 之间有什么区别吗?没有,它们在功能上是相同的。您使用相同的 JDBC 驱动程序和 SQL 语法。所做的更改是内部的,并且与提供云所需的弹性和性能有关。
现在我们已经具备了所有先决条件,我们可以开始了。首先为应用程序创建一个目录并打开 Roo shell。打开后,我们可以创建我们的项目。
roo> project --topLevelPackage org.springsource.data.demo.bookshelf
现在我们准备为 Roo 应用程序配置持久性选项。我将选择 Hibernate 作为 JPA 提供程序,并将 Postgres 作为数据库。无需提供任何自定义连接属性,因为我们将在 Cloud Foundry 中运行此应用程序。连接详细信息会自动为我们管理。
org.springsource.data.demo.bookshelf roo> persistence setup --provider HIBERNATE --database POSTGRES
接下来,我们需要为这个简短的示例创建我们的实体类。我将创建一个 Book 类,它将成为我的新 BookShelf 应用程序的一部分。我现在只创建 Book 类,以后会添加 Author 和任何其他类。
org.springsource.data.demo.bookshelf roo> entity --class ~.domain.Book
~.domain.Book roo> field string --fieldName title --sizeMax 200
~.domain.Book roo> field string --fieldName isbn --sizeMax 20
~.domain.Book roo> field date --fieldName published --type java.util.Date
~.domain.Book roo> field number --fieldName price --type java.math.BigDecimal
一旦完成,我们就可以使用 Book 类的控制器创建 Web 应用程序。
~.domain.Book roo> controller all --package ~.web
我们完成了,如果你问我,非常轻松。现在我们需要打包所有内容,连接到 Cloud Foundry 并部署应用程序。
~.web roo> perform package
~.web roo> cloud foundry login
~.web roo> cloud foundry deploy --appName bookshelf --path /target/bookshelf-0.1.0.BUILD-SNAPSHOT.war
部署完成后,我们应该能够列出我们当前的应用程序集
~.web roo> cloud foundry list apps
================================================ Applications ================================================
Name Status Instances Services URLs
---- ------ --------- -------- ----
bookshelf STOPPED 1 bookshelf.cloudfoundry.com
~.web roo> cloud foundry list services
=================== System Services ====================
Service Version Description
------- ------- -----------
rabbitmq 2.4 RabbitMQ messaging service
mongodb 1.8 MongoDB NoSQL store
redis 2.2 Redis key-value store service
postgresql 9.0 PostgreSQL database service (vFabric)
mysql 5.1 MySQL database service
太好了,我们确实可以使用 PostgreSQL 作为选项。因此,让我们创建一个数据库服务实例,将其绑定到应用程序并启动应用程序。
~.web roo> cloud foundry create service --serviceName books --serviceType postgresql
~.web roo> cloud foundry bind service --serviceName books --appName bookshelf
~.web roo> cloud foundry start app --appName bookshelf
让我们看看访问 http://bookshelf.cloudfoundry.com 时会得到什么
因此,应用程序已启动并正在运行,我们可以添加和查看书架上的书籍。
~.web roo> controller class ~.web.DatabaseInfoController
这将创建一个控制器(bookshelf/src/main/java/org/springsource/data/demo/bookshelf/web/DatabaseInfoController.java),我在 index 方法中向其中添加了一个 DataSource 和一些数据库信息检索代码。
@RequestMapping("/databaseinfo/**")
@Controller
public class DatabaseInfoController {
@Autowired
DataSource dataSource;
@RequestMapping
public void get(ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) {
}
@RequestMapping(method = RequestMethod.POST, value = "{id}")
public void post(@PathVariable Long id, ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) {
}
@RequestMapping
public String index(ModelMap modelMap) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String userInfo = jdbcTemplate.queryForObject("select user", String.class);
String urlInfo = "?";
if (dataSource instanceof BasicDataSource) {
urlInfo = ((BasicDataSource) dataSource).getUrl();
}
String versionInfo = jdbcTemplate.queryForObject("select version()", String.class);
modelMap.put("userInfo", userInfo);
modelMap.put("urlInfo", urlInfo);
modelMap.put("versionInfo", versionInfo);
return "databaseinfo/index";
}
}
还有一个 JSP 文件(bookshelf/src/main/webapp/WEB-INF/views/databaseinfo/index.jspx) 由此控制器使用,并且需要添加一些代码。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:spring="http://www.springframework.org/tags" xmlns:util="urn:jsptagdir:/WEB-INF/tags/util" version="2.0">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<jsp:output omit-xml-declaration="yes"/>
<spring:message code="label_databaseinfo_index" htmlEscape="false" var="title"/>
<util:panel id="title" title="${title}">
<spring:message code="application_name" htmlEscape="false" var="app_name"/>
<h3>
<spring:message arguments="${app_name}" code="welcome_titlepane"/>
</h3>
<p> The database user is ${userInfo}. </p>
<p> The dataSource URL is ${urlInfo}. </p>
<p> The database version is ${versionInfo}. </p>
</util:panel>
</div>
现在我们可以构建并将修改后的应用程序部署到云中。
~.web roo> perform package
~.web roo> cloud foundry deploy --appName bookshelf --path /target/bookshelf-0.1.0.BUILD-SNAPSHOT.war
访问应用程序,我们可以看到一个指向 Database Info Controller View 的新链接,该链接返回以下页面
如您所见,我们在云部署的应用程序中使用了 vFabric Postgres。
有关此新产品的更多信息,请参阅 Jignesh Shah 的博客。