2013-12-25 5 views
2

Я создал класс сущности из базы данных, тогда я создал сеансовые компоненты из класса сущностей , и когда я пытаюсь проверить, что мои данные достигают класса сущности, я создал тест junit в классе сессионных бинов, но у меня получился отказ от проверки «Исключение корня javax.naming.NameNotFoundException: EmpTableFacade! Beans.EmpTableFacade не найден, даже если я использовал EJB-инъекцию , тогда я попытался проверить свой код вручную, создав класс, который использует сессионные компоненты, но такое же исключение здесьlookup fail "Root exception is javax.naming.NameNotFoundException"

Я думаю, что ошибка при развертывании персонала, но я не знаю, где я сделал это неправильно это интерфейс сеансовых бит.

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

    package Beans; 

    import java.util.List; 
    import javax.ejb.Local; 

    /** 
    * 
    * @author HADDAD 
    */ 
    @Local 
    public interface EmpTableFacadeLocal { 

     void create(EmpTable empTable); 

     void edit(EmpTable empTable); 

     void remove(EmpTable empTable); 

     EmpTable find(Object id); 

     List<EmpTable> findAll(); 

     List<EmpTable> findRange(int[] range); 

     int count(); 

    } 



and this is the test class 

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

    package Controller; 

    import Beans.EmpTable; 
    import Beans.EmpTableFacade; 
    import java.util.List; 
    import java.util.Properties; 
    import java.util.logging.Level; 
    import java.util.logging.Logger; 
    import javax.naming.Context; 
    import javax.naming.InitialContext; 
    import javax.naming.NamingException; 

    /** 
    * 
    * @author HADDAD 
    */ 
    public class Functionality { 
     List<EmpTable> l; 
     Context c=null; 
     { 
      try { 
       Properties props = new Properties(); 
       props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); 

       props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); 
       // glassfish default port value will be 3700, 
       props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 
       //props.load(new FileInputStream("jndi.properties")); 
       c = new InitialContext(props); 
      } catch (NamingException ex) { 
       Logger.getLogger(Functionality.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      } 
     public void retrive() throws NamingException 
     { 


      EmpTableFacade empTableFacade=(EmpTableFacade) 
        c.lookup("java:global/employee/employee-ejb/EmpTableFacade!Beans.EmpTableFacade"); 
      l= empTableFacade.findAll(); 
      System.out.println(l.get(0).getName().toString()); 
     } 
     public static void main(String[] args) throws NamingException 
     { 
      Functionality f=new Functionality(); 
      f.retrive(); 

     } 
    } 

и это исключение

Exception in thread "main" javax.naming.NamingException: Lookup failed for 'java:global/employee/employee-ejb/EmpTableFacade!Beans.EmpTableFacade' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: EmpTableFacade!Beans.EmpTableFacade not found] 
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491) 
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438) 
    at javax.naming.InitialContext.lookup(InitialContext.java:411) 
    at Controller.Functionality.retrive(Functionality.java:45) 
    at Controller.Functionality.main(Functionality.java:52) 

ответ

1

вам нужно открывать свой боб с интерфейсом Remote. Интерфейс Local доступен только для вызова в пределах той же JVM, что и не в вашем случае.

Название JNDI также выглядит неправильно. Вы не указываете, какую версию ejb или сервера вы используете, что важно для решения этой проблемы, но я думаю, что это link может помочь вам определить правильную запись имени JNDI.

Также учтите, что согласно документу из стекла.

Каждое портативное глобальное имя JNDI распечатывается на сервере.log во время развертывания.

+0

, но я работаю над тем же jvm, мне нужен удаленный интерфейс? – Tony

+0

Да, ваш сервер работает в JVM и ваш тестовый класс в другом. Когда вы выполняете метод main() вашего тестового класса, запускается [новая JVM.] (Http://docs.oracle.com/javase/specs/jls/se5.0/html/execution.html#12) - –

+0

Thx Gabriel для ур помочь им попытаться исправить jndi, называя – Tony

Смежные вопросы