EJB3.0 학습1

4417 단어 jvmbeanjbossjavaeeejb
며칠 전에 여활명 선생님이 쓴 EJB3 입문 경전을 보고 오늘 교과서의 예를 대조하여 스스로 실현했습니다. 그 중에서 몇 가지 문제가 발생했지만 결국 해결되었습니다. 여기서 여러분과 공유하고 이 방면의 지식을 함께 토론할 수 있기를 바랍니다.
환경: 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의 다음 구성:
인용하다
             maxThreads="250"maxHttpHeaderSize="8192"
         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가 완성했습니다.

좋은 웹페이지 즐겨찾기