2012-09-14 34 views
5

Tengo una aplicación de cliente y un servidor que usa JBoss AS 7.1.1. Al inicio, mi cliente se conecta al servidor y me da una interfaz remota para usar. Sin embargo, cuando trato de ejecutar una función a través de la interfaz consigo esta excepción: apareceIllegalStateException: No hay receptor EJB disponible para manejar

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: 
No EJB receiver available for handling [appName:GrahamsProjServer,modulename:GrahamsProjServer,distinctname:] 
combination for invocation context [email protected] 
     at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584) 
     at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119) 
     at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181) 
     at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136) 
     at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121) 
     at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104) 
     at $Proxy0.persistSchemas(Unknown Source) 
     at grahamsprojclient.main.GrahamsProjScreen.btnPersistActionPerformed(Unknown Source) 
     at grahamsprojclient.main.GrahamsProjScreen.access$400(Unknown Source) 
     at grahamsprojclient.main.GrahamsProjScreen$5.actionPerformed(Unknown Source) 
     at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
     at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
     at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
     at java.awt.Component.processMouseEvent(Unknown Source) 
     at javax.swing.JComponent.processMouseEvent(Unknown Source) 
     at java.awt.Component.processEvent(Unknown Source) 
     at java.awt.Container.processEvent(Unknown Source) 
     at java.awt.Component.dispatchEventImpl(Unknown Source) 
     at java.awt.Container.dispatchEventImpl(Unknown Source) 
     at java.awt.Component.dispatchEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
     at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
     at java.awt.Container.dispatchEventImpl(Unknown Source) 
     at java.awt.Window.dispatchEventImpl(Unknown Source) 
     at java.awt.Component.dispatchEvent(Unknown Source) 
     at java.awt.EventQueue.dispatchEvent(Unknown Source) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
     at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
     at java.awt.EventDispatchThread.run(Unknown Source) 

No hay error en el servidor. Parece que ni siquiera está hablando con el servidor cuando ejecuto la función. ¿Cómo podría ser que al inicio mi cliente se esté conectando al servidor, pero cuando intento ejecutar una función, no se conecta?

Respuesta

5

El mensaje No EJB receiver available por sí solo no dice mucho sobre por qué no se conecta, por lo que no responderá a su pregunta, pero al menos podría indicarle la dirección correcta.

La biblioteca del cliente JBoss EJB usa Log4j para que no se imprima en System.out ni System.err. Para saber realmente qué está pasando, debe habilitar el inicio de sesión en el paquete org.jboss.ejb.client, p. mediante la inclusión de esta línea en su log4j.properties:

log4j.logger.org.jboss.ejb.client=TRACE 

Con ello ha permitido que pueda ver mejor lo que el cliente está haciendo por usted y lo más probable es imprimir el error subyacente.

También, como de JBoss 7.1.0, la security-realm viene habilitado por defecto, así que para hacer llamadas remotas uno debe hacer una de las siguientes:

  • desactivarlo mediante la eliminación de la <security-realm/> del archivo
  • standalone.xml

O

  • añadir usuarios al servidor utilizando la secuencia de comandos bin/add-user(.bat)(.sh). Una vez agregado, incluya la información de usuario/pwd en su archivo jboss-ejb-client.properties.

Here puede encontrar una guía más detallada sobre cómo hacer llamadas EJB desde un cliente remoto.

+0

Sí, esta es la respuesta correcta para mí. –

Cuestiones relacionadas