CAFE

기존 자바강좌

[[강좌]]Weblogic Ejb 공통 호출함수 만들기 1(JNDI Handler 만들기)

작성자수리천사|작성시간04.04.13|조회수356 목록 댓글 0

Ejb를 공통으로 호출하고 캐쉬하는 라이브러리를 만들어 봤습니다.

Weblogic 기반에서 제작했으며 SessionBean만을 구현했으며 여러가지 참조 소스를 이용해서 만들었습니다.

도움이 되시길 바랍니다.

크게 화일을 보면

BaseSessionBean.java

EjbCache.java

EjbCacheHdr.java

EjbProxyHdr.java

JNDIHdr.java

로 구성되어 있습니다. 오늘 부터 하나 하나 설명할 작정입니다.

부족한게 많더라도 이해 바랍니다.

질문이나 기타 사항은 일절 받지 않습니다. 이해 바랍니다.

그럼 먼저 JNDIHdr.java를 만들어 보도록 하겠습니다.

주로 메소드위주의 JavaDoc 형태의 주석으로 설명을 대신합니다.

아래의 소스는 간단하게 말하면 EJBHome Interface를 얻어오기 위한 Class 입니다.

 

import javax.ejb.*;
import javax.naming.*;
import java.rmi.RemoteException;
import java.util.*;
import weblogic.common.*; // <== 웹로직 공통함수와 Jndi를 import 합니다.
import weblogic.jndi.*;

public class JNDIHdr {

    private static JNDIHdr m_instance = null;

    public JNDIHdr() {
    }

    public static void init() throws Exception {
        m_instance = new JNDIHdr();
    }

    /**
     * JNDIHdr Instance를 리턴
     * @return  JNDIHdr
     */
     public static JNDIHdr getInstance() {
         if( m_instance == null ) m_instance = new JNDIHdr();
         return m_instance;
     }

    /**
     * Weblogic JNDI API를 사용하여 EJBHome인터페이스를 얻는다.
     * @param  jndiName  EJB의 JNDI Alias name
     * @return      EJBHome  EJB의 홈인터페이스
     * @exception   java.lang.Exception
     */
    public static EJBHome getHome(String jndiName) throws Exception {
        return getHome(null, jndiName, null, null);
    }

    /**
     * Weblogic JNDI API를 사용하여 EJBHome인터페이스를 얻는다.
     * @param   jndiName  EJB의 JNDI Alias name
     * @param   user   사용자 ID
     * @param   passwd   사용자 비밀번호
     * @return      EJBHome  EJB의 홈인터페이스
     * @exception   java.lang.Exception
     */
    public static EJBHome getHome(String jndiName, String user, String passwd)
        throws Exception {
        return getHome(null, jndiName, user, passwd);
    }

    /**
     * Weblogic JNDI API를 사용하여 EJBHome인터페이스를 얻는다.
     * @param   hostIP   Server address (t3://localhost:7001)
     * @param   jndiName  EJB의 JNDI Alias name
     * @return      EJBHome  EJB의 홈인터페이스
     * @exception   java.lang.Exception
     */
    public static EJBHome getHome(String hostIP, String jndiName)
        throws Exception {
        return getHome(hostIP, jndiName, null, null);
    }

    /**
     * Weblogic JNDI API를 사용하여 EJBHome인터페이스를 얻는다.<BR>
     * JNDI 구조는 aaaa.bbbb형식을 기준으로 한다. LOG를 위해 필요.
     * @param   hostIP   Server address (t3://localhost:7001)
     * @param   jndiName  EJB의 JNDI Alias name
     * @param   user   사용자 ID
     * @param   passwd   사용자 비밀번호
     * @return      EJBHome  EJB의 홈인터페이스
     * @exception   java.lang.Exception
     */
    public static EJBHome getHome(String hostIP, String jndiName, String user, String passwd)
        throws Exception {
        JNDIHdr jndiMng = JNDIHdr.getInstance();
        EJBHome ejbHome = null;
        Context ctx = null;
        try {
            ctx = jndiMng.getInitialContext(hostIP, user, passwd);
            ejbHome = (EJBHome)ctx.lookup(jndiName);
        }
        catch (Exception e) {
            throw new Exception("JNDIHdr.notFoundEJB : " + jndiName);
        }
        finally {
            if (ctx != null) {
                try {
                    ctx.close(); }
                catch (NamingException e) {
                    throw new Exception("JNDIHdr.failedCloseContext");
                }
            }
        }
        return ejbHome;
    }

    /**
     * initial context를 얻는다.
     * @param   hostIP   Server address (t3://localhost:7001)
     * @param   user   사용자 ID
     * @param   passwd   사용자 비밀번호
     * @return      Context  초기화된 Context
     * @exception   Exception
     */
    public Context getInitialContext(String hostIP, String user, String passwd)
        throws Exception {
        Context ctx = null;

        try {
            Hashtable env = new Hashtable();

            env.put(Context.INITIAL_CONTEXT_FACTORY, weblogic.jndi.WLInitialContextFactory.class.getName());
            if( hostIP != null ) env.put(Context.PROVIDER_URL, hostIP);

            if( user == null ) ctx = new InitialContext(env);
            else {

                env.put(Context.SECURITY_CREDENTIALS, new T3User(user, passwd));
                ctx = new InitialContext(env);
            }
        }
        catch (AuthenticationException e) {
            throw new Exception("JNDIHdr.getInitialContext : invalidUser");
        }
        catch (CommunicationException e) {
            throw new Exception("JNDIHdr.getInitialContext : invalidAddress");
        }
        catch (Exception e) {
            e.printStackTrace();
            throw new Exception("JNDIHdr.getInitialContext : unknown");
        }
        return ctx;
 }
}

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼