Blanco2g
概要
- Blanco2g はソースコードを入力してソースコードを自動生成出力する Java アプリケーション開発用フレームワークです。
- Blanco2g はオープンソース・ライセンスのもとで提供されています。
- Java ソースコード上のアノテーション記述をきっかけに、さまざまなソースコードを自動生成することができ、ソフトウェアの開発生産性と保守性を向上することができます。しかもフレームワーク導入の副作用はとても少ないです。
Blanco2g リファレンス
Blanco2g のリファレンスには以下のものがあります。
Blanco2g ダウンロード
| 種類 | 説明 |
| Blanco2g ディストリビューション (blanco2gDistribution) | Blanco2g 一式を入手する最も容易な方法は Blanco2g ディストリビューションを入手する方法です。 |
| Blanco2g ソースコード | 現在開発中の最新ソースコードをダウンロード (SVN によるチェックアウト) することができます。 もし Eclipse 3.6 以降が手元にあれば、SVN チェックアウトをおこなったプロジェクトから、Ant タスクを用いてすぐに自動生成を実際に動作させることができます。 |
名称の由来
- Blanco2g という名称は、blanco Framework の第 2 世代にあたるフレームワークであることを示しています。
位置づけ
- 第 1 世代の blanco Framework (Blanco1g) は、Excel ブックを入力してソースコードを生成するタイプのソースコード自動生成フレームワークです。主にウォーターフォール開発モデルに適しています。
- 第 2 世代の blanco Framework (Blanco2g) は、ソースコードを入力してソースコードを生成するタイプのソースコード自動生成フレームワークです。主にアジャイル開発モデルに向いています。
- Blanco1g と Blanco2g は、おのおの独立して利用することもできますし、組み合わせて利用することもできます。そして、組み合わせての利用が最も効果が高いものと考えられます。
- Blanco1g や Blanco2g は、それら単独で利用するだけではなく、Spring Framework などの他のフレームワークと組み合わせて利用することもできます。
Blanco2g をはじめてみよう
おおまかな流れ
- 基本的なソースコード自動生成のながれを説明するために、「@BlancoStrutsLogic」と「@BlancoInject」という 2 つの Blanco2g アノテーションを利用した Apache Struts における利用を想定したシンプルなサンプルを示します。
- この例では、AbstractSampleLogic.java という Java ソースコードを入力して、SampleLogic.java, SampleAction.java という 2 つの Java ソースコードおよび XML ファイルを出力するサンプルです。★Blanco2g は、基本的に AbstractXXXXXXXX.java というファイル名のクラスから XXXXXXXX.java を自動生成します。
package sample.struts;
import java.sql.Connection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionMapping;
import blanco.fw.BlancoInject;
import blanco.struts.BlancoStrutsForward;
import blanco.struts.BlancoStrutsLogic;
/**
* サンプル・ロジック。
*/
@BlancoStrutsLogic(path = "/run")
public abstract class AbstractSampleLogic {
/**
* 正常系の次画面。
*/
@BlancoStrutsForward(path = "/next.jsp")
private static final String FORWARD_SUCCESS = "success";
/**
* 異常系画面。
*/
@BlancoStrutsForward(path = "/error.jsp")
private static final String FORWARD_ERROR = "error";
/**
* ビジネスロジック
*
* @param mapping
* @param form
* @param request
* @param response
* @param conn
* メソッド・パラメータによるデータベース接続インジェクション。
* このメソッドの呼び出し直前にデータベース・トランザクションが開始され
* 、このメソッドの終了直後にロールバックとトランザクション終了が実施されます。
* @return
* @throws Exception
*/
public String execute(final ActionMapping mapping, final SampleForm form, final HttpServletRequest request,
final HttpServletResponse response, @BlancoInject final Connection conn) throws Exception {
// ここに実際のビジネスロジックを記述します。
if (true) {
return FORWARD_SUCCESS;
} else {
return FORWARD_ERROR;
}
}
}
出力ソースコード: SampleLogic.java (Output) ★以下のソースコードは Blanco2g によって自動生成されたものです。
/*
* このクラスは 'AbstractSampleLogic' の具象クラスとして blanco Framework によって自動生成されました。
*/
package sample.struts;
import java.sql.Connection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionMapping;
import blanco.fw.BlancoGeneratedBy;
/**
* サンプル・ロジック。
*/
@BlancoGeneratedBy(name = "Blanco2g")
public class SampleLogic extends AbstractSampleLogic {
/**
* ビジネスロジック
*
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public String execute(ActionMapping mapping, SampleForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
java.lang.String autoValMethodResult;
final Connection conn = blanco.db.BlancoDbConnectionUtil.getConnection();
try {
autoValMethodResult = super.execute(mapping, form, request, response, conn);
} finally {
blanco.db.BlancoDbConnectionUtil.releaseConnection(conn);
}
return autoValMethodResult;
}
}
出力ソースコード: SampleAction.java (Output) ★以下のソースコードは Blanco2g によって自動生成されたものです。
/*
* このクラスは 'AbstractSampleLogic' の具象クラスとして blanco Framework によって自動生成されました。
*/
package sample.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import blanco.fw.BlancoGeneratedBy;
/**
* サンプル・ロジック。
*/
@BlancoGeneratedBy(name = "Blanco2g")
public class SampleAction extends Action {
/**
* アクション
*
* @param mapping action mapping.
* @param form action form.
* @param request request.
* @param response response.
* @return 戻り値。
* @throws Exception 例外
*/
@Override
public ActionForward execute(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
final SampleLogic logic = new SampleLogic();
return mapping.findForward(logic.execute(mapping, (sample.struts.SampleForm) form, request, response));
}
}
出力ファイル: struts-config-action-blanco.xml (Output) ★以下の内容は Blanco2g によって自動生成されたものです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<action-mappings>
<!-- サンプル・ロジック。 -->
<action type="sample.struts.SampleAction" name="SampleForm" path="/run">
<!-- 正常系の次画面。 -->
<forward name="success" path="/next.jsp"/>
<!-- 異常系画面。 -->
<forward name="error" path="/error.jsp"/>
</action>
</action-mappings>
</struts-config>
おおまかな流れ (その 2)
- 上述したサンプルは Apache Struts での利用を想定したものですが、Blanco2g は、Struts 以外のさまざまなジャンルにも当然利用することができます。たとえば、Java EE 6 の JavaServer Facelets において、大変便利に利用することができます。
- Blanco2g で最も効果が高いのは、上記でも例としてあげている @BlancoInject アノテーションです。
特徴
- 自動生成したソースコードの実行時には、Spring のような特殊なランタイムは必要ありません。
- 基本的に Java ソースコードで完結して作業できます。また XML ファイルのたぐいを閲覧したり編集したりする必要はありません。
- 少ないコンピュータ・リソースで動作するフレームワークであるため、クラウドコンピューティング環境や組み込み環境での動作にも適合しやすいです。
ライセンス
- Blanco2g は原則として GNU LGPL と EPL のいずれか一方、あるいは両方のデュアル・ライセンスというライセンスを採用しています。
- ごく一部のソースコードについて、GNU LGPL, EPL, Apache ライセンスのトリプル・ライセンスを採用しているものがあります。
- もし詳しく知りたい場合には、おのおののソースコードのファイルヘッダーを参照することによりライセンスを確認することができます。
- なお、Blanco2g が自動生成するソースコードについては、Blanco2g のライセンスとは関わりなく、その入力となったソースコードのライセンスをそのまま引き継ぐこととなります。
同梱物
- Blanco2g は、動作のために EPL のもとに公開されているライブラリを必要とします。
- Blanco2g が生成したソースコードは 基本的にそれ単独で動作するようになっています。
技術的な特徴
- 技術的には、いわば static AOP (SAOP) という構造を利用者に提供します。
- デザインパターンとして「Reversed Generation Gap Pattern」を採用しています。
- Blanco2g は利用者により容易に拡張することができます。
制限・制約
- Blanco2g のアノテーションは、クラス・コンストラクターには対応していません。
Wiki URL