EJB 2.0: "로컬"및 "원격"인터페이스

7297 단어
EJB 2.0: "로컬"및 "원격"인터페이스
새로운 인터페이스를 사용하면 EJB에 더욱 효과적으로 접근할 수 있습니다.그것들을 어떻게 운용하는지, 그리고 언제 운용하는지 배워라.
by Rudy Dahbura
현재의 EJB 2.0 규범에는 새로운 인터페이스 기능이 있는데 이것은 원래의 EJB 1.1에 없는 것이다.이러한 새로운 기능을 활용하는 것을 배우면 EJB에 더욱 쉽고 효과적으로 접근할 수 있다.
단점이 뭘까요?너는 위치의 독립성을 희생할 것이다. 그러나 때때로 이런 대가는 가치가 있다.EJB 어플리케이션의 설계가 잘 된 어플리케이션을 작성하는 데 새로운 기능을 활용할 수 있는 시기를 파악하는 것이 중요합니다.
EJB 1.1규범은 EJB 클라이언트에게 리모트 인터페이스와 리모트 홈 인터페이스와 EJB 실례적인 상호작용을 제공하여 위치의 투명도를 얻는다.유사한 형식으로 EJB 2.0 규범은 현재 EJB 클라이언트에게 하나의 local 인터페이스와 하나의 local home 인터페이스를 제공하여 같은 JVM을 공유하는 EJB 실례와 상호작용을 한다.
EJB remote interface(javax.ejb.EJBObject)와remote home interface(javax.ejb.EJBHome)는 본질적으로 자바 RMI 인터페이스이다.원격 클라이언트는 인터페이스와 Java RMI-IIOP와 호환되는 매개 변수를 사용하여 EJBs와 통신합니다.매개 변수와 방법의 결과 값은 같은 용기에서 전달되거나 네트워크를 통해 원격 용기로 전달됩니다.
이러한 프로그래밍 모드는 EJB 클라이언트에게 EJB 구성 요소에 접근하는 방법을 제공합니다. 마치 이 구성 요소들이 로컬인 것처럼.그리고 용기는 네트워크 통신을 투명하게 처리하고 다른 기능을 수행할 수 있다.이런 방법은 굵은 입도(coarse-grained) 방법으로 호출하기에 매우 적합하다. 그 중에서 클라이언트와 EJBs 간의 클라이언트 통신은 최소한으로 유지한다.
반면 EJB local interface(javax.ejb.EJBlocal Object)와local home interface(javax.ejb.EJBlocal Home)는 자바 RMI 인터페이스가 아니라 EJB 2.0의 새로운 기능이다.로컬 클라이언트 - 다른 EJBs와 같이 동일한 JVM에서 전달되는 매개변수를 사용하여 EJBs와 직접 통신합니다.이러한 기술은 네트워크의 잠재적인 문제, 매개 변수 복제 문제, 그리고 자바 RMI-IIOP와 호환되어야 하는 문제를 없앴다.EJB 클라이언트는 더 가벼운 프로그래밍 모드를 활용하여 서비스에 접근할 수 있다는 것을 의미한다.이 방법은 세립도(fine-grained) 방법 호출에 적합하다. 왜냐하면 EJB의 실례로 같은 JVM에 있는 EJB 클라이언트는 로컬 인터페이스로 불필요한 비용을 피할 수 있기 때문이다.
로컬 클라이언트를 도입하면 또 다른 현저한 변화는 유형의 전환이다.모든 EJB 실례는 운용하기 전에 반드시 적당한 인터페이스 유형으로 전환해야 한다. 그러므로 때때로 원격 클라이언트를 운용할 때 자바 RMI-IIOP의 호환성을 확보하려면 EJB 실례를 전환하기 전에java를 운용해야 한다.rmi.PortableRemoteObject.narrow () 로 축소합니다.
그러나 로컬 클라이언트는 EJB 실례를 다음과 같은 local home interface 형식으로 직접 변환할 수 있습니다.
InitialContext initCtx = new 
InitialContext();
   ExampleLocalHome exampleLocalHome = 
(ExampleLocalHome)initCtx.lookup("java:comp/
env/ejb/Example");

local home에서 EJB 인스턴스를 만들었습니다.
ExampleLocal exampleLocal = 
exampleLocalHome.create();

아마도 EJB 2.0의 가장 재미있고 무시되기 쉬운 부분은 세션과entity beans가 원격과 로컬 인터페이스를 동시에 운용할 수 있다는 것이다. 이것은 당신에게 매우 큰 유연성을 주었다.두 가지 인터페이스를 활용하여 잠재적인 bean 클라이언트에게 최대한 자유를 주었다.
요소는session과entitybean의 배치 속성을 설명합니다.EJB 1.1과 EJB 2.0 규범은 두 가지 요소, 를 정의했다.(이전의 규범은 두 가지 요소가 필요했지만 2.0 버전에서는 선택할 수 있었다.)그것들은 각각 EJB remote home interface와 remote interface의 완전한 자격 클래스를 포함한다.
이와 유사하게 EJB 2.0 규범은 두 가지 추가 요소, 를 정의했다.예상대로 EJB local home 인터페이스와 local 인터페이스의 완전한 자격 클래스를 포함합니다.다음 코드는 이러한 새로운 요소를 어떻게 활용하는지 보여 줍니다.
<ejb-jar>
   <enterprise-beans>
      <session>
         <ejb-name>...</ejb-name>
         <local-home>...</local-home>
         <local>...</local>
         <ejb-link>...</ejb-link>
         ...
      </session>
   </enterprise-beans>
   <assembly-descriptor>
...
   </assembly-descriptor>
</ejb-jar>

로컬 클라이언트에 똑똑하게 접근하는 실례 로컬 EJB 클라이언트의 개념은 목록 1과 같은 예에서 잘 설명되었다. 그 중에서 무상태 세션 bean, 로컬 인터페이스와 로컬 홈 인터페이스를 나타냈다.인터페이스가 자바를 확장하지 않습니다.rmi.Remote.
무상태session bean의 XML 배치 설명은 아래 코드와 같이 요소의 운용을 중점적으로 강조합니다.
<?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>
   <enterprise-beans>
      <session>
         <ejb-name>Example</ejb-name>
         <local-
home>com.acmecorp.ejb.ExampleLocalHome</
local-home>
         <local>com.acmecorp.ejb.ExampleLocal</local>
         <ejb-
class>com.acmecorp.ejb.ExampleBean</
ejb-class>
         <session-
type>Stateless</session-type>
         <transaction-
type>Container</transaction-type>
      </session>
   </enterprise-beans>
   <assembly-descriptor>
      <method-permission>
         <unchecked/>
         <method>
            <ejb-name>Example</ejb-name>
            <method-name>*</method-name>
         </method>
      </method-permission>
      <container-transaction>
         <method>
            <ejb-name>Example</ejb-name>
            <method-name>*</method-name>
         </method>
         <trans-
attribute>NotSupported</trans-attribute>
      </container-transaction>
   </assembly-descriptor>
</ejb-jar>

그리고 로컬 클라이언트가 만든enterprise bean의 실례를 만들고 접근합니다.다음 코드는 bean을 먼저 축소하지 않고 어떻게 변환하는지 보여 줍니다.
<%@ page errorPage="/error.jsp" 
import="javax.naming.*, 
com.acmecorp.ejb.*" 
%>
<%

   InitialContext initCtx = new InitialContext();
   ExampleLocalHome exampleLocalHome = 
(ExampleLocalHome)initCtx.lookup("java:comp/env/
ejb/Example");
   ExampleLocal exampleLocal = 
exampleLocalHome.create();

%>
<html>
<head>
   <title>Default</title>
   <link rel="STYLESHEET" type="text/css" 
href="styles/default.css">
</head>
<body>
   <pre class="code"><%= 
exampleLocal.getMessage() %></pre>
</body>
</html>

이 예에서 로컬 클라이언트는 JSP 페이지이기 때문에 웹 구성 요소입니다.(일부 경우 웹 구성 요소가 동일한 JVM에 있을 때 EJB 2.0 로컬 구성 요소 인터페이스에 액세스합니다.)
마지막으로 웹 구성 요소에 대한 배포 설명:
<web-app>
   <!-- EJB Reference information -->
   <ejb-local-ref>
      <ejb-ref-name>ejb/Example<
/ejb-ref-name>
      <ejb-ref-type>Session<
/ejb-ref-type>
      <local-home>com.acmecorp.ejb.ExampleLocalHome<
/local-home>
      <local>com.acmecorp.ejb.ExampleLocal<
/local>
      <ejb-link>Example</ejb-link>
   </ejb-local-ref>
</web-app>

요소로 로컬 EJB 참조를 설명하십시오. 요소를 통해 EJB와의 뚜렷한 링크를 얻을 수 있습니다.이 값은 EJB XML 설명자의 요소와 같아야 합니다.
미래에 더 큰 유연성이 있을까?아직 초안을 공개한 EJB 2.1 규범은 무상태 세션 빈스에 접근하기 위해 웹 서비스 클라이언트를 정의했다.원격 클라이언트는 위치가 독립된 방식으로 무상태session beans와 통신할 것이다. 이런 통신은 주로 SOAP 1.1을 활용하여 HTTP를 통해 XML 기반의 호출을 한다.XML, SOAP, HTTP는 언어와 독립적이기 때문에 클라이언트는 자바 대상이 필요하지 않고 서로 다른 플랫폼에서 실행되는 다른 유형의 대상이 될 수 있다.
그때가 되면 EJB 2.0의 새로운 기능은 자바 개발자들의 환영을 받아 코드를 만들고 로컬과 원격 인터페이스를 더욱 효과적으로 활용할 수 있게 될 것이다.이러한 기능을 활용하고 당신의 디자인 능력을 정확하게 평가함으로써 응용 프로그램을 만들어서 EJBs를 최대한 활용할 수 있습니다.
작성자 정보:
Rudy Dahbura는 로스앤젤레스에 사는 소프트웨어 고문이다.그는 로스앤젤레스의 Sierra Systems Group에서 일했고 분포식 대상 기술을 운용한 지 5년이 되었다.그의 연락처는[email protected].

좋은 웹페이지 즐겨찾기