2017-02-15 17 views
0

Я написал модуль EJB, и я развернул его в GlassFish. Затем я написал клиент приложения для бизнеса и развернул его также в GlassFish.Поиск JNDI не удался для развернутого EJB

код безгосударственного бина:

package remote; 

@Stateless 
@Remote(IPersonEJB.class) 
@LocalBean 
public class PersonEJB implements IPersonEJB{ 

@PersistenceContext(unitName = "JobsPU") 
private EntityManager em; 

@Override 
public Person giveJobToPerson(Job job, Person person) { 
    em.persist(person); 
    em.flush(); 
    job.setEmployeeID(person.getId()); 
    em.persist(job); 
    return person; 
} 

// Add business logic below. (Right-click in editor and choose 
// "Insert Code > Add Business Method") 

@Override 
public Person getPerson(Long id) { 
    return em.find(Person.class, id); 
} 
} 

persistence.xml развернутого EBJ:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="JobsPU" transaction-type="JTA"> 
    <jta-data-source>jdbc/__TimerPool</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="eclipselink.logging.level" value="INFO"/> 
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
     <property name="eclipselink.target-database" value="Derby"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Я импортировал проект в качестве библиотеки в проект клиента (через Netbeans) для того, чтобы использовать требуемые классы:

package jobsclient; 

import Entities.Address; 
import Entities.Job; 
import Entities.Person; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import remote.IPersonEJB; 

public class Main { 

    public static void main(String[] args) throws NamingException { 
     Context ctx = new InitialContext(); 
     IPersonEJB personEJB = (IPersonEJB) ctx.lookup("java:global/Jobs/IPersonEJB!remote.IPersonEJB"); 
     Address add = new Address("Fake street", "Fake city", "FC", "83100"); 
     Person p = new Person("Jack", "Black", add); 
     Job j = new Job("Programmer", 3500f); 

     Person persistente = personEJB.giveJobToPerson(j, p); 
     if (persistente.getId() != null) { 
      System.out.println("Creazione effettuata"); 
     } } 

} 

Если я пытаюсь запустить клиент, я получаю это исключение s:

Warning: C:\Users\Paolo\Documents\NetBeansProjects\JobsClient\dist\gfdeploy\JobsClient does not exist. 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:446) 
    at org.glassfish.appclient.client.AppClientFacade.main(AppClientFacade.java:166) 
Caused by: javax.naming.NamingException: Lookup failed for 'java:global/Jobs/IPersonEJB!remote.IPersonEJB' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, 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: IPersonEJB!remote.IPersonEJB 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:417) 
    at jobsclient.Main.main(Main.java:28) 
    ... 6 more 
Caused by: javax.naming.NameNotFoundException: IPersonEJB!remote.IPersonEJB not found 
    at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:237) 
    at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:204) 
    at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:208) 
    at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:208) 
    at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:66) 
    at com.sun.enterprise.naming.impl.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:109) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:143) 
    at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:173) 
    at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528) 
    at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:1425) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleInput(MessageMediatorImpl.java:930) 
    at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:213) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequest(MessageMediatorImpl.java:694) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.dispatch(MessageMediatorImpl.java:496) 
    at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.doWork(MessageMediatorImpl.java:2222) 
    at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497) 
    at com.sun.corba.ee.impl.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540) 
Java Result: 1 
run: 
BUILD SUCCESSFUL (total time: 9 seconds) 

Я пытался найти решение, я читал некоторые другие вопросы, подобные этому здесь на Stackoverflow, но я не мог решить мою проблему. Я полагаю, что это проблема с именем JNDI? Но я не могу найти имя, в котором оно было развернуто где угодно (я смотрю повсюду в консоли администратора Glassfish), и я думаю, что форматирование строки имени является правильным (идет по направляющим, которые я читаю).

Я развернул оба приложения, используя функцию развертывания netbeans. Может быть, мне не хватает некоторых файлов конфигурации (ejb.xml или других)?

ответ

1

Я только что нашел ошибку: я искал удаленный интерфейс, а не сам компонент.

IPersonEJB personEJB = (IPersonEJB) ctx.lookup("java:global/Jobs/IPersonEJB!remote.IPersonEJB"); 

Должно быть

IPersonEJB personEJB = (IPersonEJB) ctx.lookup("java:global/Jobs/PersonEJB!remote.IPersonEJB"); 

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

  • Нет связанных вопросов^_^