タグ

ブックマーク / sk44.hatenablog.com (11)

  • Java の enum のコンストラクタで例外を投げてはいけない - hd 5.0

    Effective Java に書かれている通り、 Java でシングルトンを作りたい場合は単一要素の enum を作成するという方法があります。そんでまぁ結構気軽に enum を使っていたんですが、コンストラクタで例外が発生しうるような実装にしてしまうと辛いということに気づきました。 例えばこんな enum を作って、 public enum SampleEnum { INSTANCE; private SampleEnum() { throw new RuntimeException("enumコンストラクタで例外"); } public void doHoge() { System.out.println("doHoge"); } } こんな感じで使ってみるとします。 public static void main(String[] args) { try { System.out.

    Java の enum のコンストラクタで例外を投げてはいけない - hd 5.0
  • Spring Boot で複数のログイン画面を使う - hd 5.0

    会員用のログイン画面と管理画面用のログイン画面を分けるみたいな場合に、 Spring Boot ( Spring Security )でどうやればいいのか手探りで調べたのでメモ。よくありそうな話ではありますが、意外と情報がなかった。 注意 remember me を有効にするとこの方法ではまともに動きません。 HttpSecurity を複数用意するとだめっぽいです(そもそも formLogin を複数用意するのは若干イレギュラー感もあり・・・)。 remember me を有効にしたい場合、ログイン成功時・失敗時の遷移先 URL を動的に切り替えるために以下のような手順が必要と思われます。 UsernamePasswordAuthenticationFilter のカスタマイズ AuthenticationEntryPoint のカスタマイズ ・・・など。機会があればまたまとめるかもしれ

    Spring Boot で複数のログイン画面を使う - hd 5.0
  • JSF で認証情報を SessionScoped で保持する - hd 5.0

    JSF を使う場合に、 Java EE の SessionScoped にログイン済みの認証情報を保持する方法を考えてみました。来であれば Java EE 標準のレルムによる認証機構を使ったほうが良いんだと思いますが、要件的に適用が難しそうなのでここでは使用していません。 GlassFish 4.1 で確認しています。 認証情報 CDI 管理でセッションに保持する認証情報クラスをこんな感じで用意します。保持する内容はなんでもいいです。 @SessionScoped public class Auth implements Serializable { private String name; private boolean authenticated; public void login(String name) { this.name = name; this.authenticate

    JSF で認証情報を SessionScoped で保持する - hd 5.0
  • Java でダブルディスパッチを使ったちょっとした例 - hd 5.0

    今朝 Twitter で Visitor パターンによるダブルディスパッチの話題を見かけたので、そういや昔 Java でちろっと使ったことあったなーとどんなんだったか思い出してみました。 要件 確かこんなのを表現したかったんです。業務アプリでよくありがちな、業務実行可否判定ですね。実際にはもっとパターンが多くなると思います。 業務 エライ人 ヒラ 申請 不可 可 承認 可 不可 実装 とりあえずベタに書くとこんなんでしょうか。 // 役割 public enum Role { エライ, ヒラ; } // 業務 public interface Work { boolean isExecutableBy(Role role); } 業務を実装するとこんな感じ。 // 申請 public class Request implements Work { @Override public bool

    Java でダブルディスパッチを使ったちょっとした例 - hd 5.0
  • ラムダはじめました - hd 5.0

    Java8 出ましたねー。ほんとに出るとは思いませんでした。ダウンロードは以下から。 Java SE - Downloads | Oracle Technology Network | Oracle Java8 は Java5 以来となる大きな文法の変更や機能拡張が追加されていますが、まず目を引くのはラムダでしょう。というわけで JDK と NetBeans8 を入れてちょろっと試してみました。 EA 版とかは触ってなかったので、今回が Java8 デビューです。 対象にしたのは個人的に JavaFX でよく使うコードの中でもなかなかアレな部類に入ると思われる、 TableColumn にプロパティをバインドする setCellValueFactory にしました。こんなモデルクラスがあるとして、 public class FooModel { private final StringPr

    ラムダはじめました - hd 5.0
  • Mac の IntelliJ IDEA CE で Gradle アプリケーションを読み込む(できた) - hd 5.0

    Mac の IntelliJ IDEA CE で Gradle アプリケーションを読み込む(途中まで) - hd 4.0 の続き。色々難儀したのでメモ。 IntelliJ のバージョンは 13.0.2 です。 Gradle の更新 昨日は Gradle のバージョンが古くて IntelliJ に蹴られたので、最新版に更新します。 brew upgrade gradle でさくっと。これで Gradle 1.11 が入りました。これでいけるやろ、と Gradle プロジェクトをインポートして Gradle 1.11 のパスを指定して開こうとすると、今度は Unable to load class 'org.gradle.plugins.ide.internal.IdeDependenciesExtractor$IdeDependency'. だとかで読み込み失敗。なんかもう知らんがな(´・ω

    Mac の IntelliJ IDEA CE で Gradle アプリケーションを読み込む(できた) - hd 5.0
  • #jjug ナイトセミナー「3大IDE頂上決戦 」に参加してきた - hd 5.0

    久しぶりに JJUG のナイトセミナーに参加してきました。勉強会は今年初かな? 【東京】JJUG ナイトセミナ 「2.19 Eclipse、NetBeans、IntelliJ IDEA 3大IDE頂上決戦 」 - 日Javaユーザーグループ/Japan Java User Group | Doorkeeper 早速 @yamadamn さんが Togetter にまとめてくださっていました。 JJUG ナイトセミナ 「2.19 Eclipse、NetBeans、IntelliJ IDEA 3大IDE頂上決戦 」 #jjug #idewars - Togetter 最初にどの IDE を使っているか挙手がありましたが、会場では Eclipse が圧倒的に多い印象でした。色々と dis はみかけますが、やはり人気は根強いですね。なお自分は Eclipse から NetBeans に乗り換えた

    #jjug ナイトセミナー「3大IDE頂上決戦 」に参加してきた - hd 5.0
  • 任意のバージョンの Java を使って Ant を実行する - hd 5.0

    メモ。 Ant ビルド実行時に環境変数 JAVA_HOME に設定されているものと違うバージョンの Java を使いたい場合ってありますよね。しかしいちいち環境変数書き換えとかやってられないと思います。 そういう場合は JAVACMD を設定すると良いようです。 Running Apache Ant 実行例 例えばいにしえの Java5 でビルドしたいとかいう場合は以下のような具合。パスを見てもらえばわかると思いますが Windows です。 $ set JAVACMD=C:\Program Files (x86)\Java\jdk1.5.0_XX\bin\java.exe $ ant パスがスペースを含む場合でも、ダブルクォートで囲う必要はありません。 というか Ant 懐かしい。

    任意のバージョンの Java を使って Ant を実行する - hd 5.0
  • try-with-resources を使っても catch が不要になるわけではない・・わけでもなかった - hd 5.0

    世間は Java8 に向けて賑わっているというのに周回遅れ感が否めない Java7 ネタ。 Java7 で導入された try-with-resources で C# の using っぽい書き方できるなーと思ってやってみました。 まずは C# の using 。 IDisposable を実装しているクラスであれば、以下の様な感じで書けますね。 void SomeMethod() { using (var resource = new SomeResource()) { // using のブロックを抜けるタイミングで自動的に resource が開放される } } こんな感じのを Java でやるには、 AutoCloseable を実装したクラスであれば以下のように書けます。 void someMethod() { try (SomeResource resource = new So

    try-with-resources を使っても catch が不要になるわけではない・・わけでもなかった - hd 5.0
  • NetBeans + Gradle で JavaFX 開発を始めてみる - hd 5.0

    今日は大雪だというので多分電車も止まるだろうとばっちり休むつもりでいたら、たいして雪もふらず電車も止まってなかったけど休んだ。 というわけで暇だったので NetBeans + Gradle で JavaFX 開発でもやってみようとあれこれ試行錯誤したメモ。とりあえず画面出すまで。変なとこあったらぜひ教えていただきたい。 環境 Windows7 SP1 64bit Java 1.7.0_13 x64 Gradle 1.4 NetBeans 7.2.1 Gradle インストール gradle でぐぐって出てきたやつを入れる。インストールフォルダ\bin を環境変数 path に追加しておく。 NetBeans のプラグイン追加 NetBeans の Gradle サポートを入れる。 NB のツール -> プラグイン -> 使用可能なプラグインから、検索で gradle と入れて出てきた奴をイ

    NetBeans + Gradle で JavaFX 開発を始めてみる - hd 5.0
  • eclipse + wtp + gradle で開発環境構築 - hd 5.0

    前 maven2gradle を使ってみた(メモ) - hd 4.0 で maven2gradle で生成した build.gradle を使って eclipse + wtp で開発できるようにしたのでメモ。 以前の状態だと war 作ったり jettyRun で起動したりはできたけど eclipse + wtp で動かない状態だった。やはり個人的には eclipse で開発できないと辛い。 Gradle STS Support のインストール eclipse で gradle 使うなら多分これが今のところ一番よさそう。まぁコマンドラインでもいい・・というかコマンドラインで十分な気もしないでもないが。 どっかで STS 入れなくても単体で動くとか見たんだけど、 STS がないと認識されてないっぽかったので STS を入れる。重いらしいがまぁ Spring も使うし・・。特に何も考えず Ma

    eclipse + wtp + gradle で開発環境構築 - hd 5.0
  • 1