EJB 3.0 programming

Project : SimpleEJB

 persistence.xml





org.hibernate.ejb.HibernatePersistence
java:/simpleDS

com.mdb.simple.entity.SimpleEntity









mysql.ds



aiaxmainDS
jdbc:mysql://127.0.0.1:3306/aiaxdbase
com.mysql.jdbc.Driver
root
pass

utf8
utf8_general_ci
true

org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter

mySQL



SimpleSettings.java  /* энэ жишээнд шаардлагатай байгаа зарит нэг тогтмолууд */

package com.mdb.simple.settings;

/**
 * @author Byambasuren.MD
 */

public class SimpleSettings {

    public static String SAVE_PERSIST = "PERSIST";

    public static String SAVE_MERGE = "MERGE";

    public static String SAVE_REMOVE = "REMOVE";

    public static String SAVE_REFRESH = "REFRESH";

    public static String SAVE_NONE = "NONE";

    public static Integer PAGER_OFFSET = 0;

    public static Integer PAGER_LIMIT = 20;

    public static String PAGER_ACTION_NONE = "none";

    public static String PAGER_ACTION_FIRST = "first";

    public static String PAGER_ACTION_PREVIOS = "previos";

    public static String PAGER_ACTION_NEXT = "next";

    public static String PAGER_ACTION_LAST = "last";

    public static String RESULTS_VIEW_GRID = "GRID";

    public static String RESULTS_VIEW_LIST = "LIST";

}

SimpleCacher.java  /* зарим нэг бичлэгүүдийг байнга qurey - дээд байхгүйн тулд санах ойд байршуулбал performance - д сайн юм уу л гэж, заавал датабээс байх шаардлагагүй XML  ч байсан болно, бие кодыг нь юу cache лахаасаа хамааруулаад өөрчилөөрэй */

package com.mdb.simple.cache;

/**
 * @author Byambasuren.MD
 */

public class SimpleCacher {

    private static SimpleCacher instance;

    public static void Instance() {
        instance = new SimpleCacher();
    }

    public static SimpleCacher getInstance() {
        return instance != null ? instance : (instance = new SimpleCacher());
    }

}

PagerDTO.java  /* ViewHelper. энэ паттерн нь ejb 3.0 болон JSF  framework - д зохимжгүй. баазаас авах бичлэгүүдийг хуудаслах зорилготой. Шууд jsf дээрээс дүрэмүүдийг нь дуудаад дуудаад ... */

package com.mdb.simple.dto;

import com.mdb.simple.settings.SimpleSettings;

/**
 * @author Byambasuren.MD
 */

public class PagerDTO {

    protected Integer offset;

    protected Integer limit;

    private Integer currPage, pageSize, resultSize = 0;

    private String actionPage;

    private String ordr;

    private boolean sfirst = false, sprevios = false, snext = false, slast = false;

    public PagerDTO() {
        super();

        this.actionPage = SimpleSettings.PAGER_ACTION_NONE;
        this.currPage = 1;
        this.pageSize = 0;
    }

    public PagerDTO(Integer offset, Integer limit) {
        this.offset = offset;
        this.limit = limit;

        this.actionPage = SimpleSettings.PAGER_ACTION_NONE;
        this.currPage = 1;
        this.pageSize = 0;
    }

    /* actions */

    public void dosetResultSize(Integer size) {
        this.resultSize = size;
        this.pageSize = this.resultSize / this.getLimit();
        this.pageSize = this.pageSize + ((this.resultSize % this.getLimit()) > 0 ? 1 : 0);
        this.first();
    }

    public void dosetPageAction() {
        if (this.actionPage.equals(SimpleSettings.PAGER_ACTION_FIRST)) {
            this.first();
        } else if (this.actionPage.equals(SimpleSettings.PAGER_ACTION_PREVIOS)) {
            this.previos();
        } else if (this.actionPage.equals(SimpleSettings.PAGER_ACTION_NEXT)) {
            this.next();
        } else if (this.actionPage.equals(SimpleSettings.PAGER_ACTION_LAST)) {
            this.last();
        }
    }

    public void next() {
        this.currPage = this.currPage + 1;
        if (this.currPage == this.pageSize) {
            this.last();
            return;
        }
        this.sfirst = true;
        this.sprevios = true;

        this.setOffset((this.currPage - 1) * this.limit);
    }

    public void previos() {
        this.currPage = this.currPage - 1;
        if (this.currPage == 1) {
            this.first();
            return;
        }
        this.snext = true;
        this.slast = true;

        this.setOffset((this.currPage - 1) * this.limit);
    }

    public void first() {
        this.currPage = 1;
        this.sfirst = false;
        this.sprevios = false;
        this.snext = false;
        this.slast = false;

        if (this.pageSize > 1) {
            this.snext = true;
            this.slast = true;
        }

        this.setOffset((this.currPage - 1) * this.limit);
    }

    public void last() {
        this.currPage = this.pageSize;
        this.sfirst = false;
        this.sprevios = false;
        this.snext = false;
        this.slast = false;

        if (this.pageSize > 1) {
            this.sfirst = true;
            this.sprevios = true;
        }

        this.setOffset((this.currPage - 1) * this.limit);
    }

    /*  */

    public boolean getIsResults() {
        return this.resultSize > 0 ? true : false;
    }

    /* getters setters */

    public String getActionPage() {
        return actionPage;
    }

    public void setActionPage(String actionPage) {
        this.actionPage = actionPage;
    }

    public Integer getCurrPage() {
        return currPage;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public String getOrdr() {
        return ordr;
    }

    public void setOrdr(String ordr) {
        this.ordr = ordr;
    }

    public boolean isSfirst() {
        return sfirst;
    }

    public boolean isSprevios() {
        return sprevios;
    }

    public boolean isSnext() {
        return snext;
    }

    public boolean isSlast() {
        return slast;
    }

    public Integer getLimit() {
        return limit;
    }

    public void setLimit(Integer limit) {
        this.limit = limit;
    }

    public Integer getOffset() {
        return offset;
    }

    public void setOffset(Integer offset) {
        this.offset = offset;
    }
}

SimpleEntity.java  /* Entity bean. Entity bean - аа Value Object  болгож ашиглах гэж байгаа бол Entity bean дээр олон юм бичих хэрэггүй. Уул нь @NamedQuery ашиглавал performance  - д сайн гэдэг юм байна лээ. Миний хувьд бодож байгаад VO шинээр үүсгэхгүйгээр шийдсэн */


package com.mdb.simple.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * @author Byambasuren.MD
 */

@Entity
@Table(name = "simple_simple")
public class SimpleEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(length = 200)
    private String name;

    @Column(length = 2000)
    private String value;

    private Date regDate;

    public SimpleEntity() {
        this.regDate = new Date();
    }

    /* managed getters setters */

    public String getMDate() {
        /* code */
        return "";
    }

    /* getters setters */

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public Date getRegDate() {
        return regDate;
    }

    public void setRegDate(Date regDate) {
        this.regDate = regDate;
    }

}

SimpleRService.java

package com.mdb.simple.business.service;

import java.util.Collection;

import javax.ejb.Local;

import com.mdb.simple.dto.PagerDTO;
import com.mdb.simple.entity.SimpleEntity;

/**
 * @author Byambasuren.MD
 */

@Local
public interface SimpleRService {

    public final static String JNDI = "SimpleRService";

    public Collection getSimples(PagerDTO pager);

    public SimpleEntity getSimple(Long id);

}

SimpleService.java 

/* интерфейс класс. би дүр эсвэл царай ч гэж нэрлэдэг. Бизнэс үйлдлүүдийн дүр(царай) */  миний хувьд үйлдүүдийг read only болон writable гэж 2 ангилаад 2 өөр session bean - дээр бичдэг болсон. яагаад вэ гэвэл зөндөө шалтгаан байгаа. хамгийн гол нь юу вэ гэвэл performance болон найдвартай ажиллагааг сайжруулахын тулд. ReadOnly үйлдлүүдийг CMP. Writable үйлдлүүдийг BMP. Хүмүүс гайхаж магадгүй BMP ашиглачаад юуных нь найдвартай гэж. гэхдээ BMP алдаа гарах магадлал өндөр ч тэр нь делелопероос л хамаарна. хийж чадвал гүйцэтгэл маш сайн. Мөн readonly үйлдлүүдийг EJB Container - аас гадна програмчилахыг оролдов. энэ жишээн дээр ч гэсэн алдаа байгаа. session.settimeout() - ийг оруулаагүй байна.

 Performance - ийн талаар http://java.sun.com/developer/technicalArticles/ebeans/ejb_30/ - аас сайн үзнэ үү



package com.mdb.simple.business.service;

import javax.ejb.Local;

import com.mdb.simple.business.exception.BusinessException;
import com.mdb.simple.entity.SimpleEntity;

/**
 * @author Byambasuren.MD
 */

@Local
public interface SimpleService {

    public final static String JNDI = "SimpleService";

    public SimpleEntity saveMember(SimpleEntity member, String smode) throws BusinessException;

}

SimpleRServiceImpl.java

package com.mdb.simple.business.service.impl;

import java.util.Collection;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;

import com.mdb.simple.business.service.SimpleRService;
import com.mdb.simple.business.service.SimpleService;
import com.mdb.simple.dto.PagerDTO;
import com.mdb.simple.entity.SimpleEntity;
import com.mdb.simple.util.log.Logger;

/**
 * @author Byambasuren.MD
 */

@Stateless(name = SimpleRService.JNDI)
public class SimpleRServiceImpl implements SimpleRService {

    @PersistenceUnit(unitName = "simplePU")
    private EntityManagerFactory emf;

    @PostConstruct
    public void init() {
        Logger.log("[MD][" + SimpleService.JNDI + "][INITIALIZING]");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("[MD][" + SimpleService.JNDI + "][DESTROYING]");
    }

    @SuppressWarnings("unchecked")
    public Collection getSimples(PagerDTO pager) {
        EntityManager em = this.emf.createEntityManager();
        Query qr = em.createQuery("FROM SimpleEntity AS A ORDER BY " + (pager != null ? pager.getOrdr() : "regDate"));

        if (pager != null) {
            qr.setFirstResult(pager.getOffset());
            qr.setMaxResults(pager.getLimit());
        }

        Collection results = qr.getResultList();
        em.close();

        return results;
    }

    public SimpleEntity getSimple(Long id) {
        EntityManager em = this.emf.createEntityManager();

        SimpleEntity result = em.find(SimpleEntity.class, id);
        em.close();

        return result;
    }
}

SimpleServiceImpl .java

package com.mdb.simple.business.service.impl;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.transaction.UserTransaction;

import com.mdb.simple.business.exception.BusinessException;
import com.mdb.simple.business.service.SimpleService;
import com.mdb.simple.entity.SimpleEntity;
import com.mdb.simple.settings.SimpleSettings;
import com.mdb.simple.util.log.Logger;

/**
 * @author Byambasuren.MD
 */

@Stateless(name = SimpleService.JNDI)
@TransactionManagement(TransactionManagementType.BEAN)
public class SimpleServiceImpl implements SimpleService {

    @PersistenceUnit(unitName = "simplePU")
    private EntityManagerFactory emf;

    @Resource
    UserTransaction userTx;

    @PostConstruct
    public void init() {
        Logger.log("[MD][" + SimpleService.JNDI + "][INITIALIZING]");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("[MD][" + SimpleService.JNDI + "][DESTROYING]");
    }

    public SimpleEntity saveMember(SimpleEntity member, String smode) throws BusinessException {
        EntityManager em = emf.createEntityManager();

        try {
            this.userTx.begin();
            em.joinTransaction();

            if (smode.equals(SimpleSettings.SAVE_PERSIST)) {
                //em.merge(object);                                         /   * ЭНД ХЭД ХЭДЭН ДАРААЛСАН ҮЙЛДЛҮҮД БАЙЖ БОЛНО */
                em.persist(member);
            } else if (smode.equals(SimpleSettings.SAVE_MERGE))
                em.merge(member);
            else if (smode.equals(SimpleSettings.SAVE_REMOVE))
                em.remove(member);
            else if (smode.equals(SimpleSettings.SAVE_REFRESH))
                em.refresh(member);

            this.userTx.commit();
        } catch (Exception exc) {
            Logger.log("[AIAX][" + SimpleService.JNDI + "][ERROR][UNSUCCESSFUL. " + smode + " MEMBER]");

            try {
                this.userTx.rollback();
            } catch (Exception e) {
                Logger.log("[MD][" + SimpleService.JNDI + "][ERROR][UNSUCCESSFUL. ROLLBACK USERTRANSACTION]");
            }

            throw new BusinessException(exc.getMessage());
        } finally {
            em.close();
        }

        return member;
    }
}

/* SERVICELOCATOR - ийн талаар далайгийн блогоос сайн ойлгосон байх.  */

ServiceLocator.java

package com.mdb.simple.util.servicelocator;

import java.util.Hashtable;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import com.mdb.simple.util.servicelocator.exception.ServiceLocatorException;

/**
 * @author Byambasuren.M
 */

public class ServiceLocator {

    private static ServiceLocator serviceLocator = new ServiceLocator();

    private Hashtable cache;

    private InitialContext context;

    private ServiceLocator() {
        try {
            cache = new Hashtable();
            context = new InitialContext();
        } catch (Exception ex) {

            System.out.println("Exception in the constructor of ServiceLocator " + "class : " + ex.toString());
        }
    }

    public static ServiceLocator getInstance() {
        return serviceLocator;
    }

    public Object getService(String jndiName) throws ServiceLocatorException {
        try {

            if (!cache.containsKey(jndiName)) {
                cache.put(jndiName, context.lookup(jndiName));
            }
        } catch (NamingException ex) {
            ex.printStackTrace();
            throw new ServiceLocatorException("Exception thrown from getService " + "method of ServiceLocator class : " + ex.getMessage());
        } catch (SecurityException ex) {
            ex.printStackTrace();
            throw new ServiceLocatorException("Exception thrown from from getService " + "method of ServiceLocator class : " + ex.getMessage());
        }
        return cache.get(jndiName);
    }

    public DataSource getDataSource(String dataSourceName) throws ServiceLocatorException {
        DataSource dataSource = null;
        try {
            dataSource = (DataSource) context.lookup(dataSourceName);
        } catch (NamingException nex) {
            throw new ServiceLocatorException(nex);
        } catch (Exception ex) {
            throw new ServiceLocatorException(ex);
        }
        return dataSource;
    }
}

илүү чанартай дэлгэрэнгүй сайн жишээ олж үзеэ гэвэл PETSTOREDEMO гээд гүүглэ - ээс хайвал. sun - ийн блупринтийн жишээ олдоно.

try {

SimpleEntity simple = new SimpleEntity();

simple.setName("hello");

simple.setValue("world");

SimpleService service = (SimpleService)ServiceLocator.getInstance().getService(SimpleService.JNDI));

service.saveSimple(simple, SimpleSettings.SAVE_PERSIST);


} catch (Exception ex) {

    System.out.println("Unknown Exception"); 

}


try {

SimpleRService rservice = (SimpleRService)ServiceLocator.getInstance().getService(SimpleRService.JNDI));

ArrayList simples =  rservice.getSimples(new PagerDTO(0, 10));

} catch (Exception ex) {

    System.out.println("Unknown Exception");

}


3 сэтгэгдэл:

null
Byambaa (зочин)

Yamar muuhai zambaraagui bolchihvoo. daraa orj tsegtstei bolgohoos.

nergui (зочин)

chi yum bolgon deer l ooriinhoo neriig zoochhiin

SDK (зочин)

Er oilgosongui. Yum bolgon deer neree zoochih yum gedeg chini .....

Сэтгэгдэл үлдээх



(нийтэд харагдахгүй)

(оруулах албагүй)
(HTML синтакс зөвшөөрөгдөөгүй)


(Зурган дээрх тоог оруулна уу)


 

Design in CSS by TemplateWorld and sponsored by SmashingMagazine
Blogger Template created by Deluxe Templates