Mostrando entradas con la etiqueta jboss. Mostrar todas las entradas
Mostrando entradas con la etiqueta jboss. Mostrar todas las entradas

29 noviembre 2010

Como integrar JDBC-tools sobre un datasource dentro de JBoss AS 5.1

En este post se explica una forma de integrar la herramienta JDBC-tools con el servidor JBoss para el uso de datasource manejados por éste.

El fin de esta integración es poder loguear las ejecuciones realizadas por el datasource, el cuál utiliza la aplicación, sobre el driver de la base.
El ambiente, sobre el cual se ha realizado/comprobado esta configuración, consta de las siguientes herramientas:

  • JBoss Application Server 5.1.0
  • JDBC-tools 1.1.1
  • JDK 1.6 update 17 a 20



Pasos a seguir:



Paso 1.
Conseguir la herramienta JDBC Tools la cual puede descargarse de su sitio http://jdbc-tools.sourceforge.net.


Paso 2.
Dentro del distribuible se encuentran los archivos que se deben incluir en el servidor de la siguiente manera,


Paso 3.
Ubicar las librerías jdbc-tools y jdbc-listener en el directorio del servidor server\\lib.


Paso 4.
Ubicar los archivos de configuración jdbc-tools.properties y jdbc-listener.properties en el directorio server\\conf.


Paso 5.
Modificar el archivo jdbc-listener.properties como se muestra más adelante en el punto jdbc-listener.


Paso 6.
Modificar el archivo jdbc-tools.properties como se muestra en el sub-punto jdbc-tools.


Paso 7.
Modificar la definición del datasource como se ejemplifica en el punto Datasources<./p>

Una vez realizados estos pasos, toda ejecución sobre el driver, a través del datasource en cuestión, se logueará en un archivo de nombre jdbc-logging.log en el directorio bin del servidor. Notar que se realiza un respaldo automático de este archivo, cada vez que se vuelve a iniciar el servidor, en archivo con el mismo nombre a los que se le concatena la fecha y hora.

Aquí debajo se detallas los archivos mencionados en los pasos anterios.


JDBC-listener.properties

En este archivo deben estar definido únicamente las siguientes variables.



jdbc.listener.classes: com.facdatum.jdbc.logger.JDBCLogger
driver.delegate: oracle.jdbc.driver.OracleDriver
datasource.delegate: java:Delegate (sustituir por el nombre del datasource a través del cual se conecta la aplicación)
datasource.props: serverName:localhost,portNumber:1521
jndi.factory: org.jnp.interfaces.NamingContextFactory
jndi.context.url: jnp://localhost:1099


JDBC-tools.properties

En este archivo deben estar definido únicamente las siguientes variables.

jdbc.listener.classes: com.facdatum.jdbc.logger.JDBCLogger
driver.delegate: oracle.jdbc.driver.OracleDriver
datasource.delegate: java:Delegate (sustituir por el nombre del datasource a través del cual se conecta la aplicación)
datasource.props: serverName:localhost,portNumber:1521
jndi.factory: org.jnp.interfaces.NamingContextFactory
jndi.context.url: jnp://localhost:1099
driver.path oracle14.jar
driver.class oracle.jdbc.driver.OracleDriver
driver.url jdbc:oracle:thin:@localhost:1521:XE
driver.user nombre de usuario en la base de datos
driver.password password del usuario en la base de datos
valores por defecto para las variables: jdbc.include, jdbc.exclude, app.include, app.exclude, jdbc.duration.filter.limit, jdbc.duration.filter.change, jdbc.duration.store.filepath, log.levels, log.path, log.filename, call.include, call.exclude y jdbc.planner.repeat.



Datasources
<local-tx-datasource>
<jndi-name><datasource_nombre></jndi-name>
<connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name><db_usuario_nombre></user-name>
<password><db_usuario_pass></password>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
<valid-connection-checker-class-name>
org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker
</valid-connection-checker-class-name>
<exception-sorter-classname>
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
</exception-sorter-classname>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</local-tx-datasource>

<local-tx-datasource>
<jndi-name><datasource_nombre></jndi-name>
<connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url>
<driver-class>com.facdatum.jdbc.listener.driver.DataSourceListener</driver-class>
<user-name><db_usuario_nombre></user-name>
<password><db_usuario_pass></password>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
<exception-sorter-classname>
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
</exception-sorter-classname>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</local-tx-datasource>


12 junio 2009

Eclipse no detiene los servidores correctamente

Para las versiones de Eclipse Ganymede (3.4.x), al mandar a detenerse un servidor (simple Stop sobre el servidor en la perspectiva Servers), luego de un tiempo se mostraba un error notificando que el servidor no responde y así daba la impresión de que no se lograba detener.

Posiblemente este error puede conllevar a que el IDE muestre una ventana con el siguiente mensaje:
Server [JBoss v5.0 at localhost] is not responding. Do you want to terminate this server? Click Ok to terminate the server or click Cancel to continue waiting.

Claro esta que para este caso se había definido un runtime de servidor JBoss v5.

El problema en este caso particular era que la ruta con la que configuraba los runtimes (o Server Runtime Enviroments) era relativa. Esto se hacía a fin de hacer más portable dichas configuraciones pero hubo que restringirse a utilizar rutas absolutas para solucionarlo y seguir el paso, o salir de este.., como se prefiera decir.

Por si a caso estas, con demás configuración de los runtime definidos, se pueden editar/agregar/remover en la sección Windows >> Preferences >> Server >> Runtime Environments


También vale aclarar que el mensaje, como se puede apreciar, no da pie del error en cuestión y puede aplicar a otro problema. Por ejemplo que el time out, que se le dió al server creado para ese runtime, no sea tiempo suficiente para que este se detenga, e igual salta el mensaje aunque logre detenerse tarde o temprando.
Esto lo modifican en la sección Timeouts de la definición del servidor, digamos en el Overview; y no se esta haciendo referencia a la configuración del runtime, estas son cosas diferentes.

11 junio 2009

Error al iniciar JBossAS v5

La situación es la siguiente:
Estaba trabajando con Eclipse Ganymede 2 (3.4.2). En este configure runtimes para las versiones 5.0.0, 5.0.1 y 5.1.0 de JBoss Application Server (o simplemente JBossAS).
Todo normal pero sucedía que al momento de iniciar los servidores, indistintanmente de la versión, saltaba la siguiente excepción entre otras:

"...
17:10:57,000 WARN [AnnotationCreator] No ClassLoader provided, using TCCL: org.jboss.managed.api.annotation.ManagementComponent
17:10:57,125 WARN [AnnotationCreator] No ClassLoader provided, using TCCL: org.jboss.managed.api.annotation.ManagementComponent
17:10:57,156 ERROR [AbstractKernelController] Error installing to Instantiated: name=TransactionManager state=Described
java.lang.ExceptionInInitializerError: java.net.MalformedURLException: unknown protocol: e
at com.arjuna.ats.arjuna.common.arjPropertyManager.(arjPropertyManager.java:70)
..."

Por algún motivo que no encontré, se da este problema si la ruta donde ubicamos el servidor jboss contiene espacios. Si bien, estos al momento de correr el jboss se transforman a su caracterización '%20', el problema de operar con espacios persiste.

La solución entonces es ubicar el servidor bajo una ruta que NO contenga espacios

Como comentario, no he logrado reproducir dicho problema para la versión 4.2.x del JBossAS y por eso el título de la publicación.

12 mayo 2009

Poblema al desplegar (deploy) con JasperReports+JSF+JBoss

Tenemos las siguiente situación:
  • Un poyecto Web con páginas JSF (JavaServer Faces) trabajando con implementaciones para las versiones 1.0 y 1.2 de faces.

  • JasperReports como tecnología para la generación/descarga/impresión de reportes con la cual desarrollaremos utilidades en el propio proyecto.

  • Servidor JBoss sobre el cual levantaremos el modulo web; este caso aplica para las versiones 4.2.x y 5.0.x liberadas hasta la fecha de esta publicación.

Al tratar de deployar el proyecto Web, en el cual se incluyen backerbeans y/o servlets que desarrollan utilizando JasperReports, el servidor cae en un error cíclico repitiendo combinaciones de las secuencias siguientes:
"...
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
..."

"...
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:638)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:444)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:310)
at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:410)
at com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:468)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:140)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
12:08:43,500 ERROR [lifecycle] JSF1054: (Phase ID: RENDER_RESPONSE 6, View ID: /Jasper01.jsf) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@1d9dbfc]
..."

En consecuencia, nunca logra deployar (desplegar) el proyecto y así inicializar el servidor correctamente.

El problema surge, por algún motivo extraño por el momento, cuando se trabaja con páginas JSF con extensión .jsf. Así que lamento no poder justificar dicho problema.

Pero sí puedo presentarles una solución bien sencilla de realizar al menos. Esta pasa por trabajar/definir todas las páginas con extensión ".jsp" únicamente.


16 febrero 2009

El JBoss 5.0 runtime de Eclipse da problemas

Partiendo del error:
"Missing classpath entry C:\desarrollo\jboss-5.0.0.GA\server\default\lib\mail.jar"

Para definir un ambiente de tiempo de ejecución de servidor (server runtime enviroment), cualquiera sea este, en eclipse debemos realizar los siguientes pasos.

1.- Ir a menú Window >> Preferences >> Server >> Runtime Environments.
2.- Agregar el servidor (Add...)
3.- Elejir el servidor y su versión (JBoss v5.0 en nuestro caso)
4.- Elejir el Java Runtime Environments (JRE) sobre el cual correra.
5.- Elejir la ubicación del servidor....

Aquí en el paso 5 es donde se da el problema.
Cuando se quiere seleccionar una instalación completamente válida del JBoss 5 (5.0.0 a la fecha en que escribo esto) nos dice que no ubica un jar!?.

Lo que sucede es que esta mal definido el criterio de validación del plugin de servidores JBoss. No se el nombre del plugin pero sí donde se ubica, que es en org.eclipse.jst.server.generic.jboss_1.5.205.v.. dentro de eclipse/plugins.
El criterio pasa por verificar que sea correcta la estructura de directorios del servidor y más precisamente en ubicar el jar mail.jar.
Las definiciones de validación del plugin son previas a la liberación de la versión 5 estable así que tampoco digamos que el eclipse es una porquería... Y ahora paso a decir como solucionarlo.

Paso 1.
Abrir el siguiente archivo dentro de los plugin instalados del Eclipse.
"CARPETA_ECLIPSE\plugins\org.eclipse.jst.server.generic.jboss_1.5....\servers\jboss5.serverdef"

Paso 2.
En el archivo anterior cambiar las siguientes dos líneas (en negrita se marca la modificación):
"<exclude name="server/default/lib/mail.jar">" y
"<archive path="${serverRootDirectory}/server/default/lib/mail.jar">"

Por las siguientes dos líneas respectivamente:
"<exclude name="common/lib/mail.jar">" y
"<archive path="${serverRootDirectory}/common/lib/mail.jar">"

Paso 3.
Una vez que se reinicie o abra el eclipse, luego de la modificación del plugin, se habrán efectuado los cambios.


Para que a nadie se le de por reportar el bug dejó este link

Actualización (15/05/09):
El día de hoy he descubierto que una más reciente versión del plugin soluciona el inconveniente que explique anteriormente para la versión 1.5.205.v200805140145. Dicha versión es la 1.5.206.v20090115... Hay que estar más pendiente de las actualizaciones.
También aprovecho para mencionar que para las milestone del Eclipse Galileo, se incluyo la versión 1.6.0 de dicho plugin la cual tampoco tiene problemas con JBoss v5.0

Nro de visita Cantidad de visitas recibidas