instalar archetype jboss-javaee6-webapp
de maven >>
instalar contenedor jboss7.1 >>
nótese que en la configuración del runtime environment por eclipse (jboos tools) hay que seleccionar el configuration file standalone.xml (o domain), de lo contrario se cae así >> (por algún motivo funciona sólo la primera vez sin ésto…)
instalar base de datos postgresql vía package manager
lo primero distinto a JBoss6 son los datasource >> hay que hacer dos cosas, instalar el driver jdbc y luego configurar el datasource.
el driver se puede instalar como un jar a deployar, o como módulo del servidor. lo primero es recomendado para facilidad de instalación en el cluster, etc.
lamentablemente el link de más arriba sólo explica cómo instalarlo como módulo (porque mysql no se puede usar como deploy, lero lero). para ver lo del deploy, el link es éste >> que en el fondo nos manda a ironjacamar >>
si estoy entendiendo bien, hay que bajar el driver y copiarlo en el directorio deploy de jacamar, que en jboss sería mmm no sé exactamente, pero se puede subir como deployment en la administration console.
en seguida, hay que definir el datasource que lo referencia. ésto lo haremos en standalone.xml en el subsystem datasources. el xml se encuentra en $JBOSS7/standalone/configuration. le pondremos la configuración XA >> suponiendo que JBoss usará JTA para las transacciones
<xa-datasource jndi-name="hxDS" pool-name="hxDS"> <xa-datasource-property name="ServerName">localhost</xa-datasource-property> <xa-datasource-property name="PortNumber">5432</xa-datasource-property> <xa-datasource-property name="DatabaseName">db</xa-datasource-property> <xa-datasource-property name="User">qtimporta</xa-datasource-property> <xa-datasource-property name="Password">sapocx</xa-datasource-property> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"></valid-connection-checker> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"></exception-sorter> </validation> </xa-datasource>
pero no anda ni pa atrás, porque éste es la configuración para jacamar a secas. en jboss tiene que tener el nomnbre del driver, etc. >> así que mejor manejarlo por la consola de administración también >>>>
al respecto:
- el nombre JNDI debe comenzar por java:jboss/datasources
- la url de conexión es del tipo jdbc:postgresql://localhost:5432/template1
ahora creo que no parte simplemente porque ni la base de datos ni el usuario existen, así es que un poco de configuración de postgre
hay una consola de postgre asociada al usuario >>, desde la que hay comandos para añadir usuarios, etc. para irnos por la fácil, vamos a probar (yo y yo) phpPgAdmin, una interfaz similar a phpMyAdmin.
pa una lista completa de clientes, véase >
la instalamos con el package manager (sudo apt-get install phppgadmin) y la interfaz queda en http://localhost/phppgadmin/.
ya, shit, igual me tengo que crear un usuario. a ver.
el usuario por defecto es postgres, al cual hay que crearle una contraseña con passwd.
después supuestamente >> hay que cambiarse a root, y desde éste a postgres y con éste ejecutar psql template1, pero me huevea con
psql: no se pudo conectar con el servidor: No existe el fichero o el directorio ¿Está el servidor en ejecución localmente y aceptando conexiones en el socket de dominio Unix «/var/run/postgresql/.s.PGSQL.5432»?
parece que se debe a que no tengo un directorio donde guardar las bd. lo creamos
mkdir -p /usr/local/pgsql/data sudo chown -R postgres:postgres /usr/local/pgsql/
luego con posgres
/usr/lib/postgresql/9.1/bin$ ./initdb -D /usr/local/pgsql/data ./postgres -D /usr/local/pgsql/data
con eso queda escuchando pero no en background. en todo caso ya puedo ejecutar psql template1. ahora, tiene que haber una manera de no tener que estar iniciando la base de datos así… seguir investigando >>>>
en todo caso ya puedo crearme el usuario para conectar desde el datasource
createuser -A -d -P -h host -U postgres nuevo_usuario
(y ya funciona phppgadmin!)
y en efecto, modificando el persistence.xml en la app
<jta-data-source>jboss/datasources/hxDS</jta-data-source>
puedo importar mi seed data a postgresql
pa los curiosos, el subsystem quedó así
<datasource jta="true" jndi-name="java:jboss/datasources/DS" pool-name="DS" enabled="true" use-ccm="false"> <connection-url>jdbc:postgresql://localhost:5432/hx</connection-url> <driver-class>org.postgresql.Driver</driver-class> <driver>postgresql-9.1-902.jdbc3.jar</driver> <security> <user-name>****</user-name> <password>****</password> </security> <validation> <validate-on-match>false</validate-on-match> <background-validation>false</background-validation> </validation> <statement> <share-prepared-statements>false</share-prepared-statements> </statement> </datasource>
postgres definitivo
ya pa seguir, me da paja tener que estar iniciando la bd con el usuario postgres a cada vez, ¿cómo lo hacemos funcionar con service?
qué hijo de p! al parecer todo el problema consiste en que además de la versión 9.1, también tengo instalada la 8.4 (sepa moya por qué), entonces el cluster está corriendo en el puerto 5433, por lo que sí puedo conectarme con
psql -p 5433 template1
quizás todo se arregla mandando el 8.4 al carajo: como root:
pg_dropcluster 8.4 main pg_dropcluster --stop 9.1 main pg_createcluster 9.1 main service postgresql start
como postgres:
psql template1 psql (9.1.4, servidor 9.1.5) Digite «help» para obtener ayuda. template1=#
hell yea!
dependencias
Como el archetype es pa jboss 6 (supongo será por eso), tengo errores de inicialización (aunque no impiden al proyecyo base funcionar) intentaremos llegar a un pom.xml ad-hoc.
Le llevamos
-
23:55:58,660 INFO [org.jboss.weld.ClassLoading] (MSC service thread 1-6) WELD-000119 Not generating any bean definitions from org.jboss.logging.Log4jLogger because of underlying class loading error 23:55:58,661 INFO [org.jboss.weld.ClassLoading] (MSC service thread 1-6) catching: org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class org.jboss.logging.Log4jLogger Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Priority
-
(MSC service thread 1-6) catching: org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class org.jboss.logging.Slf4jLogger Caused by: java.lang.NoClassDefFoundError: Lorg/slf4j/Logger; INFO [org.jboss.weld.ClassLoading] (MSC service thread 1-6) catching: org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class org.jboss.logging.Slf4jLocationAwareLogger
-
WELD-000119 Not generating any bean definitions from com.numerica.hx.anamnesia.test.MemberRegistrationTest because of underlying class loading error Caused by: java.lang.NoClassDefFoundError: org/jboss/shrinkwrap/api/asset/Asset
Todos los cuales son errores en las dependencias importadas por Arquillian, y se resuelven importando la última versión siguiendo su doc >>
Darle un vistazo a JBoss Forge