Thursday, July 02, 2009

Local EJB사용법 (EJB Spec2.x :: Weblogic 7.x이상)

아래와 같이 EJB Interface와 클래스를 작성한다. 본 예제에서는 Session Bean을 사용한다.

 

Weblogic  6.1에서는 아래의 작업 없이 Local EJB jar로 묶어서 Deploy하게 되면 정상적으로 동작하나

Weblogic 7.x이상에서는 Application형태로 묶어야 Local EJB를 사용 할 수 있게 된다.

6.x에서 사용하던형태로 Deploy하여 사용하게 되면 EJB Lookup시에 NamingNotFoundException이 발생하는 것을 볼수있다.

 

본 문서는 Local EJB에만 해당하며, Remote EJB에서는 별다른 차이없이 그대로 DD작성하여 Deploy하면 된다.

 

1. EJB LocalObject Interface

 

package com.shift.gef.enterprise.bean;

 

import javax.ejb.EJBLocalObject;

 

public interface DetaultSessionLocal extends EJBLocalObject {

 

        public Object controlTxn(Object ctl) throws Exception;

       

}

 

2. EJB LocalHome Interface

package com.shift.gef.enterprise.bean;

 

import javax.ejb.CreateException;

import javax.ejb.EJBLocalHome;

 

public interface DefaultSessionLocalHome extends EJBLocalHome {

        public DetaultSessionLocal create() throws CreateException;

}

 

3. EJB Session Bean

package com.shift.gef.enterprise.bean;

 

import java.rmi.RemoteException;

 

import javax.ejb.EJBException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

 

public class DefaultSessionLocalEJB implements SessionBean {

        private SessionContext ctx;

       

        public DefaultSessionLocalEJB() throws Exception{

        }

       

        /**

         * Biz Method

         * @param ctl

         * @return

         * @throws Exception

         */

        public Object controlTxn(Object ctl) throws Exception {

                try {        

               } catch (Exception e) {

                       ctx.setRollbackOnly();

               }

               return "return from EJB";

        }

       

        // create methods

        public void ejbCreate()      {}

        public void ejbActivate() throws EJBException, RemoteException{}

 

        public void ejbPassivate() throws EJBException, RemoteException{}

 

        public void ejbRemove() throws EJBException, RemoteException {}

 

        public void setSessionContext(SessionContext ctx) throws EJBException,

                       RemoteException {

               this.ctx = ctx;

        }

}

 

 

위와 같이 EJB Class Interface를 작성 후에 해당 클래스를 컴파일 한다.

 

해당 작업을 C드라이브의 GefEAR 라는 폴더를 작성 후에 진행하는 것으로 한다.

 

EJB파일이 컴파일된 클래스는 GefEAR폴더아래 DefaultSessionLocalEJB라는 폴더에 넣어 두었다.

전체 현재 디렉토리 구조는 아래와 같다.

 

 

EJB DD(Deployment Descriptor)를 작성하도록 한다.

Command(도스창)을 열어서 GefEAR/DefaultSessionLocalEJB폴더로 이동하여 아래와 같이 입력후에

엔터를 입력하면 Deployment Descriptor가 작성된다.

 

C:> Java weblogic.marathon.ddinit.EarInit .

 

[Deployment Descriptor가 성공적으로 작성된 화면]

 

WebApplication폴더를 작성해 준다. 일반 JSP와 어플리케이션에서 사용되는 class가 위치할 폴더이다.

GefEAR폴더 아래 WebApp라는 이름으로 폴더를 작성한다.

 

폴더 작성 후에 아래와 같이 index.html을 작성하여 해당 폴더에 넣어준다.

Index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> index </TITLE>

 

</HEAD>

 

<BODY>

<h3>Hello World</h3>

</BODY>

</HTML>

 

아래와 같이 입력하여 Web Application Descriptor을 작성하여준다.

C:> Java weblogic.marathon.ddinit.WebInit .

 

[Web Application Descriptor가 성공적으로 작성된 화면]

Index.html와 같이 파일이 존재하지 않으면 WEB-INF가 만들어지지 않기 때문에 html파일 하나 정도를

작성하여 폴더에 넣어주면 된다.

 

EJB WEB Application EAR형태로 묶기 위해 GefEAR폴더 아래 META-INF폴더를 작성해 준다.

 

META-INF아래에 application.xml을 아래와 같이 작성해 준다.

 

<?xml version="1.0" encoding="UTF-8"?>

 

<!DOCTYPE application PUBLIC

 '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN'

 'http://java.sun.com/dtd/application_1_3.dtd'>

 

<application>

  <display-name>GefEAR</display-name>

  <description>Local EJB Sample</description>

  <module>

    <web>

      <web-uri>WebApp</web-uri>

      <context-root>/</context-root>

    </web>

  </module>

        <module>

               <ejb>DefaultSessionLocalEJB</ejb>

        </module>

 

</application>

 

전체적인 디렉토리 구조는 아래와 같은 형태가 된다.

 

 

Weblogic을 실행한후에 console에 접속한다.

 

Mydomain>Deployments>Applications를 선택한 후에 Deploy a new Application을 선택한다.

C:\로 이동하게 되면 GefEAR이 나오게 된다. GefEAR 앞의 Radio Button을 선택 후에, “Continue”버튼을 누르면 아래와 같이 화면이 나타나게 된다.

위와 같은 화면이 나타나게 되면, “Deploy버튼을 누르면 해당 어플리케이션이 Deploy된다.

 

 

[정상적으로 Deply된 화면]

EJB lookup 및 테스트

DefaultSessionLocalEJB폴더의 클래스를 WebApp/Web-Inf 폴더 아래에 classes폴더를 작성 후에 복사한다.

 

lookup.jsp

<%@page import="java.util.*,javax.naming.*,javax.rmi.*,com.shift.gef.enterprise.bean.*" %>

<%

                       InitialContext initialcontext;

            Properties properties = new Properties();

            properties.put("java.naming.factory.initial", "weblogic.jndi.WLInitialContextFactory");

            properties.put("java.naming.provider.url", "t3://127.0.0.1:7001");

            initialcontext = new InitialContext();

 

                       Object obj = initialcontext.lookup("DefaultSessionLocalEJB");

 

                       DetaultSessionLocal je;

                       je = ((DefaultSessionLocalHome)obj).create();

                       Object result = je.controlTxn("");

                       out.println(result);

%>

 

위와 같이 작성후에 lookup.jsp를 실행하여 아래와 같은 화면이 나오면 EJB lookup및 테스트가 끝난것이다.

 


 


 

 


 

 


 

 


 

 


 

 

No comments: