Desde v7.0 puedes desarrollar fácilmente proyectos OpenXava con Kotlin usando OpenXava Studio, Eclipse, IntelliJ IDEA, entre otros.
Kotlin es un lenguaje usado en la mayoría de las aplicaciones para Android y se puede desarrollar sobre JVM o JS. Una de las características es que Kotlin está diseñado para interoperar completamente con la sintaxis de Java, es decir que puedes compilar ambos códigos y que interactuen entre sí sin problemas.
Después de haber creado un proyecto OpenXava (
cómo hacerlo), debes definir la versión de Kotlin en
properties en el archivo
pom.xml ubicado en la carpeta raíz del proyecto:
<properties>
<kotlin.version>1.8.0</kotlin.version>
</properties>
Añade la siguiente dependencia para usar la librería de Kotlin en
dependencies:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
Para compilar proyectos que incluyan código Kotlin y Java, añade lo siguiente en
build:
<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals> <goal>test-compile</goal> </goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<executions>
<!-- Replacing default-compile as it is treated specially by maven -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Replacing default-testCompile as it is treated specially by maven -->
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
<execution>
<id>java-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>java-test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Crea la carpeta
kotlin en
src/main para almacenar el código Kotlin y en la misma carpeta crea el paquete
com.tuempresa.facturacion.modelo para las entidades OpenXava. Quizás debas hacer un
Reload project en Maven para que puedas crear paquetes en la carpeta
kotlin.
Crea una clase Kotlin en el paquete
modelo con el nombre de
Cliente (o un archivo
Cliente.kt en Eclipse u OpenXava Studio):
package com.tuempresa.facturacion.modelo
import org.openxava.annotations.Required
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.Id
@Entity
class Cliente {
@Id
@Column(length = 6)
var numero : Int ?= null
@Required
@Column(length = 50)
var nombre : String ?= null
}
Antes de ejecutar tu proyecto por primera vez debes hacer un
mvn package, en las próximas basta con
mvn compile. Después busca la clase
facturacion dentro del paquete
com.tuempresa.facturacion.run en
src/main/java, y ejecútala. Luego en el navegador ingresa
http://localhost:8080/facturacion e inicia sesión
con admin/admin como usuario/contraseña para ver los resultados.
Crear un botón simple (acción) donde muestra un mensaje, deja la clase Kotlin
MostrarMensaje (
MostrarMensaje.kt) en el paquete
com.tuempresa.facturacion.accion de la carpeta kotlin:
package com.tuempresa.facturacion.accion
import org.openxava.actions.ViewBaseAction
class MostrarMensaje : ViewBaseAction() {
@Throws(Exception::class)
override fun execute() {
addMessage("Hola Mundo!")
}
}
Recuerda que debes declarar la acción en
controladores.xml que se encuentra en
src/main/resources/xava:
<controlador nombre ="Cliente">
<hereda-de controlador ="Typical"/>
<accion nombre ="mostrarMensaje" clase ="com.tuempresa.facturacion.accion.MostrarMensaje" modo ="detail"/>
</controlador>
Una entidad con más características:
package com.tuempresa.facturacion.modelo
import org.openxava.annotations.*
import org.openxava.calculators.CurrentLocalDateCalculator
import org.openxava.calculators.CurrentYearCalculator
import org.openxava.model.Identifiable
import java.time.LocalDate
import javax.persistence.*
@Entity
@View(members="""
anyo, numero, fecha,
datos {
cliente;
detalles;
observaciones
}
"""
)
class Factura : Identifiable() {
@Column(length = 4)
@DefaultValueCalculator(CurrentYearCalculator::class)
var anyo : Int? = null
@Column(length = 6)
var numero : Int? = null
@Required
@DefaultValueCalculator(CurrentLocalDateCalculator::class)
var fecha : LocalDate? = null
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@ReferenceView("Simple")
var cliente : Cliente? = null
@ElementCollection
@ListProperties("producto.numero, producto.descripcion, cantidad")
var detalles: Collection<Detalle>? = null
@TextArea
var observaciones : String? = null
}
Si decides desarrollar tu proyecto OpenXava con Kotlin, recomendamos usar IntelliJ IDEA ya que viene con Kotlin incluido que ofrece autocompletado, coloreado de código, compilación automática, etc.
Puedes encontrar más detalles sobre Kotlin en su
documentación y como integrar Kotlin en proyectos
maven.
También puedes ver más sobre como usar OpenXava en nuestro
curso desarrollado en Java.