Introducción
Este es el comienzo de una serie de artículos en los que explico cómo utilizar Apache Wicket junto con Open Liberty. Hace algún tiempo inicié dos aplicaciones diferentes para manejar el comando dar, tanto en entorno de escritorio como web. Mi primer enfoque fue utilizar el framework Groovy Griffon para escritorio y Apache Wicket para la web. Al final, cambié Griffon por ScalaFX y Apache Tomcat por Open Liberty.
Mientras que ScalaFX fue elegido porque me siento más cómodo usando Scala, la decisión de utilizar Open Liberty fue más por aprender algo distinto. Tras leer comparativas entre servidores de aplicaciones, parecía que Open Liberty ofrecía un mejor rendimiento en comparación con otros entornos Java (mis opciones anteriores siempre habían sido Apache Tomcat y Payara). Así que quise comprobar por mí mismo si esto era cierto, a pesar de que adoptar software de IBM me daba una falsa sensación de traición al espíritu del código abierto.
¡Así que empecemos! ;)
Creación del proyecto Apache Wicket
Apache Wicket y Open Liberty. ¿Por dónde empezar?
- Con Maven, ejecuta el siguiente comando adaptando los parámetros necesarios para tu proyecto:
mvn archetype:generate -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart \
-DarchetypeVersion=10.1.0 -DgroupId=net.sxgio -DartifactId=dar-web-app -DarchetypeRepository=https://repository.apache.org/ -DinteractiveMode=false
- Una vez creado el esqueleto del proyecto, puedes limpiarlo un poco y añadir Open Liberty como servidor de aplicaciones en sustitución de Jetty. Comenta las siguientes líneas en tu
pom.xml:
<!-- JAVAX J2EE 8 DEPENDENCY -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
...
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<scope>test</scope>
<version>${jetty9.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jmx</artifactId>
<version>${jetty9.version}</version>
<scope>test</scope>
</dependency>
<!-- descommentar si se necesita soporte para WebSocket
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-server-impl</artifactId>
<version>${jetty9.version}</version>
<scope>test</scope>
</dependency>
Soporte para Open Liberty
- Añade el soporte para Open Liberty como plugin de compilación y comenta el soporte para Jetty:
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>${liberty.version}</version>
<configuration>
<serverName>test</serverName>
</configuration>
<!-- Especificar configuración y ejecuciones para liberty-maven-plugin -->
</plugin>
<!--plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty9.version}</version>
<configuration>
<systemProperties>
<systemProperty>
<name>maven.project.build.directory.test-classes</name>
<value>${project.build.directory}/test-classes</value>
</systemProperty>
</systemProperties>
<jettyXml>${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml</jettyXml>
</configuration>
</plugin-->
Configuración de Open Liberty
Dentro de src/main, crea dos carpetas anidadas llamadas liberty/config. Dentro, añade un nuevo archivo server.xml con el siguiente contenido:
<server description="[NOMBRE DE TU APP]">
<featureManager>
<feature>servlet-4.0</feature>
</featureManager>
<variable name="default.http.port" defaultValue="[PUERTO_HTTP_POR_DEFECTO: 9080]"/>
<variable name="default.https.port" defaultValue="[PUERTO_HTTPS_POR_DEFECTO: 9443]"/>
<variable name="app.context.root" defaultValue="[Raíz en OpenLiberty: wicket-app-1.0-SNAPSHOT]"/>
<!-- tag::httpEndpoint[] -->
<httpEndpoint httpPort="${default.http.port}"
httpsPort="${default.https.port}" id="defaultHttpEndpoint" host="*" />
<!-- end::httpEndpoint[] -->
<webApplication id="WicketApp" location="[archivo war a desplegar: wicket-app-1.0-SNAPSHOT.war]" contextRoot="${app.context.root}" />
</server>
Ejecución de la aplicación
¡Eso es todo! Ahora podemos probar el proyecto Wicket en Open Liberty ejecutando el siguiente comando:
mvn io.openliberty.tools:liberty-maven-plugin:dev
Y accediendo en el navegador a: http://localhost:9080/[app-context-root]