Git Product home page Git Product logo

stdout-problems's Introduction

標準出力に関する問題を再現するアプリケーション

Qiitaで解説した標準出力に関する問題を再現するためのアプリケーションです。バッチ(.bat)実行の問題なので、Windows上でのみ実行可能です。

ビルド

まずは、git cloneしてできたstdout-problemsに移動して、アプリケーションをビルドして下さい。

$ git clone https://github.com/k-tamura/stdout-problems.git
$ cd stdout-problems
$ mvn clean package

バッチファイルの実行方法

バッチファイルの実行方法は以下の3種類があります。

  • バッチファイルを単独で実行
  • バッチファイルをJava経由で実行
  • バッチファイルをWebアプリケーション(RMI)経由で実行

いずれも実行すると、logs/result.logにバッチの実行結果が出力されます。

バッチファイルを単独で実行

$ target\classes\annual.bat

バッチファイルをJava経由で実行

$ java -cp target\ROOT\WEB-INF\classes;target\ROOT\WEB-INF\lib\spring-core-4.3.10.RELEASE.jar;target\ROOT\WEB-INF\lib\commons-io-2.5.jar org.t246osslab.stdoutproblems.batch.BatchImpl

バッチファイルをWebアプリケーション(RMI)経由で実行

$ mvn spring-boot:run

以下にアクセスし、バッチ実行ボタンをクリック:

http://localhost:8080

停止するには:

 CTRL+Cをクリック

動作確認

① 事象の再現

まずは、上記手順で事象を再現させてみます。

  • バッチファイルを単独で実行 → 正常に完了
  • バッチファイルをJava経由で実行 → 途中で停止
  • バッチファイルをWebアプリケーション(RMI)経由で実行 → 画面でボタンをクリックした後に応答は即ぐに返るが、バッチが途中で停止する

② 誤った対策

次に、System.out.println();を追加して動作確認してみましょう。 src/main/java/org/t246osslab/stdoutproblems/batch/BatchImpl.javaにある次の2行のコメントを解除します。

// import org.apache.commons.io.IOUtils;
// System.out.println(IOUtils.toString(process.getInputStream(), "UTF-8"));

ビルドして、以下を確認してみて下さい。

  • バッチファイルを単独で実行 → 正常に完了
  • バッチファイルをJava経由で実行 → 正常に完了(途中で停止しない)
  • バッチファイルをWebアプリケーション(RMI)経由で実行 → 画面でボタンをクリックした後に応答が即ぐに返らなくなる

③ 上記も考慮した対策

最後に、System.out.println();を削除して、@echo offを追加し動作確認してみましょう。 先ほど修正した次の2行を再度コメントアウトします。

import org.apache.commons.io.IOUtils;
System.out.println(IOUtils.toString(process.getInputStream(), "UTF-8"));

src/main/resources/annual.batの先頭に@echo offの1行を追加します。

ビルドして、以下を確認してみて下さい。

  • バッチファイルを単独で実行 → 正常に完了
  • バッチファイルをJava経由で実行 → 正常に完了(途中で停止しない)
  • バッチファイルをWebアプリケーション(RMI)経由で実行 → 正常に完了(画面でボタンをクリックした後に応答が即ぐに返る)

end

stdout-problems's People

Contributors

k-tamura avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.