goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Spring5の変更店などを聞いてきた!

2018-05-27 18:01:58 | JavaとWeb
5月26日、JJUG CCC 2018 Springに行ってきた!ので、その内容をメモメモ

次に

Pivotal認定講師が解説!ReactiveだけじゃないSpring5&SpringBoot2新機能解説

をメモメモ




・このセッションについて
 リアクティブは対象外

・自己紹介

・会社紹介(これはスポンサーセッション)
 Core Spring(4日間) 800ページ
  ハンズオン 6月28日

・1Coreの新機能
  8ベース、
   9,10,11でも使える
  ロギング

 8ベース
  7未満では動かない
 JDK9,10でも動く(Tomcatはエラー出たけど)
  開発プロセスでは9,10でビルドして確認
  モジュールシステム対応
  Springの各jarは自動モジュール

 モジュールシステム対応
  module-info.javaにrequireする必要あり

・JDKアップグレードの考慮天
 モジュールパスでなく、クラスパス
 バイトコードレベルはJava8
  ASM5が9以上拒否
  Spring5.0はJDK11でも動く予定

・ロギングがより便利に
  spring-jcl
   commons Logging Bridge
   ログバック追加するだけ

 ビルド時のコンポーネントインデックス作成
  spring-context-indexse
   コンポーネントスキャンの遅さを解消
   ビルド時のannotation Processer
  ビルドすると。・・
   コンポーネントしないで
   インデックス利用の注意点:大きなプロジェクトでないと、意味ない
     →小さいと、コンポーネントのほうが早い

 @NonNull/@Nullableがつけられる→IDEで検知できる

・2Web
 HTTP2対応(サーブレット4.0)
 Bean Validation 2.0対応
 イミュータブルなフォーム

 Http2対応
  Servlet4.0対応
   push Builderをコントローラーメソッドの引数で取得可能
   サーバーのHTTP2対応も必要:Tomcat

  BeanValidation2.0
   新アノテーション追加
   DateTimeAPI
   コレクション要素の検証

 WebMvcConfigurerAdapterの非推奨

 イミュータブルなフォーム
   入力を変えられない→Setterいらないはず
   javacの-parametersもしくはデバッグ情報の有効化必要
   SpringBoot2.0+Mavenだとデフォルト
    →まともに動かない。夏か秋の5.1に期待

 例外処理の便利機能

3.Data:破壊的変更有
 APIの変更
 SpringDataJDBC
   Optionalの利用
   メソッド名の変更
 →互換性ない

 SpringData JDBC(ベータ版)
  JdbcTemplateを利用したSpringData
  いくつかブログ出てる

4.セキュリティ
 OAuth2.0対応
  従来はSoringSecurity OAuth2→ほかのライブラリにもあった
  →本体で再実装
 OAuth2には、
   クライアント
   リソースサーバー
   認可サーバー
 の3つのサーバーがいるが、いまのところクライアントだけ
  OpenID Connectにも対応
 リソースサーバは5.1→現時点ではSpring Security OAuth2.0
 認可サーバーはそのあと


 Delegating Password Encoder
  パスワードエンコーダー:ハッシュ化する
  じゅうらいは、平文ではいってしまう。
 →デフォルトが入るようになった
    パスワードのプリフィックスを読んで、適切なパスワードエンコーダに処理を委譲する

5.テスト
 JUnit5対応
  SpringEtention DI機能が使えるようになる
  ParameterResolverを実装→テストメソッド引数でもDI可能

 便利なアノテーション
   Spring JUnit Config,webconfig

6.Boot
 2.0→5.0対応→Java8以上
   Date and Time API使える

 セキュリティの簡素化
   設定をJavaConfigに一本化
   ベーシック、フォーム認証が基本

 アクチュエーターの改良
  デフォルトでURLぷれふぃっぅす 
  デフォルトではindex,helpのみ公開

 エンドポイントの公開設定
  有効かつ公開するとき

・その他;プロパティのリネーム
 spring boot properties migratorという便利ツール出ている
  →ただし、ずっと使うものではない


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Variable Handlesって、何?

2018-05-27 12:58:41 | JavaとWeb
5月26日、JJUG CCC 2018 Springに行ってきた!ので、その内容をメモメモ

こんどは

■Java 9 Variable Handlesのイロハ(JavaSE基調講演)

をメモメモ





VarHandles

・自己紹介
・今日の内容
  あちこち適当に
  Javaのメモリモデル
  MethodHandles
  ごきぶりほいほい

・valhalla
  ばはら=天国に行って支配→ばりゅーたいぷすと発音似てるから
   Project ぱなま Javaとねいてぃぶつなぐ・・

  Value Types
  ジェネリックの特殊化
  VarHandles→これは出ている

・余談その1 まいこん
 PEEK POKE 任意のメモリのアドレス値を取得・設定
  →アセンブラ
 sun.misc.Unsafe
  JDKの内部機能を直接呼び出す内部インターフェース
  これを使ってメモリを操作できる

  リフレクション、シリアライゼーションの利用から、CPUの使用率を見るため・・・まで
  Sun以外の利用は想定外
  RTじゃないとだめにした→破る方法見つかる

・Unsafe Demo!
  Java10だとできない
  すぐクラッシュする

・JDK→9からアクセスできなくなる
   メモリ管理    valhalla
   メモリレイアウト panama
   メモリアクセス  Arrays2.0
 
  細かいメモリモデル varHandles

。varHandles
 3つクリアすればいい
  C11/C++11のメモリモデルに合わせる
  j.u.cのatomicのような変数の変更もできる
  sun.misc.UnsafeのメモリアクセスのAPIをリプレース

・C++メモリモデル
 Happenes-Before
Atomicメモリアクセス

 従来のJavaのメモリモデルより細かい
   データの単位ではなく、アクセスの単位で決める
   ほかの言語などで導入されている傾向がある

・Atomicのような変数
  C++→3つのステージ よみこみ たして 書き出し
   →syncronizedを使う:重くなる

   ごきぶりほいほいはロックと似ている
     一回入ったら、もうでない

  Atomicクラスを使う→オーバーヘッド高い
    2つのオブジェクトになる:オーバーヘッド

  unsafeを使う:Java9ではできない

・varHandle
  methodHandleの知識は不可欠


・method Handle→ダビンチ マシン プロジェクト
  メソッドハンドル→関数ポインタ
    リフレクションよりパワフル
      コールサイト:Javaレベルのリンキング

  リフレクションAPIより効率的:代わりに呼ぶ
  フィールドのアクセスができる(単なる関数ポインタではない)

  MethodHandleの魅力
    生成時のアクセスチェック:
    シグニチャ・ポリフォーフィズム
     invokeExact
     javacで使うときに生成

  varHandleで作る
     compareAndSet,読み込むにはget

・Atomic以外
 必要な時だけvolatileとしてアクセスできる

・まとめ
 varHandleは普段使わない
 methodHandleは役に立つ
unSafe使うな

<HR>

【所感】

で、Variable Handlesって何?

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JUnit4とJUnit5の違い(境界値テストのパラメータ化の際等、いろいろと)を聞いてきた!

2018-05-27 09:55:57 | JavaとWeb
5月26日、JJUG CCC 2018 Springに行ってきた!ので、その内容をメモメモ

はじめに

まだまだこれからJUnit5入門

をメモメモ




・まあ、まだそんなに使ってないよねJUnit5
・JUnit5とは
 Javaのテスティングフレームワーク
 ながらく4が使われていたが、その光景
 API/アーキテクチャの全面的な再設計
 17年9月からGAリリース
 1.8いこうでないとX、ラムダ式のアサーション

・テスティングフレームワークに何を求めますか
 簡潔さ
 可読性
 一貫性

・イントロダクション
  何がよくなったのか
   テスティングフレームワークにとって大事な部分がちゃんと進化

   代わりに失ったもの:互換性
    1.8+、パッケージ異なる。構造化テスト、パラメータテスト異なる
    フレームワーク、IDEの対応状況
    mavenはびみょーなところも

・セットアップ(maven前提)
  JUnit4 pom.xml シンプル
  JUnit5 pom.xml なんか増えてる・・これ何?
    →マルチモジュール構成:用途、環境に合わせて適切なものをインポート
  JUnit5 = JUnit Platform   実行基盤
       + JUnit Jypiter 新テストAPI
       + JUnit Vintage マイグレーション

 代表的なモジュール
   JUnit jupiter-api アノテーション多い
   JUnit Jupiter -engin
   JUnit platform launcher これないと、eclipseで動かない

モジュール間の依存関係:公式に出てる・・・よくわかんない
   pomで指定するのは多くない

 pom.xml
   junit jupter engin
junit platform lancher
Mavenならjunit platform surefine provider
Gradleは4.6からネイティブサポート
 →5.2からはBOMを使う

・シンプルなテスト
 @Test
  JUnit4と、ほぼ同じだか、パッケージ異なる
  @org.junit.jupiter.api.Test ハブリックでなくてもOK(プライベートはX)

 事前処理、事後処理
   @BeforeAll
   @BeforeEach
   afterもおなじ

 実行を無視する @Disabled reasonにメモ書きできる

 テスト名の表示:@DisplayName(Mavenではまだ)

 --- ここまでは大体JUnit4と同じ ------

・アサーション
 org.junit.jupiter.api.Assertions
 assertEquals 基本使い方は同じだが、引数の順番が変わった
 グループ化:
   JUnit4:途中のassertに失敗すると、次のassertは実行されない
   JUnit5:assertAllラムダ式を渡す。渡した式が、検証に成功すると、成功になる

 例外の検証
   JUnit4:@Testのexpectedに例外クラスを指定する→投げられたメッセージの検証はできない
       →外側でcatchしてしまう
   JUnit5:assertThrows 例外を投げるメソッドは、ラムダ式の中で実行

・使いたくなってきました?

・構造化テスト・パラメータ化テスト
 構造化テスト
  テストクラスは複雑になりがち→似たようなテストは何とかしてまとめたい
  JUnit5: @Nested
      @Testと並べて書ける

 パラメータ化テスト
  引数だけ違うテストをまとめて実行したい
   境界値テストなど
  JUnit4:@Theory
  JUnit5:pom.xmlにパラメータを追加
   @ParameterlizedTest
   @ValueSource:ほかにもソースの指定あり(@methodSource)

・拡張モデル
  JUnit4では拡張方法2つ
   Runner
   Rule
  JUnit5
   extention
    @extendsWithで指定する(複数可)
    BeforeEachCallbackなど拡張ポイントいろいろある

・マイグレーション
 戦略
  1.JUnit5で書き換える
  2.Vintageで動かす

 書き換える場合
   引数の順番が変わった

 JUnit Vintage
   既存はVintage,新規はJupiter
   4と5、ごちゃませにしないようにしたい

・まとめ
  (おぼえるのが)はやい、(かき)やすい、うまい
  IDEの対応状況
  ユーザーガイド一読

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする