WindowsPC イヤホンジャックを認識しないを解決

Windows10 の話です。
リモート会議などでUSBのヘッドセットを使うとPCのサウンドは、

というドライバになって、外してその後、電源OFF→起動後、
イヤホンジャックに、イヤホンまたは、イヤホンタイプのマイクを差し込んでも
認識しないことがある。

以下の操作をすれば、認識されるようになる。

コントロールパネルを開いて、
システムとセキュリティ
電源オプション「電源ボタンの動作の変更」をクリック

次の画面で、「現在利用可能ではない設定を変更します」をクリック

すると、シャットダウン設定の下のチェックを変更できるようになるので、
「高速スタートアップを有効にする(奨励)」
のチェックをはずす。もしくはチェックONにする。

再起動する。

すると、イヤホンジャックを認識できるようになり、Realtek ドライバを認識する

MyBatis の SqlSessionFactory

SqlSession session = new SqlSessionFactoryBuilder()
   .build(Resources.getResourceAsReader("mybatis-config.xml"))
   .openSession();

SqlSession openSession(boolean autoCommit);
SqlSession openSession(Connection connection);
SqlSession openSession(TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType);
SqlSession openSession(ExecutorType execType, boolean autoCommit);
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType, Connection connection);

だいたい引数無しを使うことが多い
TransactionIsolationLevel : トランザクション分離レベルを指定

NONE       トランザクション無効
READ_UNCOMMITTED ダーティリード有 ファジーリード有 ファントムリード有
READ_COMMITTED  ダーティリード無 ファジーリード有 ファントムリード有
REPEATABLE_READ ダーティリード無 ファジーリード無 ファントムリード有
SERIALIZABLE   ダーティリード無 ファジーリード無 ファントムリード無

ダーティリード:トランザクションが更新されている最中に、他のトランザクションからデータを読み出すことができる
ファジーリード: トランザクションでUPDATEされたレコードを読み込んでしまう
ファントムリード: トランザクションでINSERTされたレコードを読み込んでしまう

ExecutorType

SIMPLE デフォルト ステートメント実行のたびにPreparedStatementを作成します。
REUSE PreparedStatementを再利用します。
BATCH 更新ステートメントバッチ処理します。

Eclipse 開いてるファイルの場所を開く

Eclipse で検索などをしてファイルを開いた後、パッケージエクスプローラーやプロジェクトエクスプローラーで
場所を開いたい時があります。

どうするか?
パッケージエクスプローラーやプロジェクトエクスプローラーの右上をクリックして、
エディタにリンクをクリック

java.io.Console.readLine() が NullPointerException

java.io.Console を使って、標準入力を簡単に書こうと思ったのだけど、

Console console = System.console();
String s = console.readLine();

Eclipse の実行では、System.console() が、null を返して NullPointerException

This is a bug #122429 of eclipse
Eclipse のバグなのだ。
Console.charset() で返ってくる実行環境から文字コードの認識など、java.io.Console を使いたかったのに。。。

標準入力、以下のようにするしかないか。。。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();

Files.writeString

古い Java の方法でなく、簡単に String をファイルに書く。
Java11 以上なら、、

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
String data = "あいうえお";
String dirs = "/work/dirs";
String filename = "test.txt";   
try{
    Files.createDirectories(Paths.get(dirs));
   
    Path filePath = Path.of(dirs + "/" + filename);
   
    Files.writeString(filePath, data, StandardCharsets.UTF_8, StandardOpenOption.CREATE);
   
    String text = Files.readString(filePath, StandardCharsets.UTF_8);
   
}catch(IOException e) {
    e.printStackTrace();
}

Java17 の Pattern Matching for switch

openjdk.org

switch 文式で、String , int , enum 以外の判定で魅力的なのですが、

static String formatterPatternSwitch(Object o) {
    return switch (o) {
        case Integer i -> String.format("int %d", i);
        case Long l    -> String.format("long %d", l);
        case Double d  -> String.format("double %f", d);
        case String s  -> String.format("String %s", s);
        default        -> o.toString();
    };
}

Java17 の これは、まだプレビュー機能なんだそうだ。どういうことかというと、
Oracle の説明でプレビュー機能は、
プレビュー機能とは、設計、仕様および実装は完了しているが、
 永続的でない新機能のことであり、将来のJDKリリースでは別の形式で存在するか、
 完全になくなる可能性があることを意味します。」

とあるので、Eclipseコンパイルが通常では通らない。

Java19 でもまだ、プレビューの状態なので、
JDK19 を使うようにして、Eclipse のプロジェクト毎の設定でようやく
プレビュー機能を使用」にチェックを入れることができて、
やっとコンパイルも通り動くのだが、
不本意にも JRE19 で実行することになる。
Eclipseの設定は、コンパイルの設定で以下のようにする。
(2022-12 版の Pleades(Eclipse)では、以下のようにしないとダメだった)

このように
「Java19 のプレビュー機能を使用可能にする(P)」にチェックをつけて、
JRE の指定を JRE19 にしないとならない。

logback.xml 等、環境別に

logback 環境変数で出力先やログレベルを指定する。 - Oboe吹きプログラマの黙示録
は、1つの logback.xml を準備して環境変数で環境別に設定の方法であるが、
環境別の logback.xml を用意する方法で Mavenビルド時に、使用環境に合わせたビルド成果物にする。

logback.xml だけでなく他の設定ファイルもこの環境別を示すプロファイルの指定に従う。
properties ファイルもプロファイル指定に沿って配置する

開発時、プロファイル指定なしのビルド兼用
src/main/resources/logaback.xml

製品用、プロファイル指定でビルド対象
src/product/resources/logaback.xml

<profiles>
  <profile>
    <id>develop</id>
    <build>
      <resources>
        <resource>
          <directory>src/main/resources</directory>
        </resource>
      </resources>
    </build>
  </profile>
  <profile>
    <id>product</id>
    <build>
      <resources>
        <resource>
          <directory>src/product/resources</directory>
        </resource>
      </resources>
    </build>
  </profile>
</profiles>

プロファイル指定しないMavenビルドは、デフォルトの src/main/resources 配下で
ビルドされる

Maven profile を指定したビルド - Oboe吹きプログラマの黙示録
でも、書いたことであるが。。。