Thursday, May 21, 2015

Java EE эхлэл (Section 2)

Ажилтны бүртгэл хийх, тайлан гаргах жижигхэн жишээ аппликешнээ үргэлжлүүлье. model controller хэсгүүдээ тохируулсан тул одоо view хэсгийг хийнэ. Хэрэглэгчтэй харилцах хуудсууд нь JSF буюу xhtml өргөтгөлтэй байна. Мөн jsp байж болно. Онцын ялгаа байдаггүй ч сүүлийн хувилбар нь xhtml болсон.
Эхлээд jsf д зориулсан Managed Bean классыг үүсгэж өгнө. war -> New ->JSF Managed Bean


Managed Bean дараах байдалтай байна

 
package lu.ajiltan.managed;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import lu.ajiltan.beans.AjiltanFacadeLocal;
import lu.ajiltan.beans.AjiltniibolovsrolFacadeLocal;
import lu.ajiltan.beans.UlsFacadeLocal;
import lu.ajiltan.models.Ajiltan;
import lu.ajiltan.models.Ajiltniibolovsrol;
import lu.ajiltan.models.Uls;

/**
 *
 * @author Bilgee
 */
@ManagedBean
@ViewScoped
public class AjiltanManage implements Serializable{

    //enterprise java bean uud local interface eer holbogdono
    
    @EJB
    AjiltanFacadeLocal ajiltanfacade;
    
    @EJB
    AjiltniibolovsrolFacadeLocal ajiltanbolovsrolfacade;
    
    @EJB
    UlsFacadeLocal ulsfacade;
    
    //olon bolovsroliin medeelel oruulahiin tuld list ashiglana
    List bolovsrollist = new ArrayList();
    
    //ulsuudiig select One songoltond haruulahad ashiglana
    List ulslist = new ArrayList();
    
    //ehelj ajillahad songoltond ulsuudiig haruulahad post construct annotation ashiglana
    @PostConstruct
    public void init(){
        ulslist = ulsfacade.findAll();
    }

    //html page tei holbohdoo encapsulated tul get set ashiglana
    public List getUlslist() {
        return ulslist;
    }

    public void setUlslist(List ulslist) {
        this.ulslist = ulslist;
    }

    public List getBolovsrollist() {
        return bolovsrollist;
    }

    public void setBolovsrollist(List bolovsrollist) {
        this.bolovsrollist = bolovsrollist;
    }
    
    //model toroltei huvisagchuud hadgalah bolon ynz burin zuild ashiglana
    Uls ulsuud = new Uls();
    Ajiltniibolovsrol bolovsroluud = new Ajiltniibolovsrol();
    Ajiltan ajiltan = new Ajiltan();

    public Ajiltan getAjiltan() {
        return ajiltan;
    }

    public void setAjiltan(Ajiltan ajiltan) {
        this.ajiltan = ajiltan;
    }

    public Ajiltniibolovsrol getBolovsroluud() {
        return bolovsroluud;
    }

    public void setBolovsroluud(Ajiltniibolovsrol bolovsroluud) {
        this.bolovsroluud = bolovsroluud;
    }

    public Uls getUlsuud() {
        return ulsuud;
    }

    public void setUlsuud(Uls ulsuud) {
        this.ulsuud = ulsuud;
    }
    
    //Add lists, olon ajiltnii bolovsroliig ehleed listed hiine, list populate hiih arga
    
    public String addAjiltanBolovsrol(){
        bolovsrollist.add(bolovsroluud);
        bolovsroluud = new Ajiltniibolovsrol();
        return null;
    }
    
    //Medeelliig hadgalah undsen function
    public String saveAjiltan(){
        try{
            //listed populate hiisen medeelliig Ajiltnii Bolovsrol d hadgalah
            for(Ajiltniibolovsrol bo : bolovsrollist){
                bo.setAjiltniiDugaar(ajiltan);
            }
            
            //ajiltnii medeelliig ajiltan d hadgalah
            ajiltanfacade.create(ajiltan);
            return null;
        }
        catch(Exception ex){
            return ex.toString();
        }
    }
    
    public AjiltanManage() {    
    } 
}

Харин холбогдох хэсэг буюу Facade классуудад entity manager автоматаар үүссэн байх ба бага зэрэг код бичиж entity Тэй холбоно. Үүнд жишээгээр AjiltanFacade ийг авч үзвэл дараах байдалтай байна

@Stateless
public class AjiltanFacade extends AbstractFacade implements AjiltanFacadeLocal {
    @PersistenceContext(unitName = "AjiltanBurtgel-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public AjiltanFacade() {
        super(Ajiltan.class);
    }
    
    @Override
    public Ajiltan find(Object id){
        return em.find(Ajiltan.class, id);
    }
    
    //haruulah bolon list populate hiihed ashiglagdana
    @Override
    public List findAll(){
        List returnlist = new ArrayList();
        TypedQuery query = em.createNamedQuery("Ajiltan.findAll", Ajiltan.class);
        try{
            returnlist = query.getResultList();
        }
        catch(Exception ex){
            ex.toString();
        }
        return returnlist;
    }
    //hadgalahad ashiglana
    @Override
    public void create(Ajiltan empl){
        try{
            em.persist(empl);
        }
        catch(Exception ex){
            System.out.println(ex.toString());
        }
        finally{}
    }
}

харагдах хэсэг буюу Jsf page ийн хувьд үүсгэхдээ war->New->JSF Page сонгоно. Managed bean тэй холбохдоо #{managedBean} шигтгээ ашиглана.

ajiltan.xhtml


    
        Ажилтан жишээ
    
    
        
        
                
                    
                                     
                        
                    
                    
                    
                                     
                        
                    

                
        
                  
                      
                        Сургууль нэмэх
                    

                      
                        
                    
                      
                     
                 
                
                        
                    
        
        
              
            
            

            
              
             
            

              
             
            

             
              
            
    
            
            
              
                          
                         
                        
            
            

             
            
    


Wednesday, May 20, 2015

Java EE ejb эхлэл тохиргоо (Section 1)

Java ee 7, Glassfish ашиглан Ажилтны мэдээлэл хадгалж харуулах бяцхан жишээ хийе. Өгөгдлийн санд суурилсан буюу бэлэн хийгдсэн өгөгдлийн сан дээр суурилан хөгжүүлэх эсвэл шууд өгөгдлийн сангаа үүсгэх байдлаар хийх боломж байдаг. Ихэнх хөгжүүлэлтийн загварчлалд эхлээд өгөгдлийн сангаа төлөвлөдөг тул өгөгдлийн санд суурилсан аргыг сонголоо.
Өгөгдлийн сангаараа нээлттэй эх PostgreSQL ийг сонголоо. ERD г харвал

SQL Power Architect ийг загварчлахад ашиглав


Програмыг хөгжүүлэх орчноор Netbeans ийг сонголоо, учир нь Glassfish сервертэй хамт суугддаг багцтай. Project ээ эхлүүлэхдээ Java EE хавтсан дотроос Enterprise Application гэснийг сонгоно.


Дараагийн алхам бол Project дээ нэр өгч Серверээ сонгон EJB болон WAR модулуудаа үүсгэх


Одоо өгөгдлийн сантайгаа холбох хэрэгтэй. Манай тохиолдолд Postgresql дээр үүсгэсэн байгаа сантай холбох connection хийх юм. Үүний тулд netbeans ийн Services цонхон дахь Database хэсэг дээр дарж New Connection ийг сонгоно


Driver ийг сонгох хэсгээс PostgreSQL ийг сонгоно. Ихэнх тохиолдолд цаанаасаа Postgresql суусан байдаг ба хэрвээ өөр төрлийн өгөгдлийн сан сонгох бол Driver ийг суулгах шаардлагатай. Үүний дараа Postgre тэй холбох цонх гарч ирнэ. Postgre ажиллаж байгаа эсэхээ шалгаарай. 

Дараа нь Glassfish серверээ асааж, Admin Console хэсэгт нэвтрэн Connection Pool болон JNDI г нь тохируулах хэрэгтэй. Үүнийг хэд хэдэн янзаар хийх боломжтой хамгийн найдвартай нь Admin Console дээрээс үүсгэх юм билээ.

Одоо харин өгөгдлийн сантай холбогдох давхаргыг үүсгэе. EJB хэсэгт шинэ Entity Classes from Database үүсгэхийг сонгоно.

Data source хэсэгт үүсгэсэн jndi г оруулахад бүх хүснэгтүүд орж ирэх ба ашиглах хүснэгтүүдээ сонгож оруулна. Энэ нь автоматаар өгөгдлийн сантай холбогдох entity классуудыг үүсгэх юм.


Package ийн нэрийг сонгож үүсгэх классуудын тохиргоог дараах байдалтай тохирууллаа

Ингэж үүсгэсний дараа entity package д хүснэгттэй холбогдох классууд үүссэн байх ёстой. Мөн custom query нүүдийг энэ классуудад нэмэх боломжтой.


Дараагийн EJB д нэмэх хэсэг бол Модел хэсэг юм. Facade pattern ашиглах болно. Классуудыг автоматаар үүсгэхдээ New -> Session Beans for Entity Classes г сонгоно. Дараах жишээнд Local гэсэн интерфэйсийг мөн нэмж өгөв. Энэ нь view хэсгээс зөвхөн интерфэйсээр дамжиж моделд хандах боломжтой болгож байгаа.


Энэ бүхний дараа прожект ийн бүтэц дараах байдалтай болжээ. Enterprise Bean үүд нь автоматаар үүсгэгдснийг ажигласан байх.

Одоо харин Web Application хэсэг буюу jsf хуудас болон Managed bean үүдийг дараагийн хэсэгт хийе. Их орой болсон байна.