Sonar es una plataforma que nos permite gestionar la calidad de nuestro código fuente, utilizando para esta tarea diferentes herramientas como pueden ser (Checkstyle, PMD, Cobertura, etc. presentándonos un resumen del análisis de manera unificada. Para esta entrega os compartiré los pasos necesarios para realizar una instalación de esta herramienta ,utilizando un servidor de Aplicaciones Jboss 5.1 AS.
Para la instalación de Sonar es necesario realizar los siguientes pasos de configuración.
-
Descargamos el war de sonar
# wget URL http://dist.sonar.codehaus.org/sonar-2.3.zip
-
Descomprimimos el fichero ejecutando el siguiente comando:
# unzip sonar-2.3.zip
-
Editamos el fichero de configuración de sonar.
# vi /opt/sonar.2.3/conf/sonar.properties
-
Efectuamos los siguientes cambios en el fichero sonar.properties
Comentamos lo siguiente:
#Configuración base de datos Derby
#sonar.jdbc.url: jdbc:derby://localhost:1527/sonar;create=true
#sonar.jdbc.driverClassName: org.apache.derby.jdbc.ClientDriver
#sonar.jdbc.validationQuery: values(1)
Descomentar lo siguiente:
#----- Oracle 10g/11g
# Comment the embedded database and uncomment the following lines to use Oracle
sonar.jdbc.url: jdbc:oracle:thin:@IP:Puerto/ORACLE_SID
sonar.jdbc.driverClassName: oracle.jdbc.driver.OracleDriver
sonar.jdbc.validationQuery: select 1 from dual
#----- Global database settings
sonar.jdbc.username: usuario
sonar.jdbc.password: password
sonar.jdbc.maxActive: 10
sonar.jdbc.maxIdle: 5
sonar.jdbc.minIdle: 2
sonar.jdbc.maxWait: 5000
sonar.jdbc.minEvictableIdleTimeMillis: 600000
sonar.jdbc.timeBetweenEvictionRunsMillis: 30000
- Descomentar y establecer la siguiente cadena de conexión:
sonar.jdbc.jndiName: sonarDS
-
Creamos los siguientes ficheros dentro de la ruta con el contenido a continuación:
NOTA: Dado que las librerías con las que cuenta Sonar entran en conflicto con las de Jboss aplicaremos los siguiente pasos para resolver el problema.
Persistence.xml: contiene nuestra conexión de base de datos
# cd /opt/sonar.2.3/war/sonar-server/WEB-INF
# touch persistence.xml
# vi persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="sonar" >
<jta-data-source>java:sonarDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="javax.persistence.jdbc.url" value=" jdbc:oracle:thin:IP:Puerto/ORACLE_SID"/>
<property name="javax.persistence.jdbc.password" value="PASSWORD"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.user" value="USER"/>
</properties>
</persistence-unit>
</persistence>
Jboss-classloading.xml: Nos permitirá aislar nuestra aplicación de otras aplicaciones
# cd /opt/sonar.2.3/war/sonar-server/WEB-INF
# touch jboss-classloading.xml
# vi jboss-classloading.xml
<?xml version="1.0" encoding="UTF-8"?>
<classloading
xmlns="urn:jboss:classloading:1.0"
name="sonar.war"
domain="sonar.war"
parent-domain="DefaultDomain"
export-all="NON_EMPTY"
import-all="true"
parent-first="true"
>
</classloading>
NOTA: Link de un blog muy interesante que explica de forma más profunda este tema
http://phytodata.wordpress.com/2010/10/21/demystifying-the-jboss5-jboss-classloading-xml-file/
jboss-web.xml: Nos permitirá cargas nuestras classes en lugar de las del servidor.
# cd /opt/sonar.2.3/war/sonar-server/WEB-INF
# touch jboss-web.xml
# vi jboss-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<class-loading java2ClassLoadingCompliance="false">
<loader-repository>
org.sonar:loader=sonar.war
<loader-repository-config>java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</class-loading>
</jboss-web>
- Podemos descargarnos el driver de conexcion ojdbc6.jar de la siguiente URL:
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
- Incluimos el driver de conexión oracle ojdbc6.jar en la siguiente ruta:
/opt/jboss-eap-5.1/jboss-as/common/lib
-
Descomprimimos los jar localizados en /opt/sonar.2.3/war/sonar-server/WEB-INF/lib
NOTA: Por una extraña razón que no he podido identificar, Jboss tiene problemas descomprimiendo estos jars. Por lo que
para arreglar el problema las descomprimimos
# cd /opt/sonar.2.3/war/sonar-server/WEB-INF/ib
# mkdir temporal
# mv jruby-complete-1.4.0.jar temporal
# unzip jruby-complete-1.4.0.jar
# rm jruby-complete-1.4.0.jar
# cd ..
# mv temporal jruby-complete-1.4.0.jar
jruby-rack-0.9.6.jar
# cd /opt/sonar.2.3/war/sonar-server/WEB-INF/lib
# mkdir temporal
# mv jruby-rack-0.9.6.jar temporal
# unzip jruby-rack-0.9.6.jar
# rm jruby-rack-0.9.6.jar
# cd ..
# mv temporal jruby-complete-1.4.0.jar
-
Generamos el fichero war ejecutando el script:
# cd /opt/sonar.2.3/war/
# ./build-war.sh
el war compilado se encontrará localizado en la ruta:
/opt/sonar.2.3/war/
-
Creamos el fichero de conexión sonar-ds.xml en la siguiente ruta:
# cd /opt/jboss-eap-5.1/jboss-as/server/default/deploy
# touch sonar-ds.xml
# vi sonar-ds.xml
El fichero editado lucirá como:
<?xml version="1.0"?>
<datasources>
<local-tx-datasource>
<jndi-name>sonarDS</jndi-name>
<connection-url>jdbc:oracle:thin:@IP:Puerto/ORACLE_SID</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>USER</user-name>
<password>PASSWORD</password>
<min-pool-size>1</min-pool-size>
</local-tx-datasource>
</datasources>
-
Una vez realizados los cambios, transferiremos el fichero sonar.war a la carpeta de despliegue de Jboss ó desplegar usando el portal de administración de jboss.
