Progress 4GLからJavaへの変換
アプリケーション移行ツールIspirer MnMTKProgress 4GLからJavaへの変換を支援しています。
Progress 4GLからJavaへの移行の概要
Ispirer MnMTK はとても柔軟な変換ツールであり、クライアントのビジネスニーズに応じ、新たな変換方向の追加開発も短期間で行うことができます。私たちの技術者はアプリケーション移行における絶大経験があり、最も複雑なタスクの解決策を見つけることをお約束します。
このデモでIspirer MnMTK 2017によるProgress 4GLからJavaへの移行を見ることができます:
なぜIspirer MnMTKなのか
Ispirer MnMTKは、現行OpenEdgeアプリケーションからJavaへの移行作業を自動化することができ、移行作業に伴うリスクと必要な内部作業を大幅に削減することが出来ます。Ispirer MnMTKはこれらの利点と共にお手頃な価格でデータベースおよびアプリケーションの変換を行う事ができるため、このような移行プロジェクトにとりとても魅力的なツールです。
弊社の変換技術の利点:
- 読み易くて、保守し易いコード
インテリジェントで保守し易いコードの生成
- コード変換とリファクタリング
コード変換による、Javaの最善慣行を実現すること
- 最新技術
- Javaの純粋なコード
IspirerライブラリーとIPは必要ありません
Ispirer MnMTKは大規模なスクリプトの変換に対して、効果的に実行することができます:
- 自動的な依存関係の解決
ツールは依存ファイルやデータベース等から情報を抽出し、依存関係や競合を自動的に解決することができます。
- コンフィギュレーション
ツールは様々なファイルからの情報を読み出すことができます(SQLWays コンフィギュレーションファイル、 .xmlファイル)。
- 迅速で強力なカスタマイズ
抽象的なレイヤー、再利用可能な変換テンプレート、内部変換言語およびツールにより、迅速なカスタマイズと複雑なコード変換が可能になります。
アセスメント
アセスメント作業は簡単ですぐに移行に要する作業とコストを見積もることができます。お見積に必要な情報は、下記のフォームを参照いただくと揃えることができます:
ISV会社の場合は、Ispirerは大規模のアプリケーションを変換する為、包括的な共同作業モデルを提供しています。
Ispirer移行ソリューションProgress 4GLからJavaへ リクエスト
変換機能
ProgressデータベースをOracle/PostgreSQL/MySQLデータベースへ変換

- Progressのテーブル/ビュー/シーケンスをOracle/PostgreSQL/MySQLのテーブル/ビュー/シーケンスへ変換
例えば、
Progress 4GL:
ADD TABLE "TB_DATATYPES" AREA "Schema Area" DUMP-NAME "tb_datat" ADD FIELD "c1" OF "TB_DATATYPES" AS CHARACTER FORMAT "X(8)" INITIAL "" POSITION 2 SQL-WIDTH 16 ORDER 10 ADD FIELD "c4" OF "TB_DATATYPES" AS INTEGER FORMAT "->,>>>,>>9" INITIAL "0" POSITION 5 SQL-WIDTH 4 ORDER 20 ADD FIELD "c5" OF "TB_DATATYPES" AS logical FORMAT "yes/no" INITIAL "no" POSITION 6 SQL-WIDTH 1 ORDER 30 . PSC cpstream=ISO8859-1 . 0000000976
Oracle:
CREATE TABLE TB_DATATYPES ( c1 CHAR(16), c4 NUMBER(10,0), c5 NUMBER(1,0) );
- Progress 4GLのトリガをOracle/PostgreSQL/MySQLのトリガ/プロシージャまたはJavaのクラスへ変換:
Progress 4GL:
TRIGGER PROCEDURE FOR DELETE OF gsinvhd. FIND distribution WHERE distribution.company = gsinvhd.company NO-LOCK NO-ERROR.
Oracle:
CREATE OR REPLACE TRIGGER SWT_Delete_gsinvhd AFTER DELETE ON gsinvhd DECLARE v_distribution_company VARCHAR2(255); BEGIN SELECT company INTO v_distribution_company FROM distribution WHERE (distribution.company = gsinvhd.company) AND ROWNUM <=1; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END;
詳細は以下をご覧ください:
ProgressからOracleへのデータベース移行
ProgressからPostgreSQLへのデータベース移行
ProgressからMySQLへのデータベース移行
Progress 4GLコードをJavaコードへ変換

- Progress 4GLのプロシージャファイル (*.p)をクラスのJavaパッケージへ変換
Progress 4GL:
DEF VAR w_ail AS CHAR NO-UNDO. PROCEDURE act_InitValues. IF w_ ail EQ "ac21" OR w_ ail EQ "first" THEN DO: ASSIGN w_ ail ="first". END. ELSE IF w_ ail EQ "ac50" THEN DO: ASSIGN w_ ail ="second". END. ELSE DO: ASSIGN w_ ail ="third" END. END PROCEDURE.
Java:
package ispirer; public class If_statement { private String w_ ail = null; public void act_InitValues() { if((w_ ail.equals("ac21")) ||( w_ ail.equals("first"))) { w_ ail = "first"; } else if(w_ ail.equals("ac50")) { w_ ail = "second"; } else { w_ ail = "third"; } } }
- Progress 4GLのインクルードファイル(*.i)をクラスのJavaパッケージへ変換
Progress 4GL:
FUNCTION days-in-MONTH RETURNS INTEGER ( INPUT pmonth AS INTEGER, INPUT pyear AS INTEGER ) : DEFINE VARIABLE idays AS INTEGER EXTENT 12 INITIAL [31,28,31,30,31,30,31,31,30,31,30,31]. IF pmonth NE 2 THEN DO: RETURN idays[pmonth]. END. ELSE DO: IF INTEGER(pyear / 4) * 4 = pyear THEN DO: IF INTEGER(pyear / 100) * 100 = pyear THEN DO: IF INTEGER(pyear / 400) * 400 = pyear THEN RETURN 29. ELSE RETURN 28. END. ELSE RETURN 29. END. ELSE RETURN 28. END. END FUNCTION.
Java:
package ispirer; public class Daymonth { public final int Days_in_month(int pmonth, int pyear) { int[] idays = new int[] {31,28,31,30,31,30,31,31,30,31,30,31}; if (pmonth != 2) { return idays[pmonth - 1]; } else { if ((int)(pyear / 4) * 4 == pyear) { if ((int)(pyear / 100) * 100 == pyear) { if ((int)(pyear / 400) * 400 == pyear) { return 29; } else { return 28; } } else { return 29; } } else { return 28; } } } }
- Progress 4GLのウィンドウプロシージャ ファイル (*.w) をJavaのUI Frameworks (Swing, SWT, Java FX等)へ変換
- Progress ABLレポートをJava Jasperレポートまたはクリスタルレポートへ変換
- データアクセスをJavaデータベースアクセスフレームワーク (JDBC, Hibernate, Torque等)へ変換
Ispirer MnMTKはデータベーステーブルに従ってHibernate, Torque XMLマップを自動的に生成することができます。
例えば、Progress 4GL:
DEF BUFFER buf_LogOverview FOR test_table. PROCEDURE test_proc. FIND FIRST buf_LogOverview NO-LOCK WHERE buf_LogOverview.col1 EQ "1" AND buf_LogOverview.col2 EQ 2 NO-ERROR. END PROCEDURE. CREATE TABLE test_table ( col1 VARCHAR, col2 INTEGER PRIMARY KEY );
Java:
package buffer_migration; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import util.HibernateUtil; public class Find_stmt { private Test_table buf_LogOverview; public void test_proc() { Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); buf_LogOverview =((List< Test_table >) session.createQuery("from Test_table WHERE col1 = '1' "+ " AND col2 = 2").list()).get(0); session.getTransaction().commit(); } } import java.util.Set; import java.util.HashSet; public class Test_table { private String col1; private Integer col2; private Set test_tables = new HashSet(); public Test_table() { } public void setCol1(String col1) { this.col1=col1; } public String getCol1() { return col1; } public void setCol2(Integer col2) { this.col2=col2; } public Integer getCol2() { return col2; } } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Test_table" table="test_table"> <property column="col1" name="col1" type="java.lang.String"/> <id column="col2" name="col2" type="java.lang.Integer"/> </class> </hibernate-mapping>
詳細はお問い合わせください。
|