2021-01-01から1年間の記事一覧

XMLMapperBuilder を使ってみる。

mybatis の一般的なSQL Mapper の指定は、Mapper インターフェースクラスのパッケージと 同じ階層に、SQLMap XML を配置するか、Configuration のXMLで、 <mappers> <mapper resource="sql/sqlmap.xml"/> </mappers> で書くであろう。 Configuration のXMLを書かずに、さらに、SQLMap XML の PATH をMapper イ…

mybatis config のXMLを書かない

1年以上前、mybatis config 設定 = 接続情報等のXMLを使わないケースで 以下を書いた。 【再興】mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録1つの Mapper に限らず、複数 Mapper を使用することもあるのだから、以下が良い。 public sta…

JUnit4 でのモック

以前からJUnit には、あまり執着することがなかった。 カバレッジ率の為に無駄に近い労力をかけたくもなく、動いて当たり前のテストケースを 書くセンスの無さが厭だったからである。 今日は、今更の JUnit のことを書いてみたくなった。static メソッドのモ…

Consummer を実行させたオブジェクトを取得する

任意オブジェクト生成→属性設定済みを取得するのに、簡潔を目指していた。 例) import lombok.Data; @Data public class Member{ private String memberId; private String firstName; private String lastName; private int limitDays; public void setNam…

大文字の snake Case を camel Case 規則の Java オブジェクトに変換する

先日、Jackson を使用した JSONシリアライズ/デシリアライズで、snake Case と camel Case の 予め存在する方法のことを書いた。。。 oboe2uran.hatenablog.com大文字の snake Case の場合、どうするのだ!? とレアなケースで少し頭をかかえた。小文字の s…

SourceTree でリモートフェッチして対象が表示されない時、

リモートのGIT に存在するはずのブランチが、リモート origin をフェッチしても 表示されないことが、SourceTree であった。他のアプリ、Eclipse GIT でプルしたのを後からSourceTreeで開いたせいだろうか? 原因がよくわからないが対処は、 .git フォルダに…

ByteArrayOutputStream を使い回すリスク

ByteArrayOutputStream を使い回すコードを書きそうでいて、 めったに書かないコーディングである。 reset() を呼ばずに使い回すと前回の出力内容が残っていて思わぬ結果になる。reset() は、ByteArrayOutputStream 内部で持つ byte配列の書き込みカウンタを…

AWS Lambda設定で環境変数を設定する時の注意

AWSコンソールから Lambdaを設定する作業で、 環境変数に、AWS_REGION というのをキーに、使用 Region をセットしようとしら、、Lambda was unable to configure your environment variables because the environment variables you have provided contains …

AutoCloseable と try-with-resources 文について。

サンプル public interface Agent extends AutoCloseable{ public void execute(); } public class AgentImpl implements Agent{ @Override public void execute(){ System.out.println("AgentImpl::execute"); } @Override public void close() throws Exce…

AWS S3 アップロードの content Length の問題

Amazon S3 サービスのクライアント、 com.amazonaws.service.s3.AmazonS3 で、InputStream から S3 にアップロードする時、 com.amazonaws.service.s3.model.ObjectMetadata にセットする 長さ=content Length をわからない時に、どうやって調べて指定すれ…

mybatis で、後からマッパーを追加する。

既に生成済の SqlSession に対して後から SQL mapper を追加する方法 (設計として悪いので勧められない)セッションが持っている マッパーレジストリにマッパークラスを追加する。 import org.apache.ibatis.binding.MapperRegistry; import org.apache.iba…

Jackson CamelCase フィールドで、UnrecognizedPropertyException

Jackson で、次のような JSON をデシリアライズすると UnrecognizedPropertyException が発生 { "firstName": "太郎", "lastName" : "山田", "uId": "A001" } import lombok.Data; @Data public class UserInfo{ private String firstName; private String l…

mybatis の短い SqlSession の生成方法

設定コンフィグXML がある前提で、、 org.apache.ibatis.io.Resources を使用して、 import java.io.IOException; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFacto…

Java コード上で環境変数をセット

環境変数の取得は、System.getEnv(String) でも、setEnv など System には存在しない。 Java コード上から環境変数をセットしなければならないケースなんて、そうそうないのだけれど。。。参考は、How do I set environment variables from Java? - Stack Ov…

Maven ビルド実行前にファイルコピー

過去にこんな投稿をしていた。。。 Maven ファイルのコピー - Oboe吹きプログラマの黙示録 そして、gradle 使用では、、、 gradle の copy タスク活用 - Oboe吹きプログラマの黙示録Maven の方、、ビルド前、package や install タスクの前に実行したいとい…

static 変数へのインジェクション

Google guice は、通常のインジェクションの方法では、static 変数へのインジェクトはされない。ただし、Module の configure で、インジェクトしたい static 変数をもつクラスを以下のように指定すれば、requestStaticInjection(Class);可能ではある。Googl…

インターセプターでメソッドアノテーションの状況を取得

Google guice インターセプターでメソッドに付与されたアノテーションの状況を取得する。例えば、javax.inject.Named により、@Named("ABC") とメソッドに付与された場合で インターセプター側でこの Named で付与した文字列を受け取る。import org.aopallia…

Google guice Matchers の OR

Google guice の AOP インターセプターバインド定義で使用される Matchers には、 OR で一致を判定するものを提供していません。 com.google.inject.matcher.Matchers の static メソッドの一覧 any() 全て無条件に一致 only(Object) 指定するObjectに限定eq…

guice のAOPで使う Matchers のアノテーション一致を自作する

@Named 付与の判定は、Google guice の Module 定義をする時に、 Names.named スタティックメソッドを良く使います。 guice AOP でインターセプターを定義するときも、クラスやメソッドの Matcher には、 Matchers という マッチ検証をする static メソッド…

Eclipseプロジェクト、既存Mavenプロジェクトを強制的にMavenモジュールにする方法

親になるpom で定義したMavenプロジェクトに子のMaven モジュールを作成するのは、 通常の方法では、親になるMavenプロジェクトを選択して右クリック [Maven]→「新規 Mavenモジュール・プロジェクト」を選択して作成していく。 既にある Mavenプロジェクトを…

@ImplementedBy について

Google guice の @ImplementedBy に対して、筆者は使用を避けてきた。 なぜなら、インターフェース宣言でこの @ImplementedBy( 実装クラス名.class ) は、 Injector (com.google.inject.Injector) で、約束する Module(com.google.inject.Module)で、 @Imp…

Python で JSON をマージする方法と、Java(Jackson使用)でマージする方法

Python Python で JSON をマージするのに誰でも思いつく簡単な方法は、 JSON を辞書(dict)として読みこんで、dict(dict1, **dict2) の方法でマージする方法である。 簡単なサンプル import json j1 = ''' { "a": 1, "ary": [ 10, 11 ], "b":{ "b1": 20 } }…

Python で書く synchronized

先日、投稿したPython で書くシングルトンに続いて、 synchronized メソッド threading の Lock を使って書く。シングルトンのメソッドを synchronized にするモデルが適していると思う。 utility.py import threading def singleton(cls): instances = {} d…

Python でシングルトンを作る

Java だったら、private コンストラクタにした final クラスで synchronized の static メソッドでインスタンス取得する お決まりの実装だけど、Python はいくつか方法がある。getInstance() というメソッドでインスタンス取得させる方法 # -*- coding: utf-…

MySQL のJSON 型を扱うSQL

SQL

サンプル、 DELIMITER // DROP TABLE IF EXISTS sakila.t_item // CREATE TABLE t_item( id INT NOT NULL AUTO_INCREMENT , name VARCHAR(40) NOT NULL , message JSON DEFAULT NULL , PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_…

Jackson JsonNode を JSONテキストとして出力する

ObjectMapper の writeValue で、ByteArrayOutputStream に出力して byte[] → StringJSONテキストして整形して出力したいので、DefaultIndenter でインデント詳細を指定して ObjectMapper の writer で、DefaultPrettyPrinter を指定したうえで、writeValue …

MySQL JSON型をmybatis で読み書きするサンプル

MySQL バージョン 5.7.8 以降で使える JSON型に対する mybatis のハンドラ実装のサンプルです。 JSON型のデータが、単純な key-value だけでなくネストしたオブジェクトが入ったJSONでも、 Java のクラスのネストと対応できることを示すためのサンプルです。…

paramiko で対話式の処理

paramiko で対話式を処理するにはどうしたら良いのか? paramiko-pexpect とかを使えば良いのかもしれないが、invoke_shell() 、シェルとして実行する方法で 踏み台の先の telnet 接続してコマンドを流す方法を考えた。以下の例は最初のSSH接続の後、もう1…

文字列 format で辞書を指定

文字列フォーマットのキー名による置換はよく以下のように書くであろう。 dburl="{dialect}+{driver}://{username}:{password}@{host}:{port}/{database}?charset={charset_type}"\ .format(dialect='mysql', driver='pymysql', username='admin', password=…

Handsontable の DataSchema と afterCreateRow

Handsontable は、DataSchema を定義しておけば 行挿入(row_above)で生成される行の初期値が定義した値になる。 DataSchema での定義は、Handsontable インスタンス生成のタイミングで決まる。 後からこれを変更するなんてナンセンスである。 また、DataSc…