EJB invocations from a remote client using JNDI

4731 단어 jboss
본고는 원격 클라이언트에서 jb를 호출하는 JNDI API를 통해 bean 에이전트를 먼저 찾은 다음에 에이전트를 호출하는 방법을 설명한다.
배포 환경은 Jboss Eap 6.3입니다. 우선 jbs를 jboss 서버에 배치합니다.
 

클라이언트 구현


jboss-client를 도입하는 자바 프로젝트를 만듭니다.jar, 이 패키지는 jboss\bin\client 위치에서 가져옵니다. jbossEAP의 JNDI 상하문을 가져오는 데 사용됩니다.
그리고 코드 맨 바깥쪽 (src 아래) 에 설정 속성 파일 jboss-ejb-client를 추가합니다.프로필 서버의 원격 설정에 치명적인 프로필
 jboss-ejb-client.properties
endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
 
remote.connection.default.host=localhost
remote.connection.default.port= 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
 
remote.connection.default.username=appuser
remote.connection.default.password=apppassword

여기는 무상태 bean을 사용하여 테스트를 진행합니다. 공식 문서에는 두 가지 선택 가능한 방식으로 호출됩니다.

방식 1 org를 사용합니다.jboss.ejb.client.naming


https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
 
public class HelloWorldClient {
	public static void main(String[] args) {
		Hashtable<String, String> jndiProperties = new Hashtable<String, String>();
		jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
		try{
			Context context = new InitialContext(jndiProperties);
			String ejbPattern = "ejb:";
			String appName = "";
			String moduleName = "HelloWorld";
			String distinctName = "";
			String beanName = "HelloWorldBean";
			String interfaceName = "com.xx.leo.HelloWorldBusiness";
			String jndiName = ejbPattern + appName+"/"+ moduleName+"/" + distinctName+"/"+beanName+"!"+interfaceName;
			System.out.println(jndiName); 		// :ejb:/HelloWorld//HelloWorldBean!com.hp.leo.HelloWorldBusiness
			HelloWorldBusiness hello = (HelloWorldBusiness)context.lookup(jndiName);
			System.out.println(hello.sayHello());	// :Hello World.
			
		}catch(NamingException e){
			e.printStackTrace();
		}
	}

}

방식 2 org를 사용합니다.jboss.naming.remote.client.InitialContextFactory


https://docs.jboss.org/author/display/AS71/Remote+EJB+invocations+via+JNDI+-+EJB+client+API+or+remote-naming+project
public class HelloWorldClient2 {

	public static void main(String[] args) {
		Properties jndiProps = new Properties();
		jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
		jndiProps.put(Context.PROVIDER_URL,"remote://localhost:4447");
		// create a context passing these properties
		Context ctx;
		try {
			ctx = new InitialContext(jndiProps);
			HelloWorldBusiness o1 = (HelloWorldBusiness) ctx.lookup(
					"HelloWorld/HelloWorldBean!com.xx.leo.HelloWorldBusiness");
			System.out.println(o1.sayHello());	// :Hello World.
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
}

클라이언트 패키지의 org를 참조합니다.jboss.naming.remote.client.InitialContextFactory 이름 조회 기능과 코드에remote의 링크 주소를 설정할 수 있습니다.주의해야 할 것은 여전히 jboss-ejb-client가 필요하다는 것이다.properties 이 파일은 설정 방식이 방법 1과 같습니다.그 중에서도host와port를 지정했습니다. default의 설정이 강제적이지만 코드에서remote가 다른 IP:port에 영향을 주지 않습니다. 실제 링크의 원격 주소는 코드에서 설정할 수 있습니다.
 

JNDI 작성 방법


J2EE6 대 EJB JNDI 규범 변경이 컸어요.
새로 규정된 몇 개의 명명 공간
java:global/
java:module/
java:app/
AS7은 표준 이름 공간 외에도 다음과 같은 두 개의 글로벌 이름 공간을 제공합니다.
java:jboss/
java:/
 
자바로 시작하는 상대적인 이름은 이 다섯 개의 이름 공간 중 하나여야 합니다.
예:
For statelessbeans:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>

For statefulbeans:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful

설명:
ear 패키지 이름
jar 패키지 이름
별칭
bean에서 지정한 이름
[!] 업무 인터페이스의 전칭
?stateful: 상태 bean이 있으면 추가해야 합니까?stateful 필드
 
이전의 EJBJNDI name은 완전히 Bean에서 지정할 수 있었지만, 최신 JE6의 EJBJNDI 이름은 여러 부분으로 구성되어 있으며, Bean에서 설정된 것은 그 중 하나일 뿐이다.실례를 들다
이전: FirstejbBean
새로운:java:global/ejb_01/FirstejbBean!com.tgb.ejb.FirstEjb
 

소결:


 
위의 예에서 우리는 원격 클라이언트에서 EJB를 호출하는 방법을 보았다
우선 서버에 jb 프로그램을 배치합니다
다음 클라이언트
jboss-ejb-client 추가.properties 파일
classpath에 jboss-clientjar 추가
jndi를 가져오는 코드 작성 방법

좋은 웹페이지 즐겨찾기