Поиск JNDI только возвращает "javax.naming.NameNotFoundException" - PullRequest
1 голос
/ 23 ноября 2011

Я пытаюсь реализовать ejb-вызов с использованием JNDI-имен.

Установка:

  • JBoss-6.1.0.Final
  • уха развертывания:
    • gwt.war
    • ejb.jar

Моя проблема в том, что, хотя JNDIView показывает мне существующий ejb, я не могу его достать.

В моем RemoteServiceServlet я пытаюсь добраться до ejb, который развернут в ejb.jar внутри того же пакета ear.

Я уже попробовал несколько звонков, так как не был уверен в правильном коде jndi.

try 
{
    productLocal = (ProductLocal) context.lookup("ProductHome/local");
} 
catch (NamingException e) 
{
    System.err.println(e.getMessage());
    e.printStackTrace();
}

также пробовал:

productLocal = (ProductLocal) context.lookup("ProductLocal");
productLocal = (ProductLocal) context.lookup("sung_app_kylintv/ProductHome/local");

ejb без состояния назначается так:

@Stateless
@Local(ProductLocal.class)
@Remote(ProductRemote.class)
@LocalBinding(jndiBinding="ProductLocal")
@RemoteBinding(jndiBinding="ProductRemote")
public class ProductHome extends HomeBase<ProductEntity> implements SessionBean, Serializable, ProductLocal

Инициирование контекста :

Properties p = new Properties();
p.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
p.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
p.put("java.naming.provider.url","jnp://localhost:1099");

context = new InitialContext(p);

My JNDIView :

  +- sung_app_kylintv (class: org.jnp.interfaces.NamingContext)
  |   +- CategoryHome (class: org.jnp.interfaces.NamingContext)
  |   |   +- local (class: Proxy for: sung.app.kylintv.ejbclient.product.CategoryLocal)
  |   |   +- local-sung.app.kylintv.ejbclient.product.CategoryLocal (class: Proxy for: sung.app.kylintv.ejbclient.product.CategoryLocal)
  |   |   +- remote-sung.app.kylintv.ejbclient.product.CategoryRemote (class: Proxy for: sung.app.kylintv.ejbclient.product.CategoryRemote)
  |   |   +- remote (class: Proxy for: sung.app.kylintv.ejbclient.product.CategoryRemote)
  |   +- ProductHome (class: org.jnp.interfaces.NamingContext)
  |   |   +- local (class: Proxy for: sung.app.kylintv.ejbclient.product.ProductLocal)
  |   |   +- remote (class: Proxy for: sung.app.kylintv.ejbclient.product.ProductRemote)
  |   |   +- remote-sung.app.kylintv.ejbclient.product.ProductRemote (class: Proxy for: sung.app.kylintv.ejbclient.product.ProductRemote)
  |   |   +- local-sung.app.kylintv.ejbclient.product.ProductLocal (class: Proxy for: sung.app.kylintv.ejbclient.product.ProductLocal)
  |   +- CustomerHome (class: org.jnp.interfaces.NamingContext)
  |   |   +- local-sung.common.behavior.FindAllBehaviour (class: Proxy for: sung.common.behavior.FindAllBehaviour)
  |   |   +- local (class: Proxy for: sung.common.behavior.FindAllBehaviour)
  |   +- Option (class: org.jnp.interfaces.NamingContext)
  |   |   +- local-sung.app.kylintv.ejbclient.product.OptionLocal (class: Proxy for: sung.app.kylintv.ejbclient.product.OptionLocal)
  |   |   +- local (class: Proxy for: sung.app.kylintv.ejbclient.product.OptionLocal)
  |   |   +- remote-sung.app.kylintv.ejbclient.product.OptionRemote (class: Proxy for: sung.app.kylintv.ejbclient.product.OptionRemote)
  |   |   +- remote (class: Proxy for: sung.app.kylintv.ejbclient.product.OptionRemote)
  |   +- DurationHome (class: org.jnp.interfaces.NamingContext)
  |   |   +- local (class: Proxy for: sung.app.kylintv.ejbclient.product.DurationLocal)
  |   |   +- local-sung.app.kylintv.ejbclient.product.DurationLocal (class: Proxy for: sung.app.kylintv.ejbclient.product.DurationLocal)
  |   |   +- remote (class: Proxy for: sung.app.kylintv.ejbclient.product.DurationRemote)
  |   |   +- remote-sung.app.kylintv.ejbclient.product.DurationRemote (class: Proxy for: sung.app.kylintv.ejbclient.product.DurationRemote)
  |   +- VariantHome (class: org.jnp.interfaces.NamingContext)
  |   |   +- local (class: Proxy for: sung.app.kylintv.ejbclient.product.VariantLocal)
  |   |   +- local-sung.app.kylintv.ejbclient.product.VariantLocal (class: Proxy for: sung.app.kylintv.ejbclient.product.VariantLocal)
  |   |   +- remote (class: Proxy for: sung.app.kylintv.ejbclient.product.VariantRemote)
  |   |   +- remote-sung.app.kylintv.ejbclient.product.VariantRemote (class: Proxy for: sung.app.kylintv.ejbclient.product.VariantRemote)
  |   +- VelocityBean (class: org.jnp.interfaces.NamingContext)
  |   |   +- local (class: Proxy for: sung.app.kylintv.ejb.velocity.Velocity)
  |   |   +- local-sung.app.kylintv.ejb.velocity.Velocity (class: Proxy for: sung.app.kylintv.ejb.velocity.Velocity)
  |   +- CustomerAddressHome (class: org.jnp.interfaces.NamingContext)
  |   |   +- local-sung.common.behavior.FindAllBehaviour (class: Proxy for: sung.common.behavior.FindAllBehaviour)
  |   |   +- local (class: Proxy for: sung.common.behavior.FindAllBehaviour)
  |   +- OrderEntityHome (class: org.jnp.interfaces.NamingContext)
  |   |   +- no-interface (class: sung.app.kylintv.ejbclient.order.OrderEntityHome_$$_javassist_50)

Существуют ли какие-либо требования для нормальной работы jndi в подобном случае?

1 Ответ

0 голосов
/ 24 ноября 2011

с помощью

productLocal = (ProductLocal) context.lookup("sung_app_kylintv/ProductHome/local")

вернул немного другое сообщение об ошибке:

2011-11-24 12:37:07,893 INFO  [STDOUT] (http-0.0.0.0-8080-2) productLocal called successfully.
2011-11-24 12:37:07,893 INFO  [STDOUT] (http-0.0.0.0-8080-2) productLocal calling createTestEntry().
2011-11-24 12:37:07,950 ERROR [STDERR] (http-0.0.0.0-8080-2) org.jboss.injection.manager.spi.InjectionException: javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.NameNotFoundException: sung not bound]

После того, как мой коллега посмотрел, была обнаружена ошибка: я попробовал Injection, используя @ EJB внутри этого класса ProductHome, который использовал mappedName = "sung /...". MappedName не корректно и даже не требуется вообще, внутри ejb-проекта соединения уже существуют и работают. Надеюсь, это может помочь и другим.

Решение: Мне пришлось исправить мой ProductHome, удалив mappedName-Attribute в моем ejb-вызове. После этого можно создать экземпляр класса и вызвать функции.

...