Play 框架手册(23) – 部署选择

Play 应用程序实际上可以部署到任何环境下:如部署到 Servlet 容器里、作为独立服务器、或部署到 Heroku, Google Application Engine, Stack, a Cloud 等等。

23.1. 独立 Play 应用程序 

最简单、最稳定的方式就是不需要任何容器简单运行 play 应用程序。如果需要更高级的特性,比如虚拟主机,你可使用前端 http 服务器,比如 Lighttpd 或 Apache。

内存的 HTTP 服务可以支持每秒上千的 HTTP 请求,而且不存在瓶颈。此外,它还使用了效率更高的线程模型(Servlet 容器采取的是每个请求分配一个线程),而且允许不同的模块使用不的服务器(Grizzly, Netty,等等)这些服务器都支持在不中断正在执行线程的情况下支持 long polling (长轮询) ,允许管理超长请求(等待一个长时间任务完成),允许把文件对象直接转换成流(包括任何指定了 Content-Length 内容长度的 InputStream)。

当使用同开发时相同的环境运行应用程序时会存在几个小问题。当部署到 jee 应用程序服务器时,会产生许多小 bug(不同的程序主目录, 类加载问题, 库冲突等等)。

参考'Put your application in production' page 。

23.2. Java EE 应用服务器

Play 应用程序也可运行于多个流行的应用服务器。 大多数应用服务器都支持 out of the box 方式。

支持应用服务器 

下面的应用服务器已测试可正常运行 play 应用:

  • JBoss 4.2.x 
  • JBoss 5.x 
  • JBoss 6M2 
  • Glassfish v3 
  • IBM Websphere 6.1 
  • IBM Websphere 7 
  • Geronimo 2.x 
  • Tomcat 6.x 
  • Jetty 7.x 
  • Resin 4.0.5

部署 

想要部署到上述服务器,你需要把应用程序打包成一个 war 文件,命令为:

play war myapp -o myapp.war

请注意你的应用服务器必须支持 war 文件部署。

在打包的时候,play 会让你‘独立(isolate)’你的 play 应用程序,不要与其他应用程序混合部署,以避免应用程序库之间的版本匹配问题。JEE/Servlet 并没有对此进行规范,属地方规范(vendor-specific) 。

为了‘独立(isolate)’你的 WAR 文件,我们推荐你参考你的应用服务器手册。

下面演示了如果在 JBoss 应用服务器里独立一个 war 文件。注意,下面这些步骤是可选的。

在你的应用程序war目录下的myapp.war/WEB-INF/jboss-web.xml文件里插入如下内容:

<jboss-web>
  <class-loading java2classloadingcompliance="false">
    <loader-repository>
      com.example:archive=unique-archive-name
      <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
    </loader-repository>
  </class-loading>
</jboss-web>

用你想要的唯一值替换 com.example:archive=unique-archive-name。

数据源 

Play 也支持数据源和资源查找。为了使用 JNDI 数据源,需要设置 databaseconfiguration

db=java:comp/env/jdbc/mydb
jpa.dialect=org.hibernate.dialect.Oracle10gDialect
jpa.ddl=verify

数据库插件一旦检测到 db=java:,就会冻结默认的 JDBC 系统。

定制 web.xml 

在某些应用服务器里, 比如 IBM Websphere,需要你在 web.xml 里的 resource-ref 元素里声明数据源。 默认情况下, 在执行 play war 命令时, play 会生成 web.xml 文件。 为了定制生成的 web.xml,首先要生成 WAR 未打包版本,然后复制 web.xml 文件到 war/WEB-INF 文件夹下。最后再次执行 play war 命令,命令将会从生成文件夹复制你定制的 web.xml。

比如,为了给 IBM Websphere 7 声明一个数据源,我们可以在我们的 war/WEB-INF/web.xml 里声明一个 resource-ref:

<?xml version="1.0" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">
  <display-name>Play! (%APPLICATION_NAME%)</display-name>
  <context-param>
    <param-name>play.id</param-name>
    <param-value>%PLAY_ID%</param-value>
  </context-param>
  <listener>
      <listener-class>play.server.ServletWrapper</listener-class>
  </listener>
  <servlet>
    <servlet-name>play</servlet-name>
    <servlet-class>play.server.ServletWrapper</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>play</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <resource-ref>
        <description>Play Datasource for testDatasource</description>
        <res-ref-name>jdbc/mydb</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

23.3. 基于云的主机 Cloud-based hosting

AWS Elastic Beanstalk

AWS Elastic Beanstalk is Amazon’s(亚马逊)的 java 主机平台,基于亚马逊Web Services 基础设施。更多信息详见: Java development 2.0: Play-ing with Amazon RDS.

CloudBees

CloudBees 也是一个 java 主机平台,详见 CloudBees module

Cloud Foundry

Cloud Foundry VMware 的云提供者。详见 Running Play Framework Application on CloudFoundry and the CloudFoundry module.

Google App Engine (GAE) 

Google App Engine 是 Google 提供的较好的云主机平台,它和通用的主机平台相比,具有不同的 pros 和 cons。特别要注意的是,GAE 不支持 JPA 持久化,详见 GAE module

Heroku 

Heroku cloud application platform 是一个特别为 play 提供支持的主机平台。

通过以下步骤进行部署:

1. 在 Linux, Mac, or Windows 下安装 Heroku 命令行客户端

2. 安装 git 并设置你的 ssh key

3.在 Heroku.com 上创建一个帐号

4. 从命令行登录到 Heroku

heroku auth:login

5. 创建一个 git 仓库:

git init

6. 创建一个.gitignore 文件,配置如下,以忽略 play 生成的文件:

/tmp
/modules
/lib
/test-result
/logs

7. 增加文件到 git 仓库并提交:

git add .
git commit -m init

8.在 Heroku 上创建一个新的应用程序:

heroku create -s cedar

9. 发送应用程序到 Heroku:

git push heroku master

10. 在你的浏览器里打开应用程序:

heroku open

以下命令用于浏览运行日志:

heroku logs

为了 scale(缩放)应用,可以多个‘dynos’方式运行:

heroku scale web=2

为了在产品里使用 Heroku Shared Database ,需要在 conf/application.conf 里增加以下配置:

%prod.db=${DATABASE_URL}
%prod.jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
%prod.jpa.ddl=update

更多信息见 Heroku Dev Center

playapps.net

playapps.net 是 Zenexity 提供的 play 特定的主机平台,其创建者是 play。详见 playapps.net module。  


前一篇:
后一篇:

发表评论