気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Java

UTで現在時刻を扱うとき使う java.time.Clock

UTで現在時刻を扱う際の課題 現在時刻を取得するためにSystem.currentTimeMills()やLocalDateTime.now()などのstatic methodを呼び出して利用することが多いが、static methodを利用して現在時刻を取得するとテストで利用する際の時刻のスタブを用意しずらく…

設計、実装確認ポイント(Kotlin)

実装 思想 改修の場合、既存仕様や全体統一感に囚われ過ぎない。シンプル化、保守性向上を意識する 不要項目を含んだオブジェクトパラメータの是正 変数名が設定値と異なる名称であれば是正(影響範囲が広くなりすぎないかは判断) クラス構成 継承よりも移譲…

Javaバージョンを切り替えるjEnvの基本コマンド

jenvのインストール brewでインストール brew install jenv 設定 Bashを使っている場合 echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(jenv init -)"' >> ~/.bash_profile Zshを使っている場合 echo 'export PATH="$HOME/.j…

Java8 ラムダ式でよく利用する関数型インターフェース

関数型インターフェースとは? 単一メソッドを持つインターフェース群 ラムダ 式で利用するのに都合がいい SE8からjava.util.functionパッケージに追加された ラムダ式を引数として取る場合に、関数型インターフェースを指定して受け取る。 ラムダ式の種類毎…

Private メソッドをテストコードで実行する

テストコード内でprivateメソッドを呼ぶことができず、publicにしたくなります。 そんなときはリフレクションを使って、privateメソッド呼び出すことでテストを書くとよいかも getDeclaredMethodはprivateメソッドでも取得可。getMethodでは、pravateメソッ…

S2Daoのバッチ更新で手動作成SQLファイルを実行できるか調べてみた

ループ内更新による性能劣化を改善するために、S2Daoのバッチ更新で IO回数を減らしたかったので調査しました。 今回は、手動作成SQLファイルの実行を前提としています。 S2Daoのバッチ更新が使える条件 そもそも、手動作成SQLファイルの実行では、バッチ更…

Javaメモリ設定方法と、確認用コマンド

メモリ設定方法 以下の設定を元に考えてみます。 -XX:MaxMetaspaceSize=128m -Xms256m -Xmx256m -Xss1m -XX:NewSize=100m -XX:MaxNewSize=100m |オプション|説明|設定値目安| |:-|:-|:-| |MetaSpace|libの読み込み、JSPのコンパイル結果つむ|64~256程度| |X…

Logbackのログローテート設定

Spring Boot内のLogbackを用いて、ログローテートを行う際の設定について以下にまとめます。 ログローテする場合のLogback設定 以下前提で設定しました。 ローテ―トタイミング:日別 最大保存ファイル数:3 保存形式:gz (ローテ―ト時に圧縮) <configuration> <springProfile name="develop"> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> </include></springprofile></configuration>

オブジェクトのマーシャリングとは?

マーシャリングとは? マーシャリング、アンマーシャリングという言葉がたまに出てくるが、 これは、オブジェクトをファイル、DBなどに保存できる形式に変換、または変換を戻すことを指す。 同義の用語としては以下がある。 ※マーシャリングは、シリアル化と…

Beanを簡単にXMLに書き出す Betwixt

BetwixtはJavaBeansを簡単にXMLに書き出すためのAPIです。 詳細は以下の参考URLを参照。 公式Doc http://commons.apache.org/dormant/commons-betwixt/ http://commons.apache.org/dormant/commons-betwixt/apidocs/index.html はじめてのJakarta Commons Be…

Eclipse 保存時フォーマットをしない設定(スペース、タブ除去)

既存ソース修正後の保存時に修正していない箇所がフォーマットされて、本当に修正した箇所が分かりづらくなりレビュー時に怒られたことはないでしょうか。 フォーマット設定は2つあって、片方を修正したのにやっぱりフォーマットされる。。なぜだーと私はな…

別名のlog4jを読み込む方法

今となってはもっとモダンな書き方があるのかもしれませんが、 開発時に使った書き方について備忘録として残しておきます。 プロパティファイル読み込み クラスパスの通ったresources以下にあるlog4jのプロパティを読み込む場合の記述方法です。 ClassLoader…

いまさらだけどSastrutsのプロジェクトをMavenで導入する

背景 まだ、SAstrutsから移行できずにいるプロジェクトが残っており、 そのプロジェクトがビルドできない。きれいな空プロジェクトをMavenを使って作成して、 ビルドできる状態にしようと考え、空プロジェクトを生成してみる。 環境 Mac OSX High Sierra Mav…

意外と知らないEclipseコード補完で使えるテンプレート

テンプレートを使った補完って便利ですよね。 あまり使っていなかったけど、便利なテンプレートを紹介してみます。 また、よく書く記述はテンプレート化して、入力量と記述ミスを減らしていくと無用なデバッグが減って 仕様確認、設計など大事なことに時間を…

Mavenで取得したJarのソースコードをEclipseにを添付する

Mavenで取得したJarのソースコードが参照できなかったので、 ソースコードのダウンロードを行う設定をMavenのEclipseプラグインで設定しました。 pom.xmlへの設定 buildタグ内に「maven-eclipse-plugin」の設定を追記。 <build> ・ ・ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>ma</artifactid></plugin></build>…

【Java】DB設計書、ER図、クラス図を自動生成するツールたち

Javaで作られたシステムでドキュメントがない場合、システム理解を効率的に進めるためには、 DB設計書、ER図、クラス図の自動生成して、インプット情報とするのが良いです。 WindowsでEclipseを使って開発する環境をイメージしています。 自動生成ツールの導…

HerokuにJavaアプリをデプロイする

昔、RubyでHerokuにアプリを上げたりしてましたが、 Javaアプリをデプロイするやり方がわからなかったので、作業メモとして、残します。 Herokuのアカウント作成していない方は、作成して下さい。 クレジットカード番号は、不要で、メールアドレスのみ登録が…

サーバー構築時(Appache+Tomcat)に知っておきたい設定ファイルやコマンド

1.Tomcatサーバー 設定ファイル server.xml Tomcatサーバー動作を定義する設定ファイルです。 配置パスは、/usr/local/tomcat/conf/以下や/opt/tomcat/conf以下に配置。 $CATALINA_HOME\confディレクトリ配下に配置するのが一般的。 設定イメージ <Engine -----> <Loggerタグの設定 ログX> <Host name="localhostA" > <Loggerタグの設定 ログY> </Host> <Host name="localhostB" >…</host></loggerタグの設定></engine>

Java 例外クラス

Javaの例外クラスの基本についての要点を簡単に記載しておきます。 継承関係 -Throwable --Error --Exception ---RuntimeException -の数が、継承関係を示します。 各種例外の意味するところ 例外クラス 説明 Throwable throw文に指定できるかどうかを表すク…

Java8 LocalDateTimeと旧Dateの相互変換

Java8のLocalDateTimeからDateへの変換は思いのほか、骨が折れる。。 DBfluteのJava8対応で日時項目が、LocalDateTime型としてentity生成されているので、調べたがそもそも使わないというのもありかもしれない。。 LocalDateTimeからDateへの変換 その1 Loca…

Java 実装で使える日付型の書き方(Date,Timestamp,Calendar)

システム日付のDate型を文字列に変換 SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date_String = ft.format(new Date()); 日付の比較 compareToを使わないDate型の比較 Date型のcompareTo()の比較もあるが、戻り値が-1,0,1…

Teeda(概要〜入力/サブミット〜画面遷移)

Seasarプロジェクト発のJSFをベースとしたフレームワーク Teeda 概要 機能 JSFの標準機能に加え, DIとAOPの機能を保持 POJO中心の開発スタイルを提供 モジュール構成 Teeda Core:JSFにおけるUIコンポーネント管理にSeasar2を利用する。 Teeda Extension:Tee…

DBFluteとは?

DBアクセスを行うO/Rマッパー (DBFlute Runtime) DB周りの便利な各種ツール (DBFlute Client) DBFlueteの特徴 ORマッパー DBのメタ情報を元にコードを自動生成してくれ、SQL発行をタイプセーフに行うことができる。 JDBC APIのみに依存 DBのテーブル構造のま…

Seasar2の開発の進め方

ページ駆動開発 ページ駆動開発の手順 3. Doltengを用い、EntityとDaoを作成 4. HTMLの入出力項目のタグのidにテーブル名のカラムを記述 5. HTMLのボタンのタグのidに処理メソッド名を記述 6. Doltengを用い、JavaのPageクラスを自動生成 ユーザー要件に合わ…

Seasar2の特徴とプロダクト構成

Seasar2によるスーパーアジャイルなWeb開発のChapter1の内容をピックアップ、自分の知見を少し追記してまとめました。詳細は書籍で確認してみてください。 プラットフォームの問題 再デプロイの問題 Searsar2の特徴 サクサク感のある開発 設定ファイルいらず…

Seasar2のTeeda、S2Daoの基礎を一気に身につけるまとめ

下記、書籍における勉強したまとめをドンドン追記していきます! ちょっと古めな技術ですが、必要に迫られたので。Seasar2におけるAgile FamilyのTeeda、S2Daoの基礎知識を身につけていきます。 Seasar2によるスーパーアジャイルなWeb開発 (WEB+DB PRESS plu…

Eclipseの導入方法

Eclipseの導入において、よく設定する内容を記載します。 下記のEclipse IDE for Java EE Developersをインストール https://eclipse.org/downloads/ 日本語化 eclipseの「新規ソフトウェアのインストール」を使う方法 http://www.shinbo.org/archives/7264 …

スレッドセーフなMap ConcurrentHashMap

特徴 J2SE 5.0 で導入された ConcurrentHashMap クラスは、安全性に関する Hashtable の特長と、性能に 関する HashMap の利点を兼ね備えて 機能仕様は Hashtable と同じでありながら、アクセスのたびにロック するようなことがありません。通常は複数のスレ…

Java クラスをスレッドセーフに実装する

スレッドセーフを意識する必要がある処理 アンスレッドセーフなコード リード・モディファイ・ライト操作 チェック・ゼン・アクト操作 スレッドセーフな実装 参考URL スレッドセーフを意識する必要がある処理 同時アクセス処理 スレッド処理 アンスレッドセ…

Javaメモリ関連のTips

1.eclipse.iniファイルの設定値(vmパラメータのみ) メモリ設定方法 vmargs server Dosgi.requiredJavaVersion=1.5 Dhelp.lucene.tokenizer=standard Xms1024m Xmx1024m XX:PermSize=256m XX:MaxPermSize=256m XX:NewRatio=2 XX:SurvivorRatio=8 XX:+UseParNe…