LoginSignup
68
77

More than 5 years have passed since last update.

バグだらけのWebアプリケーションのクローンをSpring Bootでつくってみました

Last updated at Posted at 2017-08-23

概要

以前紹介したバグだらけのWebアプリケーション「EasyBuggy」のクローンをSpring Bootベースでつくってみました(「EasyBuggy Boot」)。

ここからダウンロードして、以下のコマンドで起動できます。

java -jar ROOT.war

※起動するにはJava 7以上が必要です。java -jar ROOT.war --port=9000とすると9000番ポートで起動します。

以下のようにJavaオプションを付加すれば、ログ出力やデバッグ、JMXによる監視ができます(※Java 7用のオプションです)。また、最大メモリ使用量を制限しているので、OutOfMemoryErrorなどの問題がより発生しやすくなります。

java -Xmx256m -XX:MaxPermSize=64m -XX:MaxDirectMemorySize=90m -XX:+UseSerialGC -Xloggc:logs/gc.log -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -XX:GCTimeLimit=15 -XX:GCHeapFreeLimit=50 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/ -XX:ErrorFile=logs/hs_err_pid%p.log -agentlib:jdwp=transport=dt_socket,server=y,address=9009,suspend=n -Dderby.stream.error.file=logs/derby.log -Dderby.infolog.append=true -Dderby.language.logStatementText=true -Dderby.locks.deadlockTrace=true -Dderby.locks.monitor=true -Dderby.storage.rowLocking=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7900 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -ea -jar ROOT.war

以下のようなメッセージが表示されたら、Webアプリケーションの起動は完了しています。

2017-08-11 22:05:25.233  INFO 81661 --- [           main] o.t.e.Easybuggy4sbApplication            : Started Easybuggy4sbApplication in 8.404 seconds (JVM running for 10.723)

http://localhost:8080 にアクセスすると、メインページが表示されます。

Screenshot from 2017-08-27 13-49-32.png

上記以外の起動方法

git cloneして、mvn clean spring-boot:runしても起動できます。

$ git clone https://github.com/k-tamura/easybuggy4sb
$ cd easybuggy4sb
$ mvn clean spring-boot:run

src/main/resources/application.propertiesserver.port=${port:8080}の行をserver.port=9000にとすると9000番ポートで起動します。

また、Tomcat 8.5などのJavaコンテナにROOT.warをデプロイしても同様に動作します。

このアプリの用途

「EasyBuggy」と同様に、様々な障害を再現させて、解析し、理解が深めることが目的です。なぜ同等の機能を持つものをつくったかというと、次のことを知りたかったからです(個人的な興味です)。

  • 最新のフレームワーク(Spring Boot)ベースのアプリにも脆弱性やリソースリークをつくり込むことは簡単にできるか
  • レガシーアプリをSpring Bootに移行する上で必要な作業は何か
  • レガシーアプリをSpring Bootに移行することで可読性は向上するか
  • レガシーアプリと比較して、Spring Bootの開発生産性はどの程度の違うか

これらについては後日、別の記事で公開しようと思います。個人的な興味でつくりましたが、次のような用途にも役立つのではないかと思います。

  • Spring Bootベースのアプリに脆弱性をつくり込んでしまう実装例を把握する
  • レガシーアプリからSpring Bootベースのアプリへ移行する際の参考にする

構成の相違点

「EasyBuggy」と「EasyBuggy Boot」の主な構成の相違点は以下の通りです。

相違点 EasyBuggy EasyBuggy Boot
ベースとなる技術 Servlet 3.0.1 Spring Boot 1.5.6 (Servlet 3.0.1)
プレゼンテーション層 未使用 (一部 JSP 2.2 + JSTL 1.2) Thymeleaf 2.1.5 (一部 JSP 2.3 + JSTL 1.2)
DBクライアント/サーバー JDBC / Derby 10.8.3.0 Spring JDBC 4.3.9 / Derby 10.12.1.1 (Java 7の場合)、または10.13.1.1 (Java 8の場合)
LDAPクライアント/サーバー Apache DS Client API 1.0.0 / Server 1.5.5 Spring LDAP 2.3.1 / unboundid-ldapsdk 3.2.1
メール JavaMail 1.5.1 JavaMail 1.5.1 (Spring Boot Mailで導入されるJavaMail 1.5.6をオーバーライド)
開発ツール 無し Spring Boot Developer Tools 1.5.6
Java Java 6以上をサポート Java 7以上をサポート

※この検証をする上で、Spring Securityも導入すべきではあったのですが、残念ながら現時点ではまだできていません...。

ビルドの方法

以下のコマンドで、実行可能かつデプロイ可能なwarファイルを作成することができます。

$ mvn clean package

開発の方法

STS (Spring Tool Suite)を使用して、EasyBuggy Bootのソースコードを参照したり、開発、デバッグする方法についても載せておきます。STSはEclipseベースのIDEで、Springベースのアプリケーションの開発が簡単にできるようにカスタマイズされています。

  1. このページからSTSをダウンロードして下さい。
  2. GitHubからEasyBuggy Bootをgit cloneして下さい。

    $ git clone https://github.com/k-tamura/easybuggy4sb
    $ cd easybuggy4sb
    
  3. 以下のコマンドを実行します。このコマンドでSTSでの開発に必要なファイル(.projectファイルや.classpathファイル)が作成されます。また、依存するライブラリのソースコードも参照できます。

    $ mvn dependency:sources
    $ mvn eclipse:eclipse
    
  4. STSを起動します。

  5. パッケージエクスプローラからクローンしたプロジェクトをインポートします。「Existing Maven Projects」を選択して、「Next」をクリックして下さい。
    Screenshot-Import .png
    「Root Directory」にクローンしたプロジェクトへのパスを入力し、「Finish」をクリックします。
    Screenshot-Import Maven Projects .png

  6. パッケージエクスプローラのeasybuggy4sbプロジェクトを右クリックし、「Debug As」、「Spring Boot App」と選択すると、デバッグモードでEasyBuggy Bootが起動します。
    Screenshot-Spring - easybuggy4sb-src-main-java-org-t246osslab-easybuggy4sb-Easybuggy4sbApplication.java - Spring Tool Suite .png

ソースコードを修正すると、自動的にリロードされて、修正が反映されることも確認してみて下さい。

68
77
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
77