5.2. 원격 자카르타 엔터프라이즈 빈 클라이언트 사용

5.2.1. 초기 컨텍스트 조회

초기 컨텍스트를 생성할 때 PROVIDER_URL 속성을 사용하여 원격 서버의 주소를 전달할 수 있습니다.

public class Client {
    public static void main(String[] args)
            throws NamingException, PrivilegedActionException, InterruptedException {
        InitialContext ctx = new InitialContext(getCtxProperties());
        String lookupName = "ejb:/server/HelloBean!ejb.HelloBeanRemote";
        HelloBeanRemote bean = (HelloBeanRemote)ctx.lookup(lookupName);
        System.out.println(bean.hello());
        ctx.close();
    }
    public static Properties getCtxProperties() {
        Properties props = new Properties();
        props.put(Context.INITIAL_CONTEXT_FACTORY, WildFlyInitialContextFactory.class.getName());
        props.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080");
        props.put(Context.SECURITY_PRINCIPAL, "joe");
        props.put(Context.SECURITY_CREDENTIALS, "joeIsAwesome2013!");
        return props;
    }
}
참고

조회에 사용할 초기 컨텍스트 팩토리는 org.wildfly.naming.client.WildFlyInitialContextFactory 입니다.

5.2.2. 원격 자카르타 엔터프라이즈 빈 구성 파일

JBoss EAP에는 Elytron 보안 프레임워크가 포함되어 있습니다. 클라이언트 애플리케이션 클래스 경로의 META-INF/ 디렉터리에 있는 The wildfly- config.xml 파일은 Elytron 보안 프레임워크 및 Jakarta Enterprise Beans 클라이언트 구성에 대한 광범위한 인증 및 권한 부여 옵션을 허용합니다.

<configuration>
   <authentication-client xmlns="urn:elytron:client:1.2">
      <authentication-rules>
         <rule use-configuration="default" />
      </authentication-rules>
      <authentication-configurations>
         <configuration name="default">
            <sasl-mechanism-selector selector="DIGEST-MD5" />
            <set-user-name name="admin" />
            <credentials>
               <clear-password password="password123!" />
            </credentials>
         </configuration>
      </authentication-configurations>
   </authentication-client>
   <jboss-ejb-client xmlns="urn:jboss:wildfly-client-ejb:3.0">
      <connections>
         <connection uri="remote+http://127.0.0.1:8080" />
      </connections>
   </jboss-ejb-client>
</configuration>

초기 컨텍스트에서 PROVIDER_URL,SECURITY_PRINCIPALSECURITY_CREDENTIALS 매개변수를 포함하는 대신 <connection-uri> 및 < authentication-client> 요소를 각각 wildfly-config.xml 파일에 사용하여 연결 URI와 보안 설정을 구성할 수 있습니다.

5.2.3. ClientTransaction 주석

@org.jboss.ejb.client.annotation.ClientTransaction 주석은 자카르타 엔터프라이즈 빈 클라이언트의 트랜잭션 전파를 처리합니다. 클라이언트에 트랜잭션이 없는 경우 전파가 실패하도록 지시하거나 클라이언트가 하나의 활성 상태인 경우에도 트랜잭션 전파를 방지할 수 있습니다. org.jboss.ejb.client.annotation.ClientTransactionPolicy 인터페이스의 상수를 사용하여 ClientTransaction 주석의 정책을 제어할 수 있습니다. 다음은 org.jboss.ejb.client.annotation.ClientTransactionPolicy 인터페이스의 상수입니다.

  • 필수 항목: 클라이언트측 트랜잭션 컨텍스트가 없는 경우 예외적으로 실패합니다. 클라이언트 측 트랜잭션 컨텍스트가 존재하면 전파됩니다.
  • NEVER: 트랜잭션 컨텍스트를 전파하지 않고 호출합니다. 클라이언트 측 트랜잭션 컨텍스트가 있는 경우 예외가 발생합니다.
  • NOT_SUPPORTED: 클라이언트 측 트랜잭션 컨텍스트가 있는지 여부에 관계없이 트랜잭션 컨텍스트를 전파하지 않고 를 호출합니다.
  • 지원: 클라이언트측 트랜잭션 컨텍스트가 없는 경우 트랜잭션 없이 을 호출하고, 클라이언트 측 트랜잭션 컨텍스트가 있는 경우 전파합니다.

주석이 없으면 기본 정책은 org.jboss.ejb.client.annotation.ClientTransactionPolicy#SUPPORTS 입니다. 이는 트랜잭션이 존재하는 경우 트랜잭션이 전파되지만 트랜잭션이 있는지 여부에 관계없이 전파가 실패하지 않습니다.

@ClientTransaction(ClientTransactionPolicy.MANDATORY)
@Remote
public interface RemoteCalculator  {
   public void callRemoteEjb() { }
}
@Stateless
@Remote(RemoteCalculator.class)
public class CalculatorBean implements RemoteCalculator {

   @Override
   public void callRemoteEjb()  {   }
}

이 주석을 사용하면 원격 인터페이스 프로바이더에서 원격 인터페이스 소비자에게 메서드에 트랜잭션이 필요한지 여부를 알릴 수 있습니다.