martes, noviembre 29, 2005

Configuración de un nuevo "topic" en JBoss

Para configurar una nueva cola o un nuevo asunto en el servidor de mensajería de JBoss podemos editar el fichero /opt/jboss-4.0.3/server/default/deploy/jms/jbossmq-destinations-service.xml y añadir una nueva entrada como la siguiente:

<mbean code="org.jboss.mq.server.jmx.Topic"
name="jboss.mq.destination:service=Topic,name=Indicaciones">
<depends name="DestinationManager">jboss.mq:service=DestinationManager</depends>
<depends name="SecurityManager">jboss.mq:service=SecurityManager</depends>
<attribute name="SecurityConf">
<security>
<role name="guest" read="true" write="true">
<role name="publisher" read="true" write="true" create="false">
<role name="durpublisher" read="true" write="true" create="true">
</security>
</attribute>
</mbean>


No hace falta rearrancar el servidor de JBoss ya que reconoce los cambios dinámicamente.


Para busquedas de diferencias en directorios en Linux

El diff de Linux permite comparar directorios completos analizando las diferencias que hay en los ficheros que contienen, no como sucede con otros Unix (Tru64 o Solaris) que para comparar directorios hay que hacerse un script para ver las diferencias fichero por fichero.

La forma de hacerlo es:
diff --recursive --brief /tmp/ruta1 /temp/ruta2

Y el resultado es de este estilo:
Los ficheros /tmp/ruta1/comunicaciones/Suscriptor.java y /tmp/ruta2/comunicaciones/Suscriptor.java son distintos
Sólo en /tmp/ruta1: Config.java

lunes, noviembre 28, 2005

Configuración de tarjeta de vídeo y monitor en Linux

Hoy he tenido que cambiar el monitor de 15" HP que tenía en el equipo por un nuevo monitor plano de 21 pulgadas. Además, he tenido que cambiar la configuración de la tarjeta gráfica e instalarle el software específico.

Configuración de la tarjeta Intel 82915G
La tarjeta de vídeo instalada en una Intel 82915G. Me bajé los drivers de la dirección
http://www.opendrivers.com/driver/219915/intel-extreme-graphics-driver-20040607-linux-free-download.html y después de extraer el contenido, ejecuté el script install.sh y seguí los pasos correspondientes.

Para ver que después del arranque la tarjeta de vídeo estaba definida en el sistema utilicé el Navegador de Software que está en: Aplicaciones->Herramientas del Sistema->Navegador de Hardware

Configuración del monitor Samsung SyncMaster 213T
Con el monitor tuve un problema parecido porque la configuración original estaba para un monitor HP de 15 pulgadas. Como el sistema no reconocía el nuevo monitor he tenido que editar a mano el fichero de configuración de X en Red Hat gedit /etc/X11/xorg.conf & y cambiar la configuración del monitor por una configuración que encontré en una página web (http://www.unixgods.org/~tilo/linux_Nmonitors.html)

La configuración correspondiente al monitor quedó como sigue:

Section "Monitor"

# Max Pixel Clock Rate 162 MHz
# For Analog Side ONLY:
# For Digital Side ONLY:
# VertRefresh 56.0 - 60.0
# HorizSync 30.0 - 75.0
Identifier "Monitor0"
VendorName "Samsung"
ModelName "213T"
HorizSync 30.0 - 81.0
VertRefresh 56.0 - 75.0
ModeLine "1600x1200" 137.6 1600 1672 2032 2176 1200 1202 1214 1240
ModeLine "1600x1200" 162.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
ModeLine "1600x1200" 59.9 1600 1616 1968 2080 1200 1200 1204 1253
ModeLine "1600x1200@74" 130.4 1600 1648 1680 1760 1200 1202 1206 1235
Option "dpms"
# -- 1600x1200 Modelines : --
# 51 Hz
EndSection

Después de arrancar de nuevo, tuve que cambiar la configuración de la pantalla en Aplicaciones->Configuración del sistema->Visualización y finalmente cambiar la resolución predeterminada en Aplicaciones->Preferencias->Resolución de la pantalla

Depués de los cambios se ve todo mucho más claro :-)

viernes, noviembre 25, 2005

Hibernate y las fechas

Hoy me ha pasado una cosa con Hibernate que me ha hecho perder el tiempo a lo tonto.

El problema se manifestaba con una excepción al insertar un objeto en un TreeSet. La excepción decía que no se podía hacer un cast de java.sql.Timestamp a java.util.Date.

No se de donde salía el Timestamp. En la clase el campo era de tipo java.util.Date, y el setter y el getter solo usaban Date. Puse una traza para mostrar el nombre de la clase utilizado en el setter y me encuentro que parte de los valores los inserta como java.util.Date y parte como java.sql.Timestamp. Sigo sin saber el motivo.

He modificado el campo del tipo de dato en el fichero de mapeo de la clase porque tenía puesto java.util.Date y le puse es tipo usado por Hibernate, date. pero tampoco dió resultado.

Al final, como necesitaba una solución rápida para avanzar con la demo, lo que hice fue modificar el setter que quedó como algo así:

public void setMomentoDeLaMedida(Date momentoDeLaMedida) {
if (momentoDeLaMedida instanceof "java.sql.Timestamp") {
Timestamp timestamp = (Timestamp) momentoDeLaMedida;
Date nuevaFecha = new Date(timestamp.getTime());
this.momentoDeLaMedida = nuevaFecha;
} else {
this.momentoDeLaMedida = momentoDeLaMedida;
}
}

Con ese cambio por lo menos ya no salía la excepción y ya podía continuar con mis pruebas de comunicaciones con el servidor.


miércoles, noviembre 23, 2005

Problemas de JBoss con /etc/hosts

He estado toda la tarde perdiendo el tiempo intentando enviar un mensaje de JMS por medio de un servidor de mensajería de JBoss que se ejecutaba en otra máquina. El resultado era que en la aplicación que enviaba el mensaje me salía una excepción indicando que la conexión estaba rechada. Sin embargo, cuando realizaba el envío desde la máquina en que corría el servidor de JBoss, el resultado era positivo, tanto si movía la aplicación a la máquina en la que se ejecutaba el servidor, como si ponía el servidor a ejecutarse en la máquina en la que tenía la aplicación.

Debido a mi falta de conocimiento sobre administración de JBoss desconocia el origen del problema y tuve que "googlear" bastante hasta encontrar cual era el origen del problema (http://gearon.blogspot.com/2005_09_01_gearon_archive.html).

El problema estaba en que en el /etc/hosts del servidor la definición del nodo local era la siguiente:

127.0.0.1 localhost.localdomain TSAD2 localhost
192.168.0.62 TSAD2
192.168.0.67 cliente.tsad

cuando debería ser:

127.0.0.1 localhost.localdomain localhost
192.168.0.62 TSAD2
192.168.0.67 cliente.tsad

Una sutíl diferencia, pero muy grande en cuanto al resultado final.


Por si a alguien le interes esta era la excepción que me salía enviando el mensaje de JMS desde un equipo remoto.

Exception in thread "main" javax.naming.CommunicationException [Root exception is java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:707)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at TopicSendRecvClient.setupPubSub(TopicSendRecvClient.java:52)
at TopicSendRecvClient.sendRecvAsync(TopicSendRecvClient.java:66)
at TopicSendRecvClient.main(TopicSendRecvClient.java:92)
Caused by: java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:574)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:94)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
... 5 more
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:364)
at java.net.Socket.connect(Socket.java:507)
at java.net.Socket.connect(Socket.java:457)
at java.net.Socket.(Socket.java:365)
at java.net.Socket.(Socket.java:178)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:569)
... 10 more