この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

Tomcat-8.5.0を試す

Tomcat-8.5.0-betaがリリースされています。

リリースノートによると、

The Apache Tomcat Project is proud to announce the release of version 8.5.0 of Apache Tomcat. Apache Tomcat 8.5.0 is intended to replace 8.0.x and includes new features pulled forward from Tomcat 9.0.x. The minimum Java version and implemented specification versions remain unchanged. The notable changes compared to 8.0.x include:

Added support for HTTP/2, and TLS virtual hosting
Added support for JASPIC 1.1
The BIO connectors, support for Windows Itanium and support for Comet have been removed

Full details of these changes, and all the other changes, are available in the Tomcat 8.5 changelog.
Apache Tomcatプロジェクトはバージョン8.5.0をリリースしたことをお知らせします。バージョン8.5.0は8.0.x系の後継バージョンで、9.0.x系の新機能をバックポートしています。動作するために必要なJavaの最小バージョンは変わっていません。(訳注:Java7が必要)
8.0.xとの差は次の通り。

* HTTP/2およびTLSバーチャルホスティングをサポート
* [JASPIC1.1](http://jaspic-spec.java.net/)のサポート
* BIOコネクタのWindows アイテニアム版およびCometのサポートを削除

詳細な変更点はチェンジログを参照してください。

とのこと。

そして、ChangeLogは次の通り。

The Tomcat 8.5.x branch was created from the Tomcat 9.0.0.M4 tag. Changes were applied to restore Java 7 compatibility and to align the specification APIs with Servlet 3.1, JSP 2.3, EL 3.0, WebSocket 1.1 and JASPIC 1.1.
Tomcat 9.0.0M4をブランチしてTomcat 8.5.xを作った。Java7との互換性を書き戻し、Servlet3.1、JSP2.3、EL3.0、WebSocket1.1、JASPIC1.1の仕様に従うように調整した。

つまりTomcat 8.5.0はTomcat 9.0.0M4だったものを流用しているようですが、その発端はこのメールのようです。

https://marc.info/?l=tomcat-dev&m=145640836214046&w=2

Subject: Tomcat 8.next

This has been hinted at in the past, but is not being discussed anymore.

Possible options:

a) Release a new 8.x branch that would include the connectors from 9 to
support HTTP/2 [OpenSSL now allows realistic support without having to wait
for Java 9], and thus would remove a few legacy items.

b) A more radical option is to use 9 as 8.x but remove the Servlet API
changes. This would force Java 8 and many incompatible changes.

c) Give up on 8.x and instead release 9 as beta, then stable, with an
explicit exception about the Servlet 4 API additions being "preview" until
further notice. That's probably the solution which involves the least
effort by far.

d) Nothing. No 8.x release. 9 will be released sometimes in 2017 when
Servlet 4 is released. The main issue is that there's no HTTP/2 support
until then. The longer we wait, the more a major release will conflict with
the "intuitive" 9 release cycle in 2017.
タイトル: Tomcat8の次をどうするか

以前に話が出たけど、もう議論されてないよね、この件。
選択肢は次の通り。

(選択肢A)
8.xの新しいブランチをリリースし、バージョン9で実装されたHTTP/2コネクタをバックポートする。(今やOpenSSLがあるのでJava9を待たなくても良い)
ついでに古い機能を削除する。

(選択肢B)
8.x系での機能追加を諦めて、9をベータとしてリリースする。Servlet4.0 APIのサポートはプレビュー扱いとしておく。
このプランがおそらく一番簡単である。

(選択肢C)
何もしない。8.xはリリースしない。(訳注: 8.0系を維持するという意味)
9はServlet 4 APIのリリース後にリリースされる。たぶん2017年のどこか。
この選択肢だと、HTTP/2はTomcat9のリリースまでサポートされない。
結構待つことになるし、恒例のリリースサイクル(訳注: Tomcatの通常のメジャーアップデートリリースのこと)と一致しないことになりそう。

起動すると変な警告メッセージが大量に出る

とりあえずインストールして起動してみたところ、

2016-03-29 14:48:42,754 WARN  [Cache] localhost-startStop-1 - Unable to add the resource at [/WEB-INF/classes/applicationContext.xml] to the cache because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache

のような警告メッセージが大量に出力され続けます。Tomcat 8.0.x系では見たことのないメッセージです。

おとなしく文言でググってみるとこの記事がヒット。 http://stackoverflow.com/questions/26893297/tomcat-8-throwing-org-apache-catalina-webresources-cache-getresource

詳しくは調べていませんが、どうもTomcatのキャッシュ機構に変更が入ったようです。 まだ各種パラメータの調整が足りていないようですね。まだベータ版なのでこんなものでしょう。

ともかく、この文言が出続けるのはウザったいので消すための設定を調べたところ、 次のように記述したcontext.xmlを以下のいずれかに配置すれば良い模様です。

  • ${CATALINA_BASE}/conf/context.xml
  • ${CATALINA_BASE}/webapps/[context]/META-INF/context.xml

こちらが参考になります。

http://tomcat.apache.org/tomcat-8.0-doc/config/resources.html

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resources cacheMaxSize="1048576" />
</Context>

Eclipseで起動する方法

ちなみに、まだTomcat 8.5用のサーバアダプタは出回っていないので、そのままではEclipse上で起動できません。 catalina.jarの中身を改変する必要があります。詳しくはこちら。

http://takahashikzn.root42.jp/entry/20131208/1386484856