2014-12-20 2 views
0

EJB를 처음 사용합니다. 나는 java_for_web_with_servlets_jsp_and_ejb 책에서 예제를 시도했다.클라이언트 클래스를 사용하여 동일한 컴퓨터에서 ejb를 호출 할 수 없습니다.

AdderHome.java을

package com.brainysoftware.ejb; 

import java.rmi.RemoteException; 

import javax.ejb.EJBObject; 

public interface Adder extends EJBObject{ 
    public int add(int a,int b) throws RemoteException; 

} 

AdderBean.java

package com.brainysoftware.ejb; 

import java.rmi.RemoteException; 

import javax.ejb.EJBException; 
import javax.ejb.SessionBean; 
import javax.ejb.SessionContext; 

public class AdderBean implements SessionBean{ 
    public int add(int a, int b){ 
     System.out.println("From AdderBean"); 
     return (a+b); 
    } 

    @Override 
    public void ejbActivate() throws EJBException, RemoteException { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void ejbPassivate() throws EJBException, RemoteException { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void ejbRemove() throws EJBException, RemoteException { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void setSessionContext(SessionContext arg0) throws EJBException, 
      RemoteException { 
     // TODO Auto-generated method stub 

    } 
} 

:

Adder.java : 다음 코드는 두 개의 정수를 추가하는 세션이었다라고 가산기를 생성

package com.brainysoftware.ejb; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface AdderHome extends EJBHome{ Adder create() throws RemoteException, CreateException; } 
다음과 같이 1,363,210

배포 설명은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<ejb-jar version="3.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"> 
    <description>Your first EJB application</description> 
    <display-name>Adder Application</display-name> 
    <enterprise-beans> 
    <session> 
     <ejb-name>Adder</ejb-name> 
     <home>com.brainysoftware.ejb.AdderHome</home> 
     <remote>com.brainysoftware.ejb.Adder</remote> 
     <ejb-class>com.brainysoftware.ejb.AdderBean</ejb-class> 
     <session-type>Stateless</session-type> 
     <transaction-type>Bean</transaction-type> 
    </session> 
    </enterprise-beans> 
</ejb-jar> 
  • 나는이 프로젝트의 jar 파일을 생성하고 Tomcat의 lib에 항아리를 배치했다.
  • 이제, 클라이언트에 대한 I는 가산기 콩 사용하는 클래스 BeanClient.java 갖는 동적 웹 프로젝트 생성 :

    수입 java.rmi.RemoteException을을; 가져 오기 java.util.Properties; import javax.ejb.CreateException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import com.brainysoftware.ejb.Adder; import com.brainysoftware.ejb.AdderHome; 가져 오기 javax.rmi.PortableRemoteObject;

    공용 클래스 BeanClient { public static void main (String [] args) { Properties props = new Properties(); props.put (Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); props.put (Context.PROVIDER_URL, "localhost : 1099"); 시도 { InitialContext jnic = 새 InitialContext (소품); System.out.println ("컨텍스트 가져 오기"); 개체 ref = jnic.lookup ("Adder"); System.out.println ("참조 정보"); AdderHome home = (AdderHome) PortableRemoteObject.narrow (ref, AdderHome.class); 덧셈기 덧셈기 = home.create(); System.out.println ("2 및 5 추가 :"+ adder.add (2,5)); } catch (NamingException e) { System.out.println (e.toString()); } catch (CreateException e) { System.out.println (e.toString()); } catch (RemoteException e) { System.out.println (e.toString());

    가져 오기 컨텍스트 javax.naming의 : 일식이 클래스를 실행에 }
    } }

, 나는 다음과 같은 오류가 발생합니다.CommunicationException : localhost : 1099 및 발견으로 오류가 발생했습니다 : javax.naming.CommunicationException : Receive timed out [루트 예외는 java.net.SocketTimeoutException : Receive timed out]입니다. [루트 예외는 javax. naming.CommunicationException : 서버 localhost에 연결하지 못했습니다 : 1099 [루트 예외가 javax.naming.ServiceUnavailableException : 서버 localhost에 연결하지 못했습니다 : 1099 [루트 예외 java.net.ConnectException : 연결이 거부되었습니다 : 연결]]

도와 주시겠습니까?

답변

0

은 조회하고 EJB의 firstbale합니다 :

당신이 인터페이스를 가지고 있어야하며 구현입니다.

당신은 당신의 인터페이스를 주석이 (@Local OU @Remote) 구현은 @statless를 주석해야 OU @statful 당신은 당신이 jndi.properties 프로젝트에 추가해야합니다. 당신의 ejb 프로젝트는 쉽게 찾을 수 있도록 서버에 배치되어야합니다. 난 내 대답은 유용 희망 https://www.youtube.com/watch?v=mBwgHuBg96g

당신에게

을 부어 : 내가 여기에 제이 보스와 함께 당신을 위해 예를
관련 문제