달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

* EJB를 첨 사용했을 때 배치 스크립에 대하여 그리 크게 신경쓰지 않았다...간단한 stateless 세션빈으로만 작성했으니까..  그때 궁금했던 것중 하나가 다른 빈은 어떻게 참조할까였따...분명 될것 같은데....잘 안되고 그렇다고 차근차근 공부할 시간은 없었고....  생각나서 정리했따..

 첨부 파일은 배치스크립터에 대한 좀더 자세한 자료임

 

-----------------------------------------------------------------------------------------

 

배치디스크립터

 

배치디스크립터에 포함된 설정정보는

 

1. 구조정보

l 엔터프라이즈 빈 유형(Session, Entity, Message Driven Bean)

l 홈 인터페이스

l 리모트 인터페이스

l 엔터프라이즈 빈 클래스

 

구조 정보는 엔터프라이즈 빈 개발자가 설정합니다. 어플리케이션 어셈블러, 디플로이어는 구조 정보에 대한 사항 중에서 <display-name>,<ejb-name>을 변경할 수 있지만 다른 부분은 변경할 수 없습니다.

 

2. 실행정보

l 리소스 팩토리(Resource Factory)의 참조 정보

l 다른 빈의 참조 정보

l 트랜잭션 제어(Transaction Control)

 

트랜잭션 제어는 컨테이너 관리 트랜잭션(Container Managed Transaction)일 경우 각 메소드에 트랜잭션 속성(Transaction Attribute)을 설정하는 것을 말합니다. 배치 툴에서 실행 정보의 설정은 각각의 화면으로 구분됩니다. 배치 툴을 실행시켜 실행 정보 각각의 설정 화면을 지금 보는 것도 이해에 도움이 됩니다.

 

3. 보안정보

l 보안 식별 정보(Security Identity)

l 메소드 허용 정보(Method Permission)

l 리소스 등에 대한 접근 정보

 

엔터프라이즈 빈의 보안관련 정보를 설정하는 부분으로 배치 툴에서 하나의

화면으로 되어 있습니다.

 

그럼 실행 정보중

 

* 환경정보

 

: 배치 디스크립터 (Deployment Descriptor)의 이름(Name), 값(Value), 데이터 타입(Data Type)의 정보이다.

 

변경 가능한 데이터에 대한 하드 코딩을 피하기 위한 EJB에서의 환경 정보(Environment Entry)는 배치 디스크립터에 설정되어 서버 배치 시 네이밍 서비스에 등록됩니다. 엔터프라이즈 빈 개발자는 빈에서 JNDI를 이용해 네이밍 서비스에 등록된 환경 정보를 얻어 이용합니다.

 

예)

 

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

<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>

<ejb-jar> 

<display-name>LoanBean</display-name> 

<enterprise-beans>   

<session>     

<display-name>LoanEJB</display-name>     

<ejb-name>LoanEJB</ejb-name>     

<home>com.sds.ejb.ch5.LoanHome</home>     

<remote>com.sds.ejb.ch5.Loan</remote>     

<ejb-class>com.sds.ejb.ch5.LoanEJB</ejb-class>     

<session-type>Stateless</session-type>     

<transaction-type>Bean</transaction-type>     

<env-entry>       

<env-entry-name>loan/interest</env-entry-name>       

<env-entry-type>java.lang.Double</env-entry-type>       

<env-entry-value>0.067</env-entry-value>    

</env-entry>

<security-identity>       

<description></description>       

<use-caller-identity></use-caller-identity>     

</security-identity>   

</session> 

</enterprise-beans>

</ejb-jar>

 

  서비스호출과는 관계가 없이 배치스크립터에 이자율을 정의하는 부분이다. 배치 스크립터에서 loan/interest 로 기술된 부분을 찾아 정의된 타입과 값을 얻어 사용할수 있다. 

( 배치스크립터에 기술된 0.067을 리턴한다. ) 

 

u소스에서 활용

 

public double interestByYear(double amount) 

{                        

. . .                   

                                   ctx = new InitialContext();                             

                           String codedName = "java:comp/env/loan/interest";

                           Double interest = (Double)ctx.lookup(codedName);

                           if(interest==null)                                           

                                        throw new EJBException("Check the env-entry. - "+codedName);

                                        return amount*interest.doubleValue();                         

                                       

}           

OR

public double interestByMonth(double amount)            

{                         . . .

Context ctx = new InitialContext();                                   

Context envCtx = (Context)ctx.lookup("java:comp/env");                              

Double interest = (Double)envCtx.lookup("loan/interest");

if(interest==null){                                              

                                   throw new EJBException("Check the env-entry. "+

                                             "- java:comp/env/loan/interest");                               

}                                                        

return amount*interest.doubleValue()/12.0;                       

. . .

}

 

*


* EJB 리소스 팩토리

 

엔터프라이즈 빈은 서버에서 제공하는 여러 리소스 즉, JDBC 커넥션, JMS 커넥션 등을 이용하는 경우가 있습니다. 리소스 팩토리는 서버가 시작할 때 서버 네이밍 서비스에 등록되기 때문에 엔터프라이즈 빈 개발자는 JNDI 프로그래밍 방법으로 서버에서 제공하는 리소스 팩토리를 사용합니다. 이런 리소스 팩토리에 대한 참조 정보도 서버 설정에 의해 변경되는 정보들인데 리소스 팩토리 참조 정보를 엔터프라이즈 빈 클래스에 직접적으로 하드 코딩하는 것은 좋지 못한 방법이라 할 수 있습니다.

 

엔터프라이즈 빈이 리소스 팩토리를 참조한다는 정보를 배치 디스크립터에 <resource- ref> 태그를 이용해 설정함

 

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

<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>

 . . . . .

<security-identity>       

<description></description>       

<use-caller-identity></use-caller-identity>     

</security-identity>     

<resource-ref>       

<res-ref-name>jdbc/empDB</res-ref-name>       

<res-type>javax.sql.DataSource</res-type>       

<res-auth>Container</res-auth>       

<res-sharing-scope>Shareable</res-sharing-scope>     

</resource-ref>   

</session> 

</enterprise-beans> 

<assembly-descriptor>   

 . . .

 

u소스에서 활용

                  Context ctx = new InitialContext();

             ds = (DataSource)ctx.lookup("java:comp/env/jdbc/EmpDB");

             con = ds.getConnection();

 

( 배치디스크립터에 기술된 데이터소스 클래스 인스턴스를 리턴하겠지... )

 

다른 EJB 빈 참조

 

² 세션 빈은 비즈니스 로직을 처리하는 컴포넌트이고, 엔티티 빈은 비즈니스 데이터를 표현하는 컴포넌트임

² 하나의 세션 빈에서 여러 개의 엔티티 빈 컴포넌트를 참조하는 경우도 있고, 세션빈에서 다른 데이터베이스에 접근할 수도 있음

² 세션 빈에서 엔티티 빈을 참조하는 경우가 다른 빈을 참조하는 일반적인 예임

 

l 리소스 팩토리를 참조하는 경우와 동일하게 처리함 

l EJB 클라이언트 프로그램과 동일한 방법으로 해당 빈을 사용함 (엔터프라이즈 빈 개발자가 참조 빈의 JNDI 이름을 알 수가 없음)

l 빈 개발자는 임의의 이름("Coded Name")으로 참조 빈의 Home Object를 네이밍 서비스에 룩업(Lookup) 함

l 엔터프라이즈 빈이 다른 빈을 참조하고 있다는 것을 배치 디스크립터에 설정함

l 엔터프라이즈 빈은 디플로이어가 서버에 배치 시에 코딩 된 이름과 실제 JNDI 이름을

l 연결하여 설정함

 

. . .

<ejb-ref>

<ejb-ref-name>ejb/CabinHome</ejb-ref-name>

<ejb-ref-name>Entity</ejb-ref-type>

<home>com.titan.cabin.CabinHome</home>

<remote>com.titan.cabin.Cabin</remote>

</ejb-ref>

. . .

 

 

u소스에서 활용

InitialContext jndiContext = new InitialContext();

Object ref = jndiContext.lookup("java:comp/env/ejb/CabinHome") ;

CabinHome home = (CabinHome)

PortableRemoteObject.narrow(ref, CabinHome.class);

 

 

 

 

 

'JAVA > JEE' 카테고리의 다른 글

웹로직 컴파일 명령  (0) 2004.03.24
[펌] [퍼옴]J2EE와 애플리케이션개발속의 디자인 패턴  (0) 2004.03.19
[펌] FactoryMethodPattern  (0) 2004.03.19
[펌] MVC모델  (0) 2004.03.19
[펌] UML산출물간의 연관성  (0) 2004.03.19
Posted by tornado
|