EJB를 이전에 사용해 왔지만 실제로 작동하는 방식을 이해하고 있음을 다시 확인하고 싶습니다.원격 독립 실행 형 클라이언트를 사용하여 EJB 3.1 세션 Bean 호출
그래서 Simple Session Bean EJB (3.1)를 만들고 이것을 .ear (클라이언트 jar도 포함)로 패키지했습니다.
세션 빈 구현 :
package com.example;
import javax.ejb.Stateless;
@Stateless
public class FirstSessionEJB implements FirstSessionEJBRemote {
public FirstSessionEJB() {
}
@Override
public String print() {
return "Hello";
}
}
원격 인터페이스 :
package com.example;
import javax.ejb.Remote;
@Remote
public interface FirstSessionEJBRemote {
public String print();
}
내가 된 .ear 등이 EJB를 배포하고 성공적 Wildfly 10.x
에 배치 된 아래의 코드 조각입니다.
이제 별도의 JVM에서 실행되는 독립 실행 형 Java 클라이언트를 사용하여 액세스하려고합니다.
다음은 클라이언트 코드입니다 (주로 JNDI로 인해 호출하는 방법이 명확하지 않으므로 완료되지 않을 수도 있음).
package com.example.main;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.example.FirstSessionEJBRemote;
public class Main {
public static void main(String[] args) throws NamingException {
String GLOBAL_JNDI_NAME="java:global/FirstEJBProjEAR/FirstEJBProj/FirstSessionEJB!com.example.FirstSessionEJBRemote";
Hashtable<String,String> jndiProperties = new Hashtable<>();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
InitialContext ic = new InitialContext(jndiProperties);
FirstSessionEJBRemote ejbRemote = null;
ejbRemote = (FirstSessionEJBRemote)ic.lookup(GLOBAL_JNDI_NAME);
ejbRemote.print();
}
}
나는 (그러나 그것은 작동하지 않습니다, 모든 매개 변수에 사용할 수있는 무엇.) JNDI 조회 작업을 수행하는 방법에 대한 this 링크를 참조
을 링크에서 제이보스 특정을 가지고 언급 JNDI 조회없이 작동하는 jar
는사람은 나를 이해하는 데 도움이 :
1) 내가 JNDI를 위해 설정하는 데 필요한 모든 속성을 찾아 무엇?
2) 클라이언트 측 응용 프로그램에 있어야 할 특정 jar 파일이 있습니까?
특정 Wildfly 항아리를 사용하고 싶지 않습니다. 즉, 전통적인 JNDI 조회를 사용하고 싶습니다. 아무도이 부분을 안내 할 수 있습니까?
단순한 "Hello world"EJB를 작성하는 데 어려움을 겪고 있습니다. 필자는 일부 책은 좋다고 말했지만, 제공 한 모든 것은 실제로 JNDI와 모든 병이 포함될 필요가있는 모든 속성을 실제로 말하지 않고 "조회"코드 일뿐입니다.
답장을 보내 주셔서 감사합니다. 클라이언트 항아리를 보았습니다. JNDI가 필요 없다는 것을 사용하는 경우 그 항아리가 언급되고 있는지 의심 스럽습니다. 일부 클라이언트 측 병 (낮은 수준의 통신을 수행하며 다른 응용 프로그램 서버마다 다릅니다)이 필요하다는 것을 알고 있습니다. 그러나 링크에 언급 된 항아리는 JNDI를 사용할 수있는 "표준"(물론 다른 AS에서는 다를 수 있음)의 일종 인 것입니까? 또한이 예제에서는 "java"대신 "ejb"를 사용하므로 Wildfly에만 해당됩니까? – CuriousMind
JavaEE 표준은 컨테이너가 원격 인터페이스를 제공해야한다고 지시하며, 컨테이너가 구현할 표준을 지정하지는 않습니다. 앞서 말했듯이 각각의 인터페이스는 자체 구현 jar 내에 있습니다. 공유하는 유일한 것은 JNDI 위에 구축된다는 것입니다. 그러나 이것에 관해서는 표준화 된 것이 전혀 없습니다. JBoss의 이전 버전에 연결하기 위해 Wildfly jar를 사용할 수 없을 정도로 작습니다. – Gimby