2014-02-11 2 views
1

이 EJB 예제를 JBoss 7에서 실행하려고하지만 항상 NameNotFoundException을 발생시킵니다.JBoss 7에서 실행되는 EJB 3.1의 JNDI 이름

테스트하려고하는 EJB는 다음과 같습니다. 계산기. 나는 보스에 7 쇼를 배포 할 때 서버 콘솔에서이 다음 라인 :

package demo; 
import javax.ejb.Stateless; 

@Stateless 
public class Calculator implements CalculatorRemote 
{ 
    @Override 
    public double sum(double a, double b) 
    { 
     return a+b; 
    } 
} 

그리고 원격 인터페이스 코드 :

java:global/CalculadoraProject/Calculator!demo.CalculatorRemote 
java:app/CalculadoraProject/Calculator!demo.CalculatorRemote 
java:module/Calculator!demo.CalculatorRemote 
java:jboss/exported/CalculadoraProject/Calculator!demo.CalculatorRemote 
java:global/CalculadoraProject/Calculator 
java:app/CalculadoraProject/Calculator 
java:module/Calculator 

계산기 빈 코드는 이것이다

package demo; 
import javax.ejb.Remote; 

@Remote 
public interface CalculatorRemote 
{ 
    public double sum(double a,double b); 
} 

JNDI를 통해 EJB를 연결해야하는 주 코드는 다음과 같습니다.

package demo; 
import java.util.Properties; 
import javax.naming.Context; 
import javax.naming.InitialContext; 

public class Test 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Context ctx=getInitialContext(); 

     String jndiName="?????????????"; 
     CalculatorRemote c = (CalculatorRemote)ctx.lookup(jndiName); 

     System.out.println(c.sum(2,2)); 
    } 

    private static Context getInitialContext() throws Exception 
    { 
     Properties p=new Properties(); 
     p.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory"); 
     p.put("java.naming.provider.url","remote://localhost:4447"); 

     return new InitialContext(p); 
    } 
} 

첫 번째 오류는 인증에 실패했습니다. USR : 테스트, PWD : 그래서, 서버에 "ApplicationRealm"의 "관리 사용자"사용자 생성 test123를 다음과 같이보고() getInitialContext을 수정

Properties p=new Properties();   
p.put("java.naming.factory.initial","org.jboss.naming.remote.client.InitialContextFactory"); 
p.put("java.naming.provider.url","remote://localhost:4447"); 
p.put(Context.SECURITY_PRINCIPAL,"test"); 
p.put(Context.SECURITY_CREDENTIALS,"test123"); 

다음 오류는 다음과 같습니다 javax의를. naming.NameNotFoundException : ????????????

그럼, 묻고 싶습니다. 내 이름을 Calculator Bean을 조회 할 때 사용해야합니까?

감사합니다.

답변

1

1) 전역 JNDI 이름을 사용합니다.

java:global/CalculadoraProject/Calculator!demo.CalculatorRemote 

2) ejb JNDI 이름을 사용합니다. 그래도 오류가 발생하면 약간의 슬래시로 재생하십시오. 필요한 lib가 있고 다른 코드 위치에 구문 오류가없는 경우에는 정확해야합니다. 상태 콩에 대한

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface> 

:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful 

링크 가치가 읽기 :
https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
무 콩에 대한

ejb:/CalculadoraProject/Calculator!demo.CalculatorRemote 

JNDI 구조

희망이 도움이되었습니다.

+0

감사합니다. 불행히도 여러분이 나열한 이름 중 어느 것도 작동하지 않습니다. 'endpoint.name = 클라이언트 엔드 포인트 remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED = 거짓 원격 : 나는이 클라이언트의 classpath에있는 파일을 jboss-ejb-client.properties 추가하여 시도 원격 .connections = 기본 remote.connection.default.host = 10.20.30.40 remote.connection.default.port = 4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS = 거짓 .connection.default.username = test remote.connection.default.password = test123' 여전히 동일하게 표시됩니다 : NameNotFoundException. – pablosz

+0

로컬 클라이언트와 EJB에 많은 문제가 있다는 것을 기억합니다. 프론트 엔드가 아직 준비되지 않은 경우 서블릿을 사용하여 테스트를 시작한 이유는 무엇입니까? 보시다시피, 모든 것이 JNDI 이름에 포함되는 것은 아니므로, EJB가 을 가지지 않는다면, ejb :/CalculadoraProject // Calculator! demo.CalculatorRemote와 같이 보일 것입니다. 사용하려고 시도한 JNDI 이름은 무엇입니까? – Candyman

+0

ejb :/CalculadoraProject // 계산기! demo.CalculatorRemote가 작동해야합니다. 그렇지 않으면 일부 구성이 꺼져 있거나 라이브러리가 없습니다. – Candyman