Archive

Archive for March, 2009

Menambahkan service bisnis ADF-BC

March 16, 2009 Leave a comment

Kawan, beberapa waktu yang lalu, aku mendapat “wejangan” dari seniorku tentang MVC di Oracle Application Development Framework (ADF). Karena aku orangnya perlupa, aku tuliskan di blog ini, syukur2 bisa bermanfaat bagi orang lain;).

Oracle ADF itu dibagi tiga bagian; ADF Business Component, ADF Binding Container, ADF Faces.

  1. ADF Business Component (ADF-BC), adalah layer model. Layer model berhubungan dengan bisnis; EntityObject (EO) persisten data object dari database (table), ViewObject (VO) representasi dari data akses atau singkat cerita VO ini adalah query. EO dan VO bekerja sama untuk melakukan operasi baca-tulis. Dan yang terakhir adalah ApplicationModule (AM) yang menampung VO, EO. Melalui AM inilah kita dapat mengakses VO, EO ataupun service-service yang berkaitan dengan level bisnis.
  2. ADF Binding Container, bisa dikatakan bekerja di layer controller, menga-abstraksikan layer model yang digunakan. Sehingga controller (backing bean, pageDef) dapat dengan bebas menggunakan layer model tanpa peduli framework model apa yang digunakan.
  3. ADF Faces, berada di layer view. ADF Faces adalah extend/penambahan dari JavaServer Faces.

Nah sekarang sudah agak keliatan “petanya”, jangan sekali-kali code bisnis ditaruh di controller. Kalau mau menambahkan/menyediakan proses bisnis, taruhlah pada tempatnya, di level model (AM). Sebenarnya AM (dan AMImpl) berisi dengan daftar (getter) service-service dan ViewObject yang dimilikinya, jadi sebaiknya code bisnis dipisah dari AM agar AM tidak kotor (dengan bloat code dari bisnis process).

Buat satu class yang nantinya class tersebut berisi code bisnis yang akan kita tambahkan (selanjutnya class ini kita sebut service bisnis). Relasi antara class AMImpl dengan class service bisnis adalah “HAS-A”.
Sebagai contoh, kita memiliki ParameterAMImpl sebagai class AMImpl dan CopyAgreement sebagai class bisnis. Pada class AM (ParameterAMImpl):

/**
 * ParameterAMImpl.java
 */
public class ParameterAMImpl extends ApplicationModuleImpl implements ParameterAM {
    private CopyAgreement copyAgreement;

    public ParameterAMImpl() {
        copyAgreement = new CopyAgreement(this);
    }

    -----cutted-text---8<
    public void copyAgreement(Number sourceAgrId, Number destAgrId,
                              int type, Long tenantId) {
        copyAgreement.doCopyAgreement(sourceAgrId, destAgrId, type, tenantId);
    }
    -----cutted-text---8<
}

Pada class bisnis (CopyAgreement.java):

/**
 * CopyAgreement.java
 */
 public class CopyAgreement {
    private ParameterAMImpl parameterAMImpl;

    public CopyAgreement(ParameterAMImpl parameterAMImpl) {
        this.parameterAMImpl = parameterAMImpl;
    }

    public void doCopyAgreement(Number sourceAgrId, Number destAgrId, int type,
                              Long tenantId) {
        switch (type) {
        case GlobalConstants.COPY_AGREEMENT.DEALER_MAP:
            copyDealerMap(sourceAgrId, destAgrId, tenantId);
            break;
        -----cutted-text---8<
        }
    }
-----cutted-text---8<
}

Nah, untuk menggunakan method action bisnis yang sudah didefinisikan di AM tersebut, si-client (controller) tinggal mendapatkan dari pageDefs, tidak lupa parameter-parameternya juga di-set. Sebagai contoh:

    public void returnCopyAgreement(ReturnEvent event) {
        Number sourceAgreementId = (Number)event.getReturnValue();
        if (sourceAgreementId == null)
            return;

        Long tmpDestAgrId = Long.parseLong(JSFUtil.getProcessObj("AgreementId").toString());
        Number destAgreementId = new Number(tmpDestAgrId);

        OperationBinding opBind = getBindings().getOperationBinding("copyAgreement");
        opBind.getParamsMap().put("sourceAgrId", sourceAgreementId);
        opBind.getParamsMap().put("destAgrId", destAgreementId);
        opBind.getParamsMap().put("type", GlobalConstants.COPY_AGREEMENT.UPLOAD_FILES);
        opBind.getParamsMap().put("tenantId", CommonUtils.getTenantId());
        opBind.execute();
        -----cutted-text---8<
    }

Sekian kawan, semoga bermanfaat. Kritik dan sarannya amat dinantikan. Merdeka !!!.

Advertisements
Categories: NyanyianKode