Skip to main content
QUICK REVIEW

[論文レビュー] Experience on Automatically Converting a C++ Monolith to Java EE

Andre Vehreschild, Lexi Pimenidis|arXiv (Cornell University)|Mar 9, 2026
Software Engineering and Design Patterns被引用数 0
ひとこと要約

要約:論文は clang-tool ベースのトランスパイラを用いて、大規模な C++ モノリス(約80万LOC、約2,500個の .cpp ファイル、約3,000クラス)を Java EE 上で WildFly で動作させるよう自動変換する手法を文書化し、多重継承、列挙型、RAII などの課題と、C++ 開発が継続する中での継続的再生成の戦略に取り組む。

ABSTRACT

Converting a large C++ code base (800k lines of code) into Java alone is challenging. Changing the architecture from a monolith into an application adhering to the Java application server standard and to run it on WildFly is a different number. This report describes the experience made during the C++ to Java conversion, the techniques used as well as the way to success of running the Java code on the application server for the first time. The approaches to solve the usual C++ to Java culprits, like multiple inheritance, enum-handling and scoped objects are described. A clang-tool-based software is developed to continuously regenerate the Java, because development on the C++ code base continued.

研究の動機と目的

  • 大規模な C++ アーティファクトを Java に変換する動機を示し、基盤レイヤの統一、スタックのモダナイゼーション、保守性と採用の観点を向上させる。
  • C++ の特徴(例:多重継承、列挙型、RAII) が Java 及び Java アプリケーションサーバーとどう相互作用するかを説明する。
  • トランスパイラのアーキテクチャとワークフローを提示し、C++ の継続的な開発を取り込む形で翻訳を自動化する。
  • 生成される Java アーティファクトの構造化、パッケージング、Java EE(WildFly)との統合を説明する。
  • 変換プロセスの経験的観察を示し、問題領域と学んだ教訓を挙げる。

提案手法

  • clang-tool をベースとしたトランスパイラを開発し、C++ コア層コードの解析と Java への変換を行う。
  • 中心となるトランスパイルビジターとリライティング/テンプレーティングを用いて、C++ 構造の Java 相当物を出力する。
  • Java テンプレートエンジンと free-function マッパを使用して、C++ の free 関数を Java の static メソッドに翻訳する。
  • C++ の名前空間や STL の使用を Java のパッケージとインポートへマッピングするパッケージ/インポート レジストリを実装する。
  • 難解な機能(例:多重継承、Chain of Command パターン、DAOs など)に対して特別な処理を適用し、Java 互換の設計へ変換する。
  • チェックインごとに Java を生成し、必要に応じて手動修正を反映させる checked replacement を実施して継続的再生成を可能にする。

実験結果

リサーチクエスチョン

  • RQ1大規模な C++ モノリスをどのように Java EE アーキテクチャへ翻訳し、動作を保持しつつ Java アプリケーションサーバーでのデプロイを可能にできるか?
  • RQ2Java へ直接翻訳を妨げる主な C++ の慣用表現(例:多重継承、デストラクタ、列挙型)は何で、それをどう緩和できるか?
  • RQ3規模のある C++ から Java への翻訳を手作業介入を過度に要さず自動化するための技術(ツール、テンプレート、ルール)は何か?
  • RQ4翻訳過程で進行中の C++ 開発を翻訳プロセスと並行してどのように扱えるか?
  • RQ5Java 的パラダイムに適合させるための現実的なアーキテクチャ適応(例:DAOs の is-a を has-a へ変換、Chain of Command の処理)とは何か?

主な発見

  • アーティファクトは約2,500個の CPP ファイル、約3,000クラス、約80万行のコードから成る。
  • 約400クラスが複数の基底クラスを継承しており、その多くは DAO または Chain パターンに関与しており、選択した緩和戦略を導く指針となる。
  • 自動翻訳後、手動で微調整が必要だったクラスは約10件程度であった。
  • トランスパイラはテンプレートベースの出力戦略とリライトテーブルを用いて、複雑な型処理や演算子/メソッドの書き換えを含む C++ 構造を Java に対応させている。
  • 中央のパッケージレジストリは推論された使用状況に基づいてインポートを集約し、一貫した Java パッケージ構造を実現し、欠落するインポートを回避する。
  • このアプローチはエンums、RAII スタイルのリソース管理、複雑な継承の実務的な処理を Java エコシステムで示し、Java アプリケーションサーバー(WildFly)でのデプロイを可能にする。
  • ワークフローは C++ ベースが進化する中で Java コードの継続的再生成をサポートし、必要に応じて manual corrections を統合するための checked-replace メカニズムを備える。)

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。