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
- Mensaje java.lang.NoSuchMethodError
- javax.naming.NameNotFoundException: No se ha encontrado el nombre nombre en el mensaje de contexto "local" cuando se intentó el acceso
- Se ha generado BeanNotReentrantException
- Se emite CSITransactionRolledbackException / TransactionRolledbackException
- La llamada ha fallado y en el archivo de registro de la JVM se ha encontrado la excepción: El método de rastreo de la pila que comienza por EJSContainer del método E Bean ha generado la excepción [nombre_excepción].
- Ha fallado la llamada y en el archivo de registro de la JVM se ha encontrado la excepción: ObjectNotFoundException u ObjectNotFoundLocalException al acceder al EJB de sesión con estado.
- Ha fallado el intento de iniciar el módulo EJB con la excepción "javax.naming.NameNotFoundException dataSourceName_CMP"
Aparece el error La transacción [ID tran] ha superado el tiempo de espera después de 120 segundos al acceder al EJB.
Se emite el mensaje BBOT0003W
- Síntoma:CNTR0001W: No se ha podido desactivar un bean de sesión con estado.
Síntoma: org.omg.CORBA.BAD_PARAM: El objeto Servant no es del tipo esperado. Código menor: 4942F21E Finalizado: No se ha devuelto al programa cliente al intentar ejecutar un método EJB
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.
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]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
- 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:
- Compruebe si el problema se ha identificado y documentado utilizando los enlaces de Diagnóstico y solución de problemas: recursos de aprendizaje.
java.lang.NoSuchMethodError
Al intentar invocar un método en un bean de sesión, se ha producido un java.lang.NoSuchMethodError.
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:. 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
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.
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.
- 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"
- 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.
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.
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]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
La transacción [ID_tran] ha superado el tiempo de espera después de 120 segundos al acceder a un enterprise bean
- 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 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]](../images/ngzos.gif)
Se emite el mensaje BBOT0003W
- 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:
- Vaya a
- Seleccione la página de propiedades del Servicio de transacciones
- Aumente el valor de Tiempo de espera de actividad total de transacción
- 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]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
[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]](../images/ngzos.gif)
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]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
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.
- Cambie el esquema de carga de clases del servidor de aplicaciones a múltiple.
- Detenga y reinicie el servidor de aplicaciones y vuelva a intentar la operación.
- Asegúrese de que las versiones de código del cliente y del servidor son las mismas.