EJB3.0 학습1
환경: JDK5.0+JBOSS4.2.2GA+ECLIPSE3.2
제이보스에 EJB를 배치하는 방법은 여기에 쓰지 않겠습니다.하지만 JBOSS 관련 구성은 다음과 같습니다.
JBOSS 기본 포트는 8080이며 JBOSS4.2.2GA는 기본적으로http://localhost:8080/혹은http://127.0.0.1:8080/액세스하려면 구성 파일 JBOSS_ 수정 필요HOME의\server\default\deploy\jboss-web.deployer\server.xml의 다음 구성:
인용하다
emptySessionPath="true"protocol="HTTP/1.1"
enableLookups="false"redirectPort="8443"acceptCount="100"
connectionTimeout="20000"disableUploadTimeout="true"/>
${jboss.bind.address}를 0.0.0.0으로 변경해야 사용할 수 있습니다.http://ip:port접근 방식,
포트처럼 고쳤는데 그 중에 이상한 문제가 생겼어요. 제가 고친 후에 주석을 하나 추가했는데 JOBSS를 다시 켜면 안 돼요. 죽어도 안 돼요. 이상하게 많아요. 마지막에 주석을 빼면 돼요. 이게 무슨 이유인지 모르겠어요. 서버.xml에는 그 자체로 주석이 많은데 하나만 더 추가하면 안 돼요?
그리고 저희가 클라이언트를 쓸 때 이런 말이 있었어요.
pro.setProperty(Context.PROVIDER_URL, "localhost:1099");
클라이언트와 서버가 JVM에 없으면 위의 설정을 수정하고 localhost를 서버 IP로 바꾸는 것은 무효입니다. 적어도 제 시험 결과는 이렇습니다. 시작해야 할 때 이것을 추가합니다.
인용하다
run -b 0.0.0.0
클라이언트가 서버를 연결할 수 있습니다.
1. 서버 코드는 다음과 같습니다.
package com.foshanshop.ejb3;
public interface HelloWorld {
public String SayHello(String name);
}
또 다른 무상태 세션 BEAN
package com.foshanshop.ejb3.impl;
import com.foshanshop.ejb3.HelloWorld;
import javax.ejb.Remote;
import javax.ejb.Stateless;
@Stateless
@Remote ({HelloWorld.class})
public class HelloWorldBean implements HelloWorld {
public String SayHello(String name) {
return name +" : ! , EJB3 .";
}
}
이 BEAN은javaee를 도입해야 합니다.jar, JBOSS에는 없으므로 별도로 다운로드해야 합니다.
2, 클라이언트, 나는 일반 공사 EJBtest를 새로 만들었다
package com.foshanshop.ejb3.aa;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class HelloWorldTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Properties pro = new Properties();
pro.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
pro.setProperty(Context.PROVIDER_URL, "localhost:1099");
pro.setProperty(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
InitialContext ctx;
try {
ctx = new InitialContext(pro);
System.out.println(ctx);
// HelloWorld helloworld = (HelloWorld) javax.rmi.PortableRemoteObject.narrow(objRef, HelloWorld.class);
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
String result = helloworld.SayHello(" ");
System.out.println(result);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
클라이언트는 패키지 jbossall-client를 도입해야 합니다.jar, 이 가방은 jboss-4.2.2에 있습니다.GA\client 디렉토리에 있습니다.그리고 서비스 측의 HelloWorld 인터페이스를 이 가방 아래로 복사하여 실행하고 이상을 보고합니다.
javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: com.foshanshop.ejb3.HelloWorld (no security manager: RMI class loader disabled)]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:786)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at com.foshanshop.ejb3.aa.HelloWorldTest.main(HelloWorldTest.java:25)
처음에는 가방이 부족한 줄 알았는데, 나중에 몇 개의 관련 가방을 도입했는데, 똑같이 오류를 보고했는데, 이상하게도com을 찾지 못했다.foshanshop.ejb3. HelloWorld 같은 종류는 앞의 가방 이름은 서비스 측의 가방 이름이고 클라이언트의 가방 이름은com입니다.foshanshop.ejb3.aa, 여기 좀 모르겠어요. 유일하게 설명할 수 있는 것은 EJB가 발표할 때 인터페이스가 패키지 이름과 함께 발표되었어요. 만약에 정말 그렇다면 좀 이치에 맞지 않아요. 앞으로 공부하면서 이 의혹을 해결할 수 있었으면 좋겠어요. 저는 클라이언트 패키지 이름을 서비스 업체와 일치하고 실행합니다. 모든 것이 정상입니다. 첫 번째 EJB가 완성했습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 문자열 풀우리는 Java에서 문자열이 힙 메모리 영역에 저장된다는 것을 알고 있습니다. 이 힙 메모리 내부에는 String Pool이라는 특정 메모리 영역이 있습니다. 문자열 프리미티브를 생성하면 자바 문자열의 불변성 덕분에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.