jboss logo

El servidor de apliaciones JBoss tiene un modo sencillo para ejecutar tus aplicaciones, standalone. Para implementar/instalar tu aplicación simplemente copia la carpeta o archivo war al directorio “jboss-home/standalone/deployments” y ejecuta el servidor mediante

cd {JBOSS_HOME}
./bin/standalone.sh

para detener el servidor solo necesitas presionar CTRL+C.

Pero que pasa si necesitas que se siga ejecutando en el fondo, podemos utilizar nohup, disown o screen.

En este caso para detener el servidor necesitamos ejecutar el siguiente comando

{JBOSS_HOME}/bin/jboss-cli.sh --connect command=:shutdown

y finalmente para reiniciar el servidor podríamos crear un script de la siguiente manera

#!/bin/bash
#
# detener jboss as
{JBOSS_HOME}/bin/jboss-cli.sh --connect command=:shutdown
#
# Aquí podrías establecer algunas variables de ambiente para tu aplicación, p.ej.
# export DATABASE_URL="jdbc:oracle:thin:scott/tiger@localhost:1521:oratest"
# iniciar jboss en modo standalone
{JBOSS_HOME}/bin/standalone.sh

Fuentes:
https://community.jboss.org/thread/165815

Anuncios

Si quieres crear una ubicación común para archivos estáticos -como imágenes, hojas de estilo, etc- en Jboss, puedes crear una carpeta con la terminación .war en el nombre y colocar ahí todos los archivos a los que quieras acceder de forma estática.

En mi caso, necesitaba colocar algunas imágenes. Para esto cree una carpeta llamada static.war y dentro de ella coloqué una carpeta “img” con los archivos necesarios. De esta forma podía utilizar los recursos en alguna página html de la siguiente manera:

    <img src="///static/img/logo-small.png">

Relacionado:
https://community.jboss.org/message/238349 Jboss AS 5

Para la implementación de un sistema de mensajes utilicé los llamados overlay types de GWT. Declaré una clase de la siguiente manera

    public class SystemMessage extends JavaScriptObject {</p><pre><code>    protected SystemMessage() {
    }

    public final native String getId()/*-{
        return this.id;
    }-*/;

    public final native String getHtml()/*-{
        return this.html;
    }-*/;
}
</code></pre><p>

Agregué a esta clase un método para obtener los mensajes del sistema desde un servicio REST

    public static void getMessages(final AsyncCallback<SystemMessage[]> callback) {
        try {
            RequestBuilder rb = new RequestBuilder(RequestBuilder.GET,
                    URLRESTSYSTEMMESSAGES);
            rb.sendRequest(null, new RequestCallback() {</p><pre><code>            @Override
            public void onResponseReceived(Request request,
                    Response response) {
                if (response.getStatusCode() == 200) {
                    JavaScriptObject jsResponse = JSON.decode(response
                            .getText());
                    DSResponse dsResponse = new DSResponse(JSOHelper
                            .getAttributeAsJavaScriptObject(jsResponse,
                                    "response"));
                    if (dsResponse.getStatus() == 0) {
                        JavaScriptObject[] array = JSOHelper
                            .getAttributeAsJavaScriptObjectArray(dsResponse.getJsObj(),
                                        "data");
                        SystemMessage[] messages = (SystemMessage[]) array;
                        callback.onSuccess(messages);
                    }
                } else {
                    callback.onFailure(new Exception(response.getText()));
                }
            }

            @Override
            public void onError(Request request, Throwable exception) {
                callback.onFailure(exception);
            }
        });
    } catch (Exception e) {
        callback.onFailure(e);
    }
}
</code></pre><p>

El servidor nos regresa una respuesta en JSON parecida a la siguiente

    {"response":{ "status": 0, "data": [{"id":"1", "html": "Mensaje 1 
"},{"id":"2", "html": "Mensaje 2 
"}]}}

El problema es que este código no marca errores, incluso funciona correctamente cuando lo ejecuto en DevMode. Pero cuando hice el deploy en un servidor JBoss e intenté ejecutarlo, simplemente no me mostraba los mensajes pero tampoco registraba algún error en la consola. Después de muchísimas líneas de log.info() llegué a la conclusión que el problema era el casting del array. Intenté hacer un ‘cast’ de un array de tipo JavascriptObject[] a uno de tipo SystemMessage[]

    SystemMessage[] messages = (SystemMessage[]) array;

Para hacer el casting de un array en Java tenemos que hacer el casting elemento por elemento.

    SystemMessage[] messages = new SystemMessage[array.length];
    for(int i=0; i<array.length; i++){
        messages[i] = (SystemMessage) array[i];
    }

Nota: intenté utilizar el método Arrays.copyOf() pero éste no ha sido implementado en GWT. Si intentas utilizarlo te arrojará una error parecido al siguiente

The method copyOf(JavaScriptObject[], int, Class) is undefined for the type Arrays

Recientemente actualizamos nuestro servidor de aplicaciones -JBoss- a la versión 7.1.0. Ésta versión tiene muchisímas mejoras en comparación con la que teníamos. El problema es que la estructura del servidor sufrió varios cambios que debes tomar en cuenta si quieres migrar tus aplicaciones de JBoss AS5 o AS6 a JBoss AS7.

A nosotros nos aparecía un error parecido al siguiente:

Class Path entry ridl.jar in “/content/tsj.web.os.war/WEB-INF/lib/jurt-2.3.0.jar”

La librería que menciona, jurt-2.3.0.jar, es una dependencia de la librería JODConverter que utilizamos para convertir documentos RTF a PDF.
El problema es que dicha librería contiene la siguiente línea en el archivo de manifesto -indicando que deben cargarse ciertas librerías para su correcto funcionamiento-

Class-Path: ridl.jar unoloader.jar ../../lib/ ../bin/

La solución al error es remover dicha línea. No olvides dejar una línea en blanco al final del archivo despúes de modificarlo.

Recientemente he comenzado a utilizar Maven.

En un proyecto en el que utilizo GWT, ejecutaba el comando “mvn clean package” para generar un archivo war que pudiera instalar en Jboss, pero cada vez que ingresaba en mi navegador a la aplicación me aparecía el siguiente error:

GWT module ‘averiguaciones_standalone’ may need to be (re)compiled

Pues hice lo que me pedía, presioné el botón GWT Compile para recompilar el proyecto

Volví a generar el war pero seguía sucediendo lo mismo.

Se supone que el plugin maven-gwt-plugin compila los módulos según se requiera o lo podemos obligar a realizar la compilación de la siguiente manera

mvn clean package -Dgwt.compiler.force=true

Esto tampoco funcionó. Intente  ejecutar “mvn clean compile” varias veces e incluso “mvn clean”, “mvn clean install”, etc. Pero no tuve éxito.

Finalmente me di cuenta que si borraba la carpeta src/main/webapp/<module> y volvía a ejecutar “mvn clean package” ya funcionaba correctamente.

El problema es que el plugin maven-resources-plugin copiaba los archivos compilados por GWT Compile (src/main/webapp/<module>) sustituyendo los archivos compilados por el maven-gwt-plugin y cómo la firma de los archivos no coincidía, pues me pedía recompilar.

Fuentes:

http://mojo.codehaus.org/gwt-maven-plugin/
http://groups.google.com/group/codehaus-mojo-gwt-maven-plugin-users/
http://code.google.com/webtoolkit/doc/1.6/FAQ_DebuggingAndCompiling.html

Para publicar los reportes creados con BIRT en un servidor de aplicaciones no hay nada más fácil que utilizar el Report Viewer. En JBoss AS7 es tan sencillo como copiar el archivo birt.war -que viene con el BIRT Runtime– en el directorio {$as7home}/standalone/deployments, abrir el archivo birt.war y agregar el reporte que deseas.

Una vez hecho esto, abres el navegador y accedes a http://localhost:8080/birt/frameset?__report=rptSentenciasPendientes.rptdesign
Obviamente tienes que cambiar el parámetro “__report” por el nombre de tu reporte. Listo, ya deberías ver tu reporte!

En mi caso me arrojaba el error

org.eclipse.birt.report.engine.api.EngineException: Can not load the report query: 104. Errors occurred when generating the report document for the report element with ID 104. (Element ID:104)
    at org.eclipse.birt.report.engine.data.dte.DataPresentationEngine.doExecuteQuery(DataPresentationEngine.java:160)
    at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:267)
    at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1905)

Supe entonces que había un problema al ejecutar una consulta. Recordé que los datos provienen de una base de datos de Oracle y por lo tanto necesitaba colocar el controlador de la base de datos, ojdbc6.jar, en el directorio WEB-INF/lib.

Con ello los errores desaparecieron y el reporte se generó correctamente.

JBoss AS7 – Configurar SSL

septiembre 12, 2011

Despues de instalar JBoss AS7

ejecuta el comando

keytool -genkey -alias tomcat -keyalg RSA

ingresa los datos que se te piden y recuerda muy bien la contraseña, la vamos a necesitar en el siguiente paso.
Abre el archivo jbossas_home/standalone/configuration/standalone.xml y busca la línea donde dice

<connector name=”http” protocol=”HTTP/1.1″ socket-binding=”http” scheme=”http”/>

e inmediatamente debajo pon

<connector name=”https” protocol=”HTTP/1.1″ socket-binding=”https” scheme=”https” enabled=”true”>
<ssl name=”https” password=”s3cr3t”/>
</connector>

Listo, ya puedes acceder a tus aplicaciones instaladas en JBoss AS mediante SSL. Para probarlo ingresa en tu navegador https://localhost:8443. Si ya tienes instalada una aplicación, p. ej. jbossas_home/standalone/deployments/rest-easy-sample.war, ingresa https://localhost:8443/rest-easy-sample
La primera vez te va a mostrar una advertencia debido a que nosotros mismos emitimos el certificado, acepta la excepción de seguridad para poder acceder.

Fuentes:
http://community.jboss.org/message/625211?tstart=0
https://docs.jboss.org/author/display/AS7/HTTPS+Connectors