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 파일은 Elytron 보안 프레임워크 및 Jakarta Enterprise Beans 클라이언트 구성에 대한 광범위한 인증 및 권한 부여 옵션을 허용합니다.
wildfly- config.xml
<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_PRINCIPAL 및 SECURITY_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() { }
}
이 주석을 사용하면 원격 인터페이스 프로바이더에서 원격 인터페이스 소비자에게 메서드에 트랜잭션이 필요한지 여부를 알릴 수 있습니다.