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() { } }
이 주석을 사용하면 원격 인터페이스 프로바이더에서 원격 인터페이스 소비자에게 메서드에 트랜잭션이 필요한지 여부를 알릴 수 있습니다.