株式会社電通総研 テクノロジーで企業と社会の進化を実現する株式会社電通総研(本社:東京都港区、代表取締役社長:岩本 浩久、以下「電通総研」)は、オープンソースのJava向けデータベースアクセスフレームワーク「Doma(ドマ)」の利用支援ツールを開発し、2025年6月10日(火)にオープンソースコミュニティへ寄贈します。 「Doma」は、Javaでデータベースに繋ぐ際に、データの保存や取得を容易にするフレームワークです。JavaコードとSQLステートメントを明確に分離することで開発者の負荷となる修正コストを低減できるほか、アプリケーションの脆弱性を利用しデータベースに不正なSQL文を注入するSQLインジェクションを防ぐことも可能です。 今回提供するツールは、JavaとSQLの管理を支援するさまざまな機能を備え、「Doma」を活用するソフトウエア開発者の生産性向上に寄与します。 データベースア
本記事はJava Advent Calendar 2024の9日目です。 最近のJavaには、動的にメソッドやフィールドを操作するための方法がいくつか存在します。本記事では、それぞれの特徴や利点をベンチマークを利用しながら実行速度に焦点を絞って解説していきたいと思います。 リフレクションの対象はインスタント化、フィールドアクセス、メソッド呼び出し等多岐に渡りますが、今回は下記のようなgetメソッドを呼び出す例で比較します。 1. Core Reflection 概要 みんな大好き、太古の昔から存在するリフレクションは、java.lang.reflect パッケージを利用して、実行時にクラスやメンバー(メソッド、フィールド、コンストラクタ)の情報を取得し、それらを操作する仕組みです。ライブラリやフレームワークの汎用性を担保するために使用されることが多いと思います。 特徴 汎用性: クラス、メ
こんにちは!ヘンリーでソフトウェアエンジニアをしている @agatan です。 今日は小ネタで、サーバーサイド Java / Kotlin エコシステムで意外と使われている ThreadLocal と、それを Coroutine と安全に組み合わせる方法について紹介します! TL; DR ThreadContextElementを使おう! ThreadLocal とは java.lang.ThreadLocal<T> は、その名の通り、スレッドローカルな(= スレッドごとに独立した値を持つ)変数を定義するための機構です。 ある Thread で値を書き換えたとしても、他の Thread から見た ThreadLocal 変数の中身は書き換わらない、という性質があります。 import kotlin.concurrent.thread val tls: ThreadLocal<Int> =
はじめに Gatherer 組み込み Gatherer Gatherers.windowFixed Gatherers.windowSliding Gatherers.fold Gatherers.scan Gatherers.mapConcurrent Gatherer.ofSequential まとめ JDK 22 でプレビュー公開(https://openjdk.org/jeps/461)、JDK 23 でセカンドプレビュー公開(https://openjdk.org/jeps/473) となる Stream Gatherers を学び、正式公開に備えましょう。 2024年10月17日追記 JDK 24 にて、セカンドプレビューと同内容で正式公開(https://openjdk.org/jeps/485) になります。 はじめに Stream Gatherers とは、Stream
また、Python3 スクリプトを実行するサンプル、Go との相互呼び出しを行うサンプルもおいてあります。 前置き Jextract とは jextract is a tool which mechanically generates Java bindings from a native library headers. This tools leverages the clang C API in order to parse the headers associated with a given native library, and the generated Java bindings build upon the Foreign Function & Memory API. jextract は、ネイティブ ライブラリ ヘッダーから Java バインディングを機械的に生成するツ
2年前のブログが未だにブクマされるので、念のため掲題の件について書いておきます。 端的に書くと、あのブログで挙げた懸念事項が解消されたのでどんどん使うと良いと思います。 SLF4J v2の安定版がリリースされた 良かったですね。ちなみにv2.0.9から slf4j.provider プロパティでproviderを指定できるようになったので、Service Loaderによるprovider探索をガツッとスキップできます。多くのユースケースでは利用したほうがログの単純化や起動の高速化に有効のはずです。 SLF4Jの活動は最近活発 JIRAのデータを見れば一目瞭然。私もGitHub Issueで回答に回ったりしますが、著者の方も頻繁にコメントしてくれてます。最近のLogbackの脆弱性への対応も充分に早かったのではないでしょうか。 図1 2023年の活動状況。緑の線が6ヶ月近く右肩上がりなのに
Java仕様の決定に関わるエグゼクティブコミッティに「日本Javaユーザーグループ」の選出が確定。立候補理由や今後の活動を聞いた Javaはその仕様策定の過程で、Javaに関係する企業やJUG(Java User Group)と呼ばれるコミュニティなどの組織、個人開発者などが多数参加し議論が行われるJCP(Java Community Process)と呼ばれるプロセスがあります。 Javaが長い間、発展と進化を遂げてきた理由に、このオープン性があります。 このJCPの中で、特に仕様策定の推進や決定の役割を担うのがExecutive Committee(エグゼクティブコミッティ/執行委員。以下、JCP EC)です。 そして今年、2023年のJCP ECの選挙に日本Javaユーザーグループ(以下JJUG)が立候補し、先月(11月)に発表された選挙結果によって、JJUGがJCP ECに選出され
OpenRewrite とは OpenRewrite プラグイン設定 OpenRewrite プラグインの実行 ライセンスヘッダの追加 その他整形 OpenRewrite とは ソースコードの書き換えツール ソースコードを Lossless Semantic Tree (LST) と呼ばれるツリー表現で解釈して検索と変換を行う フレームワークのバージョン移行、脆弱性パッチや大規模なソースコードリファクタリングが可能 Gradle や Maven プラグインとして利用可能 多くは、フレームワークのバージョンアップに合わせたマイグレーションで使われることが多いと思いますが、コード整形用途であらかじめ導入しておくのが便利なのでここで紹介します。 github.com OpenRewrite プラグイン設定 Gradle の Kotlin DSL を例にします。 build.gradle.kts
Vineflower とは コマンドラインでの実行 コマンドラインオプション Vineflower とは レコードクラスやシールドクラス、スイッチ式などの新しい文法に対応(Java 20+)した JVM 言語用のデコンパイラです(Quiltflower 1.9.0 が、Vineflower 1.9.1 と名称変更されました)。 vineflower.org intellij-community の java-decompiler からフォークして、デコンパイラ・エンジン Fernflower を使っています。Fernflower によるデコンパイルは以下が参考になります。 github.com コマンドラインでの実行 vineflower.jar にデコンパイルしたい jar を渡して実行するだけです。 java -jar vineflower.jar <arguments> <sourc
2025/03/24 追記 Java 24 以降では、仮想スレッドでも、従来の synchronized と同じような動作をするようになったため、この記事に記載のような、ピンニング回避のために ReentrantLock などを使用する必要はありません。 JEP 491: Synchronize Virtual Threads without Pinning https://openjdk.org/jeps/491 仮想スレッドと synchronized Java 21 では高スケーラビリティを実現するためのイノベーションとして、仮想スレッドが正式に導入されました。しかし、言語機能としてのロック機構 synchronized キーワードは、1 つ以上の仮想スレッドが動作する従来のプラットフォームスレッド (キャリアスレッド) に対して作用するため、仮想スレッドがキャリからアンマウントでき
こんにちは、SREの戸田です。本日は社内で開催したJVM勉強会(運用編)の一部を公開します。 JVM、使っていますか?弊社ではサーバサイドKotlinが活躍しているので、もちろん日常的にJVMが稼働しています。このためサービス運用の一貫で必要になる知識や関連ツールなどをSREないしプロダクトチームに共有することを目的として、この勉強会を開催しました。 図1 勉強会はGoogle Meetでオンライン開催しました パフォーマンス・チューニング サービスを開発していると、この処理をもっと高速化したい!ランニングコストを抑えてユーザ体験の向上に投資したい!というというシーンには多く遭遇しますよね。こうしたユーザが増えてサービスに負荷がかかるようになったことで生じた課題に対して迅速に打ち手が取れることは、とても重要です。 しかし焦ってはいけません。「このコードはめっちゃループしてるし遅そう!」「あ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く