ページ

ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2018/12/31

フォーマッタの自動適用

|

前のエントリでも紹介した node-archiver-zip-encryptable の開発では Prettier を適用したが、フォーマットの統一に注意を払わなくて済むのは非常に快適だった。
ルーツが何かは調べられていないが、過去の自分の経験の中で似たようなものには Golang の gofmt があった。
Java のプロジェクトでも適用できないものかと思ったが、 prettier-java は現在 Work in Progress の状態。

2015/03/28

Spring Bootのアプリ内にパスワード生成タスクを追加

|

以前のエントリ Play Frameworkのアプリ内にパスワード生成プロジェクトを追加のようなことをSpring Bootで行う方法について。
上記エントリで書いたように、Gradleで簡単に定義できる。

暗号化方法は、Spring Bootでユーザ認証で書いたようにWebSecurityConfigurerAdapterの継承クラスでnew StandardPasswordEncoder()を設定している前提。
他のEncoderを使う場合はタスクの内容を適宜書き換えれば良いはず。

Spring Bootでユーザ認証

|

Spring Bootで(というかSpring Securityのような気もするが)
ユーザ認証を実装する方法について。
とりあえずハードコードで、という方法は見つかるのだが

  • DBにユーザ情報を格納し
  • ID以外のユーザ情報にもアクセスできるようにする

という場合の方法が見つからず苦労したので記録しておく。

Play Framework 2.3をJavaで使うときに困った話(凡ミス)

|

Play Framework 2.3.8を使ってサンプルを作っていた時、
チュートリアルを参考に進めていたつもりだったのだが
Viewなど至るところでplay.api.*が参照されてしまい
クラスが見つからないエラーが多発した。
てっきりJavaはもうサポートされていないのかな…と
思ってしまったが、単なる凡ミスだった。
build.sbtで以下のようにPlayJavaプラグインを使用するように設定すれば良いだけのこと。

lazy val root = (project in file(".")).enablePlugins(PlayJava)

これを、PlayScalaプラグインを適用していたせいで上手くいかなかったのであった。

恥ずかしい話だが、誰かの役に立つかもしれないのでメモ。

Play FrameworkでSQLで初期データ投入する方法

|

Play Frameworkでは、EBeanを使い
YAMLで初期データを書くようだが、
SpringのようにSQLファイルで初期化したい場合。
Scalaだとanormが使えるようだが、Javaだと以下のような感じに作るしかなさそう。
Play Frameworkは2.3.8。JavaはOracle JDK 7。

Play Frameworkのアプリ内にパスワード生成プロジェクトを追加

|

Webアプリケーションのユーザをテーブルで管理する場合
MySQLなどのDBで、SHA2()関数などを使ってパスワードを変換しても良いのだが、プログラム側で生成するとした場合は開発中のテストユーザのパスワードを生成するのに困る。

Play Frameworkの場合はBCryptを使う例を見かけたので
これを使うタスクをSBTで定義できたら良いのかな、と考えた。
…が、結局(知識不足なためだろうが)うまくできずサブプロジェクトとして用意して解決できたのでそのメモ。
(Play Frameowrk 2.3.8, Java 7)

2014/05/02

[Docker] Dockerfileのサンプル

|
勉強のために、そしてCIやら色々使い方を考えるためにテンプレートとして
リポジトリを作成。
https://github.com/ksoichiro/dockerfiles
さらに最後には index.docker.io に登録してみた。

以下その内容。

OpenJDK7

Javaが使えるというだけですが・・。
https://github.com/ksoichiro/dockerfiles/tree/master/openjdk7
こちらに登録中。
https://index.docker.io/u/ksoichiro/openjdk7/
"docker pull ksoichiro/openjdk7" でプルできます。

Android

Android SDKが使えるコンテナ。Jenkinsでのビルドに使えそう。
https://github.com/ksoichiro/dockerfiles/tree/master/android
こちらに登録中。
https://index.docker.io/u/ksoichiro/android/
"docker pull ksoichiro/android" でプルできます。

Android + エミュレータ

Android SDKとエミュレータ(ARM)が使えるコンテナ。
https://github.com/ksoichiro/dockerfiles/tree/master/android-emulator
エミュレータを実行するスクリプトはENTRYPOINTになっているだけなので、
docker runしてからしばらくは起動待ち。。。
それでも、ホスト側の環境を汚さずにAndroid上でのテストができるので
これもCIに使えそう。
(頻繁な実行は厳しいが・・・)

こちらに登録中。
"docker pull ksoichiro/android-emulator" でプルできます。

エミュレータについては、例えばGradleでビルドしているプロジェクトなら
以下のように使える。

cd /path/to/project
docker run -t -i -v `pwd`:/workspace ksoichiro/android-emulator start-emulator "./gradlew connectedAndroidTest"

VOLUMEとWORKDIRの設定がしてあり、dockerのコンテナ内では/workspaceがプロジェクトフォルダになる。
/opt/android-sdk-linuxにインストールされたAndroid SDKを使って/workspaceのプロジェクトをGradleでビルド・テストすることになる。

2011/06/11

SAStruts ボタンのラベル

|
急にSAStrutsです。

JSPに日本語を直接書かず、プロパティファイルに集約することを考えました。

普通のラベルなどは<bean:message>を使うことで簡単にできましたが、ボタンのラベルに適用することができず少し手こずりました。
タグの属性にタグを使いたい時、EL式を定義するか新しいタグを作るかと思ってしまいますが
ちゃんと用意されていました。
結果的にはSAStruts(s:submit)の新しいやり方でなくStrutsのときから用意されていたやり方(html:submit)でした。

プロパティ(application_ja.properties):

labels.login_id=ログインID

普通のラベル表示:
<bean:message key="labels.login_id" />

ボタンに適用(NG):
<s:submit value="<bean:message key="labels.login_id" />" />

ボタンに適用(OK):
<s:submit><bean:message key="labels.login_id" /></s:submit>

ボタンに適用(OK):
<html:submit><bean:message key="labels.login_id" /></html:submit>

2011/05/03

Java リフレクションで取得するフィールドの順番

|
リフレクションでフィールドを取得すると、フィールドの順番が何に基づいているのか分からない結果となりました。

Java API仕様を見ると、確かに順序は決まっていないという記述がありました。
Class#getFields()

この Class オブジェクトが表すクラスまたはインタフェースのすべてのアクセス可能な public フィールドをリフレクトする、Field オブジェクトを保持している配列を返します。返された配列内の要素は、ソートされていたり、特定の順序になっていたりすることはありません。


Javaの標準的な機能ではフィールドの定義順でフィールド情報を取得することはできなさそうです。

以下のように、フィールド名やアノテーションを使えば順序を規定することはできそうです。
Java reflection: Is the order of class fields and methods standardized? - stackoverflow

これを使って、AndroidのParcelableの実装を汎用化しようと思います。
# Parcelable#writeToParcel(Parcel, int)やコンストラクタにフィールドを列挙するのを毎回書かずに済むようにします。