Descarga el proyecto como archivo comprimido zip y descomprimelo.
Selecciona Import projects desde la vista de Package
Explorer o bien File > Import y selecciona Existing
Maven Projects.
Busca la carpeta donde has descomprimido el proyecto y seleccionalo.
Abre application.properties ubicado en src/main/resources, adáptalo a tu base de datos MySQL con tu URL, username, password y dialecto, recuerda tener levantado la base de datos MySQL.
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect
Crea algunos registros manualmente en MySQL, por ejemplo:
INSERT INTO `yourdatabase`.`tutorials` (`id`, `description`, `published`, `title`)
VALUES ('1', 'description 1', 0, 'title 1');
Comprueba que los servicios funcionen correctamente ingresando a http://localhost:8080/api/tutorials
Lo que necesitamos ahora es copiar los archivos de configuración que genera OpenXava al crear un proyecto nuevo al proyecto Spring Boot, para esto el proyecto debe tener las mismas configuraciones que el proyecto Spring Boot.
Crea un nuevo proyecto OpenXava con OpenXava Studio.
Project name: openxava-spring-boot-example
Group id: com.example
Agrega el dialecto de MySQL8 en el archivo persistence.xml ubicado en src/main/resources/META-INF.
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
Configura el archivo context.xml de la carpeta src/main/webapp/META-INF, comenta el resource de HSQLDB, usa el de MySQL y configura la conexión a la base de datos usando tu URL, usuario y contraseña.
package com.example.openxava.spring.boot.example;
import java.util.Properties;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableJpaRepositories("com.example.openxava.spring.boot.example.repository")
@EnableTransactionManagement
public class AppConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/yourdatabase?useSSL=false");
dataSource.setUsername("root");
dataSource.setPassword("");
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
entityManagerFactory.setDataSource(dataSource());
entityManagerFactory.setPackagesToScan("com.example.openxava.spring.boot.example.model");
entityManagerFactory.setPersistenceUnitName("com.example.openxava.spring.boot.example.model");
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setDatabase(Database.MYSQL);
vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL8Dialect");
entityManagerFactory.setJpaVendorAdapter(vendorAdapter);
entityManagerFactory.setJpaProperties(hibernateProperties());
return entityManagerFactory;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "update");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
return properties;
}
}
@SpringBootApplication
public class OpenxavaSpringBootExampleApplication extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception {
SpringApplication.run(OpenxavaSpringBootExampleApplication.class, args);
}
}
<packaging>war</packaging>
<dependencies>
...
<dependency>
<groupId>org.openxava</groupId>
<artifactId>openxava</artifactId>
<version>7.1.1</version>
</dependency>
</dependencies>
<build>
<finalName>openxavaspringbootexample</finalName>
</build>
Debería quedar con estos cambios:
Recuerda tener configurado JAVA_HOME y hacer los siguientes pasos antes de ejecutar la aplicación:
Copia el archivo openxavaspringbootexample.war de la carpeta target a la carpeta webapp donde tienes instalado Tomcat 9 y ejecuta startup.bat desde la carpeta bin
Abre el navegador e ingresa al siguiente url para abrir la aplicación
OpenXava (inicia sesión con admin/admin si no has hecho el paso
opcional):
http://localhost:8080/openxavaspringbootexample
Aprovechando las vistas que genera OpenXava con las entidades del proyecto ya puedes realizar operaciones CRUD.
Comprueba que los servicios del proyecto Spring Boot estén funcionando: http://localhost:8080/openxavaspringbootexample/api/tutorials
Verás que en vez de devolver un json, está devolviendo un xml, esto es debido al bug de la librería JasperReports que trae OpenXava, lo resolveremos momentáneamente en este ejemplo excluyendo una dependencia de esa librería, que no es recomendable hacerlo en producción:
<dependency>
<groupId>org.openxava</groupId>
<artifactId>openxava</artifactId>
<version>7.1.1</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</exclusion>
</exclusions>
</dependency>
Si deseas quitar "openxavaspringbootexample" del url, simplemente renombra el archivo openxavaspringbootexample.war a ROOT.war ubicado en la carpeta de webapps, luego con el url http://localhost:8080 ingresas a la aplicación OpenXava y con http://localhost:8080/api/tutorials a los servicios.