JavaでYAMLファイルを読み込む際に出たエラー

エラー

Exception java.io.IOException: Stream closed 
    at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
    at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60)
    at org.yaml.snakeyaml.Yaml.load(Yaml.java:381)
    at io.dropwizard.Application.run(Application.java:79)
    at com.midcareer.user.MidUserApplication.main(MidUserApplication.java:120)
Caused by: org.yaml.snakeyaml.error.YAMLException: java.io.IOException: Stream closed
    at java.io.PushbackInputStream.ensureOpen(PushbackInputStream.java:74)
    at java.io.PushbackInputStream.read(PushbackInputStream.java:166)
    at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:90)
    at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:122)
    at java.io.Reader.read(Reader.java:140)
    at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)

んんー。ストリームが閉じてる感じではないんだよなあ。
そもそもファイルパスが違うのか?
よくわからず調べまくる。



解決

yamlファイルに、javaのオブジェクトにマッピングするパスを書き込む必要があったみたい。

!!com.saple.service.User #ここを追加

name: naaaaaaa
emal: sample@gmal.com

YAMLファイル

プログラムでデータを受け渡しするときに使われるファイルの形式。

バッチ処理・ストリーム処理

バッチ処理

バッチ = Batch = 一束、一群

定量or一定期間のデータを集め、一括処理するための処理方法。



ストリーム処理

無限に発生し続けるデータを処理する際に行う処理方法。

Java ストリーム

ストリームとは

Javaでは、ファイルとデータのやり取りをする場合(データの入出力)、ストリームという考え方を使って行う。

ストリームとは、ファイルの読み書きや書き出しにおけるデータの流れのこと。
データがファイルとプログラムの間を流れていくイメージ。


処理の流れ

  1. データを流すためのストリーム(川)を用意

  2. ファイルからプログラムorプログラムからファイルへデータを流す

  3. ストリームを閉じる

この処理をオブジェクトが仲介役となってデータのやり取りを助けている。



ストリームの種類

  • 入力ストリーム:ファイルやネットワークからデータを受け取る

  • 出力ストリーム:ファイルやネットワークにデータを送り出す

  • バイトストリーム:バイト単位(バイナリ)でデータを扱う
    InputStream/OutputStreamクラス(スーパークラス
    ex) 画像データ

  • 文字ストリーム:文字単位でデータを扱う
    Reader/Writeクラス(スーパークラス
    ex)テキスト



バッファ

データを一時的に記憶する場所。 これを使うことで、ファイルにいちいちアクセスしなくても、一気にデータを読み込んで溜め込むことができる

JAX-RS

JAX-RS

The Java API for RESTful Web Services の略。



RESTful とは

そもそもREST(Representational State Transfer)とは

  • HTTPを使ったシンプルなWebサービス

  • すべてのリソースは一意なアドレスで識別される

  • 特定のHTTPメソッド(GET、POST、PUT、DELETE)を使って操作する

  • JSONXMLYAMLがサポートされている

このRESTの仕様に沿ったものをRESTfulと呼ぶ。



もとに戻ってJAX-RSとは

The Java API for RESTful Web Servicesを文字通りに訳して考える。

RESTの仕様に基づくWebサービスのための機能を提供するJavaAPI。っていうことになるね。

S3・CloudFront

S3とは

AWSの中核にあるストレージサービス。


ストレージとは

訳すと貯蔵、保管。
データを保管・保存する場所のこと。


ストレージサービスとは

インターネット上で、ファイル保管用のスペースにデータを保存することができるサービス。
インターネット上にデータを保存できる場所があるってことですかね?




CloudFront

AWSが提供する高速・高パフォーマンスなコンテンツ配信サービス。


CloudFrontの仕組み

オリジンサーバ:配信するオリジナルのファイルを置いておくサーバ。
エッジサーバ:ユーザーへの配信を行うサーバ。


ユーザーをCloudFrontドメインへアクセスさせて、CloudFrontのエッジサーバを経由した配信を行えるようになる。


ユーザーからリクエストを受けたエッジサーバーは、要求されたファイルがキャッシュされているか確認する。

キャッシュされてない
→オリジンサーバからファイルをとって、そのファイルをユーザーに配信する。
ファイルをキャッシュする。

キャッシュされている
→オリジンサーバには見に行かず、エッジサーバでキャッシュされたファイルを配信する。

キャッシュ

キャッシュとは

よく利用するデータを蓄積させて、データ処理を速くする仕組み。

詳しく言うと、
一度開いたwebページのデータを、通信経路のどこかに保存しておいて、次に同じページを開くときに速く表示してくれる。

一度アクセスしたページはURLで覚えられている。