No se puede acceder a un enterprise bean desde un servlet, un archivo JSP, un programa autónomo u otro cliente

Utilice estos consejos para la resolución de problemas en aquellos problemas relacionados con el acceso a los beans de empresa

[AIX Solaris HP-UX Linux Windows][IBM i]Si se trata de un cliente remoto para el enterprise bean, lo que significa que está ejecutándose en un servidor de aplicaciones diferente o como un cliente autónomo, examine las anotaciones cronológicas de la JVMdel servidor de aplicaciones que alberga el enterprise bean y también los archivos de anotaciones del cliente.

[z/OS]Si se trata de un cliente remoto para el enterprise bean, lo que significa que está ejecutándose en un servidor de aplicaciones diferente o como un cliente autónomo, examine las anotaciones cronológicas del servidor de aplicaciones que alberga el enterprise bean y también los archivos de anotaciones del cliente.

[AIX Solaris HP-UX Linux Windows][IBM i]Si no encuentra ningún problema que se asemeje al suyo o si la información proporcionada no resuelve el problema, siga estos pasos:
  1. Si el problema parece estar relacionado con el servicio de nombres, es decir, si encuentra una excepción NameNotFoundException o un ID de mensaje que comienza por NMSV, consulte estos temas para obtener más información:
  2. Compruebe si el problema se ha identificado y documentado utilizando los enlaces de Diagnóstico y solución de problemas: recursos de aprendizaje.
Si continúa sin solucionar el problema, consulte Ayuda para la resolución de problemas de IBM para obtener más ayuda.

java.lang.NoSuchMethodError

Al intentar invocar un método en un bean de sesión, se ha producido un java.lang.NoSuchMethodError.

A continuación se muestra un ejemplo de este tipo de error:
Al intentar invocar el método xSLTStory4Session en un bean, se muestra  java.lang.NoSuchMethodError.

CNTR0020E: EJB ha generado una excepción inesperada (no declarada) durante la
invocación del método "xSLTStory4Session" en el bean
"BeanId(ERWW_v8#XSLTStory4SessionEJB3.jar#XSLTStory4SessionFacadeBean, null)". 
Datos de excepción: java.lang.NoSuchMethodError:
paysession/ejb3/PaySessionFacadeRemote.paySession(Ljava/lang/String;)Ljava/lang/String;

En este caso, hay varias versiones de la interfaz PaySessionFacadeRemote en varios módulos dentro del archivo EAR. Una de las interfaces no contiene el método esperado.

La clase stub ha sido generada por el tiempo de ejecución de la primera versión de la interfaz PaySessionFacadeRemote en la vía de acceso de clases del archivo EAR que era una versión incorrecta.

La excepción ObjectNotFoundException o la excepción ObjectNotFoundLocalException al acceder al EJB de sesión con estado

Una causa posible de este problema es que el bean de sesión con estado haya sobrepasado su tiempo de espera y el contenedor lo haya suprimido. Este suceso debe solucionarse en el código, según la especificación EJB 2.1 y posteriores.

El método de rastreo de la pila que comienza por "EJSContainer de E Bean ha generado la excepción [nombre_ excepción]" en el archivo de registro cronológico de JVM.

Si el nombre de excepción indica una excepción generada por una clase de IBM que comienza con "com.ibm...", a continuación, busque el nombre de excepción dentro del centro de información, y en la ayuda en línea tal como se describe. Si el "nombre de excepción" indica que la aplicación ha generado la excepción, póngase en contacto con el desarrollador de aplicaciones para determinar la causa.

javax.naming.NameNotFoundException: No se ha encontrado el nombre "nombre" en el contexto "local"

Una causa posible de esta excepción es que el enterprise bean no es local (no se está ejecutando en la misma máquina virtual Java (JVM) ni en el mismo servidor de aplicaciones) local para el cliente JSP, el servlet, la aplicación Java u otro enterprise bean pero, sin embargo, la llamada va dirigida a un método de la interfaz "local" del enterprise bean. Si el acceso ha funcionado en un entorno de desarrollo pero no cuando se despliega en WebSphere Application Server, por ejemplo, es posible que el enterprise bean y el cliente estuvieran en la misma JVM de desarrollo pero que estén en procesos diferentes después del despliegue.

Para solucionar este problema, póngase en contacto con el desarrollador del enterprise bean y determine si la llamada del cliente es para un método de la interfaz local del enterprise bean. Si es así, modifique el código de cliente de modo que llame a un método de la interfaz remota o promocione el método local en la interfaz remota.

Las referencias a los enterprise beans con interfaces locales se enlazan en un espacio de nombres que es local para el proceso de servidor con el esquema de URL de local:. [AIX Solaris HP-UX Linux Windows][IBM i]Para obtener un vuelco de un espacio de nombres local de servidor: utilice el programa de utilidad de vuelco de espacio de nombres que se describe en el artículo "Programa de utilidad de vuelco de espacio de nombres para los espacios de nombres java:, local: y server".

Se ha generado BeanNotReentrantException

Este problema puede producirse porque el código del cliente ,generalmente un servlet o un archivo JSP, esté intentando llamar al mismo bean de sesión con estado desde dos hebras de cliente diferentes. Generalmente, esta situación se produce cuando una aplicación almacena la referencia al bean de sesión con estado en una variable estática, utiliza una variable JSP global (estática) para hacer referencia a la referencia al SessionBean con estado o almacena la referencia al SessionBean con estado en el objeto de sesión HTTP. Posteriormente, la aplicación hace que el navegador de cliente emita una nueva solicitud al servlet o archivo JSP antes de que se haya completado la solicitud anterior.

Para solucionar este problema, solicite al desarrollador del código de cliente que revise estas condiciones en el código.

Se ha generado CSITransactionRolledbackException / TransactionRolledbackException

[AIX Solaris HP-UX Linux Windows][IBM i]Un contenedor de enterprise beans genera estas excepciones de alto nivel para indicar que no se ha podido realizar una llamada de enterprise bean. Cuando se genera esta excepción, consulte los archivos de anotaciones cronológicas de la JVM para determinar la causa subyacente.

[z/OS]Un contenedor de enterprise beans genera estas excepciones de alto nivel para indicar que no se ha podido realizar una llamada de enterprise bean. Cuando se genera esta excepción, consulte los archivos de anotaciones cronológicas para determinar la causa subyacente.

Algunas de las causas posibles son:
  • Es posible que el enterprise bean genere una excepción que no se ha declarado como parte de esta signatura de método. El contenedor debe retrotraer la transacción en este caso. Algunas de las causas comunes de esta situación son aquellas en que el enterprise o el código al que se llama crea una excepción de tipo NullPointerException, ArrayIndexOutOfBoundsException, una excepción de tiempo de ejecución Java o una diferente en la que un bean BMP encuentra un error de JDBC. La solución es investigar el código del enterprise bean y resolver la excepción subyacente o añadir la excepción a la signatura del método que está dando problemas.
  • Es posible que una transacción intente realizar un trabajo adicional después de que su estado fuera "Marcada para retrotracción", "Retrotrayéndose" o "Retrotraída". Cuando las transacciones tienen establecido uno de estos estados, no pueden continuar realizando trabajos. Este problema se produce porque el tiempo de espera de la transacción se ha sobrepasado, lo cual suele deberse a un bloqueo de la base de datos. Trabaje con las herramientas de gestión de base de datos de la aplicación o con el administrador para determinar si se está sobrepasando el tiempo de las transacciones de base de datos a las que llama el enterprise bean.
  • Es posible que una transacción no se pueda comprometer debido a que hay trabajo pendiente. La transacción local encuentra algún "trabajo pendiente" durante la operación de compromiso. Cuando una transacción local encuentra una "acción no resuelta", la acción por omisión es la "retrotracción". Ajuste esta acción para que se "comprometa" en una herramienta de ensamblaje.

Ha fallado el intento de iniciar el módulo EJB con la excepción "javax.naming.NameNotFoundException dataSourceName_CMP"

Este problema se puede producir porque:
  • Cuando se ha configurado el recurso del origen de datos, no se ha seleccionado la persistencia gestionada por contenedor.
    • Para confirmar este problema, en la consola administrativa, examine la versión del origen de datos proporcionado en NameNotFoundException. En el panel de configuración, busque un recuadro de selección denominado Persistencia gestionada por contenedor.
    • Para corregir este problema, seleccione el recuadro de selección de Persistencia gestionada por contenedor.
  • Si se ha seleccionado la persistencia gestionada por contenedor, es posible que el origen de datos CMP no se haya enlazado en el espacio de nombres.
    • [AIX Solaris HP-UX Linux Windows][IBM i]Busque avisos o errores de nombres adicionales en la barra de estado y en el servidor de aplicaciones que aloja las anotaciones cronológicas de la JVM. Si encuentra algún otro problema de excepción de denominación, consúltelo en el tema Problemas de acceso de aplicaciones.
    • [z/OS]Busque avisos o errores de nombres adicionales en la barra de estado y en las anotaciones cronológicas del servidor de aplicaciones. Si encuentra algún otro problema de excepción de denominación, consúltelo en el tema Problemas de acceso de aplicaciones.
[AIX Solaris HP-UX Linux Windows][IBM i]

La transacción [ID_tran] ha superado el tiempo de espera después de 120 segundos al acceder a un enterprise bean

Este error puede producirse cuando un cliente ejecuta una transacción en un enterprise bean CMP o BMP.
  • El valor de tiempo de espera excedido para las transacciones de enterprise beans es de 120 segundos. Transcurrido este tiempo, la transacción supera el valor de tiempo de espera y se cierra la conexión.
  • Si la transacción tarda mucho más tiempo que el período de tiempo de espera excedido especificado, vaya a Gestionar servidores de aplicaciones nombre_servidor, seleccione la página de propiedades del Servicio de transacciones y busque la propiedad Tiempo de espera de actividad total de transacción. Aumente este valor si es necesario y guarde la configuración.
[z/OS]

Se emite el mensaje BBOT0003W

El mensaje BBOT0003W indica un tiempo de espera de transacción. El tiempo de espera puede dar como resultado la terminación anormal del servant donde se ejecuta la transacción.
  • El valor de tiempo de espera excedido para las transacciones de enterprise beans es de 120 segundos. Transcurrido este tiempo, la transacción supera el valor de tiempo de espera y se cierra la conexión.
  • Si la transacción tarda mucho más tiempo que el período de tiempo de espera excedido especificado, en la consola administrativa:
    1. Vaya a Gestionar servidores de aplicaciones > nombre_servidor
    2. Seleccione la página de propiedades del Servicio de transacciones
    3. Aumente el valor de Tiempo de espera de actividad total de transacción
    4. Guarde la configuración
    Nota: z/OS utilizará el valor establecido para Tiempo de espera de actividad total de transacción como valor de tiempo de espera de transacción predeterminado. Si establece un valor para esta propiedad mayor que el valor de tiempo de espera de transacción máximo, z/OS utilizará el valor de tiempo de espera de transacción máximo como valor predeterminado.

Síntoma:CNTR0001W: No se ha podido desactivar un bean de sesión con estado.

Este error se puede producir cuando no se cierra ni se anula un objeto de conexión que se utiliza en el bean.

[AIX Solaris HP-UX Linux Windows][IBM i]Para confirmar que este es el problema, busque en las anotaciones cronológicas de la JVM una pila de excepciones para el contenedor de EJB que alberga el enterprise bean que sea similar a:
[time EDT] <ThreadID> StatefulPassi W CNTR0001W: 
No se ha podido desactivar un bean de sesión con estado: StatefulBeanO
(BeanId(XXX#YYY.jar#ZZZZ, <ThreadID>), 
state = PASSIVATING) com.ibm.ejs.container.passivator.StatefulPassivator@<ThreadID>
java.io.NotSerializableException: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection 
 at java.io.ObjectOutputStream.outputObject((Compiled Code)) 
 at  java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java(Compiled Code)) 
 at java.io.ObjectOutputStream.outputClassFields((Compiled Code)) 
 at java.io.ObjectOutputStream.defaultWriteObject((Compiled Code)) 
 at java.io.ObjectOutputStream.outputObject((Compiled Code)) 
 at  java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java(Compiled Code)) 
 at  com.ibm.ejs.container.passivator.StatefulPassivator.passivate((Compiled Code)) 

 at com.ibm.ejs.container.StatefulBeanO.passivate((Compiled Code) 
 at com.ibm.ejs.container.activator.StatefulASActivationStrategy.atUnitOfWorkEnd
                      ((Compiled Code)) 
 at com.ibm.ejs.container.activator.Activator.unitOfWorkEnd((Compiled  Code)) 
 at com.ibm.ejs.container.ContainerAS.afterCompletion((Compiled Code)
donde XXX,YYY,ZZZ es el nombre de bean e <ID_hebra> es el ID de la hebra para dicha ejecución.
[z/OS]Para confirmar que este es el problema, busque en las anotaciones cronológicas del contenedor EJB que aloja el enterprise bean una pila de excepciones que sea similar a la siguiente:
StatefulPassi W CNTR0001W: 
No se ha podido desactivar un bean de sesión con estado: StatefulBeanO
(BeanId(XXX#YYY.jar#ZZZZ), 
state = PASSIVATING) 
java.io.NotSerializableException: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection 
 at java.io.ObjectOutputStream.outputObject((Compiled Code)) 
 at  java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java(Compiled Code)) 
 at java.io.ObjectOutputStream.outputClassFields((Compiled Code)) 
 at java.io.ObjectOutputStream.defaultWriteObject((Compiled Code)) 
 at java.io.ObjectOutputStream.outputObject((Compiled Code)) 
 at  java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java(Compiled Code)) 
 at  com.ibm.ejs.container.passivator.StatefulPassivator.passivate((Compiled Code)) 

 at com.ibm.ejs.container.StatefulBeanO.passivate((Compiled Code) 
 at com.ibm.ejs.container.activator.StatefulASActivationStrategy.atUnitOfWorkEnd
                      ((Compiled Code)) 
 at com.ibm.ejs.container.activator.Activator.unitOfWorkEnd((Compiled  Code)) 
 at com.ibm.ejs.container.ContainerAS.afterCompletion((Compiled Code)
donde XXX,YYY,ZZZ es el nombre del bean.

Para corregir este problema, la aplicación debe cerrar todas las conexiones y establecer la referencia en nulo para todas las conexiones. Generalmente, esta actividad se realiza en el método ejbPassivate() del bean. Asimismo, tenga en cuenta que el bean debe tener código para volver a adquirir estas conexiones cuando se ha reactivado el bean. De lo contrario, se generan excepciones NullPointerException cuando la aplicación intenta volver a utilizar las conexiones.

[AIX Solaris HP-UX Linux Windows][IBM i]

Síntoma: org.omg.CORBA.BAD_PARAM: El objeto Servant no es del tipo esperado. Código menor: 4942F21E Finalizado: No

Este error se puede devolver a un programa cliente cuando el programa intenta ejecutar un método EJB.

Normalmente, este problema se debe a que no coinciden la definición de la interfaz y la implementación de las instalaciones de cliente y servidor.

Otra de las causas posibles es cuando se configura un servidor de aplicaciones para utilizar un solo esquema de carga de clases. Se desinstala una aplicación mientras el servidor de aplicaciones permanece activo, las clases de la aplicación desinstalada continúan cargadas en el servidor de aplicaciones. Si cambia la aplicación, vuelva a desplegarla y a instalarla en el servidor de aplicaciones, las clases cargadas anteriormente pasan a ser de un nivel anterior. Debido a las clases de nivel anterior, las versiones del código de cliente y del servidor no coinciden.

Para corregir este problema:
  1. Cambie el esquema de carga de clases del servidor de aplicaciones a múltiple.
  2. Detenga y reinicie el servidor de aplicaciones y vuelva a intentar la operación.
  3. Asegúrese de que las versiones de código del cliente y del servidor son las mismas.

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rtrb_ejbaccessprobs
File name: rtrb_ejbaccessprobs.html