EJB invocations from a remote client using JNDI
4731 단어 jboss
배포 환경은 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
설명:
[!
?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를 가져오는 코드 작성 방법
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jboss 설정 방법 간단명료한 강좌본고는 jboss 설정 방법을 서술하였다.다음과 같이 여러분에게 참고할 수 있도록 공유합니다. jboss-5.1.0.GA-jdk6.zip 구성: 1. JDK 설치 후 구성: 환경 변수에 JAVA_ 추가JDK의 설치 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.