3

スプレー + akka で構築されたアプリケーションがあります。このガイドを使用して:

http://sysgears.com/articles/building-rest-service-with-scala/

この例について説明します: https://github.com/oermolaev/simple-scala-rest-example

アプリケーションは問題なく動作しています。しかし、webServer にデプロイしようとすると、それを行う方法が見つかりませんでした。

xsbt-web-plugin を使用して Tomcat にデプロイしようとしたところ、次の入力が得られました。

 ~container:start

[情報] サーバーを起動しています... target/webapp のコンテキストを追加しています ...

サービス Tomcat の開始 サーブレット エンジンの開始:

Apache Tomcat/7.0.34 org.apache.catalina.startup.ContextConfig

getDefaultWebXmlFragment 情報: グローバルな web.xml が見つかりません

org.apache.coyote.AbstractProtocol start INFO: 開始しています

ProtocolHandler ["http-nio-8080"]

しかし、Tomcat はすべてのリクエストに対して 404 を返しています。

Tomcat にスプレー akka アプリケーションをデプロイする方法を知っている人はいますか?

4

1 に答える 1

1

問題を解決しました。

これは xsbt-plugin をスプレーアプリケーションで動作させるために必要なものです:

  1. root-pathapplication.conf に設定します

@jrudolphが指摘したように:スプレーサーブレットはTomcatで自動的にそれを理解することを知りません:

spray.servlet {
   boot-class = "com.sysgears.example.boot.Boot"
   root-path = "/rest"
   request-timeout = 10s
 } 
  1. クラスbootを拡張するように変更しwebBootます。

boot.scala

class Boot extends WebBoot {
  // create an actor system for application

  val system = ActorSystem("rest-service-example")

  // create and start rest service actor

  val serviceActor = system.actorOf(Props[RestServiceActor], "rest-endpoint")
}
  1. xsbt-web-plugin で説明されているように web.xml を追加します。

    ソース/メイン/webapp/WEB-INF/web.xml:

    <listener>
        <listener-class>spray.servlet.Initializer</listener-class>
    </listener>
    
    <servlet>
        <servlet-name>SprayConnectorServlet</servlet-name>
        <servlet-class>spray.servlet.Servlet30ConnectorServlet</servlet-class>
        <async-supported>true</async-supported>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>SprayConnectorServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

完全な変更については、github での比較を参照してください (サンプル ライターは、Tomcat ユーザーのためにこのブランチを惜しみなく生成しています)。

https://github.com/oermolaev/simple-scala-rest-example/compare/spray-tomcat

于 2015-04-28T08:01:50.400 に答える