initial commit
This commit is contained in:
		
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
/**/*.iml
 | 
			
		||||
/**/.idea
 | 
			
		||||
/**/target
 | 
			
		||||
/**/dependency-reduced-pom.xml
 | 
			
		||||
/target
 | 
			
		||||
							
								
								
									
										1
									
								
								db/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								db/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
/target
 | 
			
		||||
							
								
								
									
										5
									
								
								db/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								db/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
FROM openjdk:11
 | 
			
		||||
 | 
			
		||||
ARG version
 | 
			
		||||
ADD target/test-db-${version}.jar /test-db.jar
 | 
			
		||||
ENTRYPOINT ["java", "-jar", "/test-db.jar"]
 | 
			
		||||
							
								
								
									
										56
									
								
								db/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								db/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 | 
			
		||||
	<modelVersion>4.0.0</modelVersion>
 | 
			
		||||
 | 
			
		||||
	<parent>
 | 
			
		||||
		<groupId>test</groupId>
 | 
			
		||||
		<artifactId>parent</artifactId>
 | 
			
		||||
		<version>${revision}${sha1}${changelist}</version>
 | 
			
		||||
	</parent>
 | 
			
		||||
 | 
			
		||||
	<artifactId>test-db</artifactId>
 | 
			
		||||
    <packaging>jar</packaging>
 | 
			
		||||
	<name>DB</name>
 | 
			
		||||
 | 
			
		||||
	<properties>
 | 
			
		||||
        <main.class>test.DbApp</main.class>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
	<dependencies>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>test</groupId>
 | 
			
		||||
            <artifactId>test-model</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!--BQ deps-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.bootique.liquibase</groupId>
 | 
			
		||||
            <artifactId>bootique-liquibase</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.bootique.logback</groupId>
 | 
			
		||||
            <artifactId>bootique-logback</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.bootique.jdbc</groupId>
 | 
			
		||||
            <artifactId>bootique-jdbc-hikaricp-instrumented</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>mysql</groupId>
 | 
			
		||||
            <artifactId>mysql-connector-java</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
        <plugins>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
                <artifactId>maven-shade-plugin</artifactId>
 | 
			
		||||
            </plugin>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
                <artifactId>maven-jar-plugin</artifactId>
 | 
			
		||||
            </plugin>
 | 
			
		||||
        </plugins>
 | 
			
		||||
    </build>
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										24
									
								
								db/src/main/java/test/DbApp.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								db/src/main/java/test/DbApp.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
package test;
 | 
			
		||||
 | 
			
		||||
import io.bootique.BQCoreModule;
 | 
			
		||||
import io.bootique.BaseModule;
 | 
			
		||||
import io.bootique.Bootique;
 | 
			
		||||
import io.bootique.di.Binder;
 | 
			
		||||
import io.bootique.meta.application.OptionMetadata;
 | 
			
		||||
 | 
			
		||||
public class DbApp extends BaseModule {
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        Bootique.main(args);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void configure(Binder binder) {
 | 
			
		||||
        BQCoreModule.extend(binder)
 | 
			
		||||
                .addConfig("classpath:test/db/default.yaml")
 | 
			
		||||
 | 
			
		||||
                // --local
 | 
			
		||||
                .addOption(OptionMetadata.builder("local", "Load configuration for local environment.").build())
 | 
			
		||||
                .mapConfigResource("local", "classpath:test/db/local.yaml")
 | 
			
		||||
        ;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								db/src/main/java/test/DbAppProvider.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								db/src/main/java/test/DbAppProvider.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
package test;
 | 
			
		||||
 | 
			
		||||
import io.bootique.BQModuleProvider;
 | 
			
		||||
 | 
			
		||||
public class DbAppProvider implements BQModuleProvider {
 | 
			
		||||
    public DbAppProvider() {}
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public DbApp module() {
 | 
			
		||||
        return new DbApp();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
test.DbAppProvider
 | 
			
		||||
							
								
								
									
										38
									
								
								db/src/main/resources/init.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								db/src/main/resources/init.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
-- liquibase formatted sql
 | 
			
		||||
-- changeset rzen:1
 | 
			
		||||
 | 
			
		||||
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
 | 
			
		||||
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
 | 
			
		||||
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS `test`.`e1` (
 | 
			
		||||
    `id` INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
 | 
			
		||||
    `text` TEXT NULL DEFAULT NULL,
 | 
			
		||||
    `e2_id` INT(5) UNSIGNED NULL DEFAULT NULL,
 | 
			
		||||
    PRIMARY KEY (`id`),
 | 
			
		||||
    INDEX `fk_e2_idx` (`e2_id` ASC) VISIBLE,
 | 
			
		||||
    CONSTRAINT `fk_e2`
 | 
			
		||||
        FOREIGN KEY (`e2_id`)
 | 
			
		||||
            REFERENCES `test`.`e2` (`id`)
 | 
			
		||||
            ON DELETE NO ACTION
 | 
			
		||||
            ON UPDATE NO ACTION)
 | 
			
		||||
    ENGINE = InnoDB
 | 
			
		||||
    DEFAULT CHARACTER SET = utf8;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS `test`.`e2` (
 | 
			
		||||
    `id` INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
 | 
			
		||||
    `text` TEXT NULL DEFAULT NULL,
 | 
			
		||||
    `e1_id` INT(5) UNSIGNED NULL DEFAULT NULL,
 | 
			
		||||
    PRIMARY KEY (`id`),
 | 
			
		||||
    INDEX `fk_e1_idx` (`e1_id` ASC) VISIBLE,
 | 
			
		||||
    CONSTRAINT `fk_e1`
 | 
			
		||||
        FOREIGN KEY (`e1_id`)
 | 
			
		||||
            REFERENCES `test`.`e1` (`id`)
 | 
			
		||||
            ON DELETE NO ACTION
 | 
			
		||||
            ON UPDATE NO ACTION)
 | 
			
		||||
    ENGINE = InnoDB
 | 
			
		||||
    DEFAULT CHARACTER SET = utf8;
 | 
			
		||||
 | 
			
		||||
SET SQL_MODE=@OLD_SQL_MODE;
 | 
			
		||||
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
 | 
			
		||||
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
 | 
			
		||||
							
								
								
									
										3
									
								
								db/src/main/resources/master.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								db/src/main/resources/master.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
databaseChangeLog:
 | 
			
		||||
  - include:
 | 
			
		||||
      file: classpath:init.sql
 | 
			
		||||
							
								
								
									
										23
									
								
								db/src/main/resources/test/db/default.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								db/src/main/resources/test/db/default.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
jdbc:
 | 
			
		||||
  test:
 | 
			
		||||
    driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
    jdbcUrl: "jdbc:mysql://db:3306/test?connectTimeout=0&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"
 | 
			
		||||
    username: root
 | 
			
		||||
    password: test
 | 
			
		||||
    minimumIdle: 1
 | 
			
		||||
    maximumPoolSize: 20
 | 
			
		||||
    connectionTestQuery: "select 1"
 | 
			
		||||
    autoCommit: false
 | 
			
		||||
 | 
			
		||||
# Liquibase Migrations Config
 | 
			
		||||
liquibase:
 | 
			
		||||
  datasource: test
 | 
			
		||||
  changeLogs:
 | 
			
		||||
    - classpath:master.yaml
 | 
			
		||||
 | 
			
		||||
#  Logging
 | 
			
		||||
log:
 | 
			
		||||
  level: info
 | 
			
		||||
  appenders:
 | 
			
		||||
    - type: console
 | 
			
		||||
      logFormat: '[%d{"dd/MMM/yyyy:HH:mm:ss,SSS"}] %t %X %-5p %c{1}: %m%n%ex'
 | 
			
		||||
							
								
								
									
										3
									
								
								db/src/main/resources/test/db/local.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								db/src/main/resources/test/db/local.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
jdbc:
 | 
			
		||||
  test:
 | 
			
		||||
    jdbcUrl: "jdbc:mysql://192.168.10.64:33006/test?connectTimeout=0&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"
 | 
			
		||||
							
								
								
									
										101
									
								
								docker-compose.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								docker-compose.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
version: '3.4'
 | 
			
		||||
 | 
			
		||||
volumes:
 | 
			
		||||
  test-m2:
 | 
			
		||||
    external: true
 | 
			
		||||
 | 
			
		||||
networks:
 | 
			
		||||
  backend:
 | 
			
		||||
 | 
			
		||||
x-jdbc-env:
 | 
			
		||||
  &jdbc-env
 | 
			
		||||
  JDBC_TEST_JDBCURL: jdbc:mysql://db:3306/test?connectTimeout=0&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
 | 
			
		||||
  JDBC_TEST_USERNAME: root
 | 
			
		||||
  JDBC_TEST_PASSWORD: test
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
 | 
			
		||||
  mvn-build:
 | 
			
		||||
    image: maven:3-openjdk-11
 | 
			
		||||
    working_dir: /usr/src/maven
 | 
			
		||||
    volumes:
 | 
			
		||||
      - .:/usr/src/maven
 | 
			
		||||
      - test-m2:/root/.m2
 | 
			
		||||
    entrypoint: mvn clean package
 | 
			
		||||
 | 
			
		||||
  db:
 | 
			
		||||
    image: mariadb:10
 | 
			
		||||
    networks:
 | 
			
		||||
      - backend
 | 
			
		||||
    ports:
 | 
			
		||||
      - "33006:3306"
 | 
			
		||||
    environment:
 | 
			
		||||
      MYSQL_ROOT_PASSWORD: test
 | 
			
		||||
    labels:
 | 
			
		||||
      traefik.enable: 'false'
 | 
			
		||||
 | 
			
		||||
  liquibase:
 | 
			
		||||
    image: test-db:1.0-SNAPSHOT
 | 
			
		||||
    build:
 | 
			
		||||
      context: db
 | 
			
		||||
      args:
 | 
			
		||||
        version: ${VERSION}
 | 
			
		||||
    networks:
 | 
			
		||||
      - backend
 | 
			
		||||
    command: --lb-update
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  # cayenne helpers
 | 
			
		||||
 | 
			
		||||
  cdbimport:
 | 
			
		||||
    image: maven:3-openjdk-11
 | 
			
		||||
    networks:
 | 
			
		||||
      - backend
 | 
			
		||||
    volumes:
 | 
			
		||||
      - test-m2:/root/.m2
 | 
			
		||||
      - .:/usr/src/maven
 | 
			
		||||
    working_dir: /usr/src/maven
 | 
			
		||||
    environment:
 | 
			
		||||
      <<: *jdbc-env
 | 
			
		||||
    command: mvn -f model cayenne:cdbimport
 | 
			
		||||
 | 
			
		||||
  cgen:
 | 
			
		||||
    image: maven:3-openjdk-11
 | 
			
		||||
    volumes:
 | 
			
		||||
      - test-m2:/root/.m2
 | 
			
		||||
      - .:/usr/src/maven
 | 
			
		||||
    working_dir: /usr/src/maven
 | 
			
		||||
    environment:
 | 
			
		||||
      <<: *jdbc-env
 | 
			
		||||
    command: mvn -f model cayenne:cgen
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  # app services
 | 
			
		||||
 | 
			
		||||
  # this shows a fail scenario
 | 
			
		||||
  fail:
 | 
			
		||||
    image: test-test:${VERSION}
 | 
			
		||||
    build:
 | 
			
		||||
      context: test
 | 
			
		||||
      args:
 | 
			
		||||
        version: ${VERSION}
 | 
			
		||||
    networks:
 | 
			
		||||
      - backend
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - db
 | 
			
		||||
      - liquibase
 | 
			
		||||
    command: --fail
 | 
			
		||||
 | 
			
		||||
  # this shows off a workaround
 | 
			
		||||
  happy:
 | 
			
		||||
    image: test-test:${VERSION}
 | 
			
		||||
    build:
 | 
			
		||||
      context: test
 | 
			
		||||
      args:
 | 
			
		||||
        version: ${VERSION}
 | 
			
		||||
    networks:
 | 
			
		||||
      - backend
 | 
			
		||||
    depends_on:
 | 
			
		||||
      - db
 | 
			
		||||
      - liquibase
 | 
			
		||||
    command: --happy
 | 
			
		||||
							
								
								
									
										1
									
								
								model/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								model/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
/target
 | 
			
		||||
							
								
								
									
										72
									
								
								model/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								model/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>test</groupId>
 | 
			
		||||
        <artifactId>parent</artifactId>
 | 
			
		||||
        <version>${revision}${sha1}${changelist}</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <artifactId>test-model</artifactId>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.apache.cayenne</groupId>
 | 
			
		||||
            <artifactId>cayenne-lifecycle</artifactId>
 | 
			
		||||
            <version>${cayenne.version}</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
         <pluginManagement>
 | 
			
		||||
            <plugins>
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <groupId>org.apache.cayenne.plugins</groupId>
 | 
			
		||||
                    <artifactId>cayenne-maven-plugin</artifactId>
 | 
			
		||||
                    <version>${cayenne.version}</version>
 | 
			
		||||
                    <configuration>
 | 
			
		||||
                        <map>${project.basedir}/src/main/resources/test/test.map.xml</map>
 | 
			
		||||
                        <superPkg>test.cayenne.auto</superPkg>
 | 
			
		||||
                        <dataSource>
 | 
			
		||||
                            <driver>com.mysql.cj.jdbc.Driver</driver>
 | 
			
		||||
                            <url>${env.JDBC_TEST_JDBCURL}</url>
 | 
			
		||||
                            <username>root</username>
 | 
			
		||||
                            <password>test</password>
 | 
			
		||||
                        </dataSource>
 | 
			
		||||
                        <dbImport>
 | 
			
		||||
                            <defaultPackage>test.cayenne</defaultPackage>
 | 
			
		||||
                            <catalog>
 | 
			
		||||
                                <name>test</name>
 | 
			
		||||
                                <excludeTable>databasechangelog.*</excludeTable>
 | 
			
		||||
                            </catalog>
 | 
			
		||||
                        </dbImport>
 | 
			
		||||
                        <overwriteExisting>true</overwriteExisting>
 | 
			
		||||
                        <meaningfulPk>true</meaningfulPk>
 | 
			
		||||
                    </configuration>
 | 
			
		||||
                    <executions>
 | 
			
		||||
                        <execution>
 | 
			
		||||
                            <id>default-cli</id>
 | 
			
		||||
                            <goals>
 | 
			
		||||
                                <!-- To perform reverse engineering, explicitly run 'mvn cayenne:cdbimport' -->
 | 
			
		||||
                                <!-- To perform class generation, explicitly run 'mvn cayenne:cgen' -->
 | 
			
		||||
                                <!-- Start up the modeler from the command-line 'mvn cayenne-modeler:run' -->
 | 
			
		||||
                                <goal>cgen</goal>
 | 
			
		||||
                            </goals>
 | 
			
		||||
                        </execution>
 | 
			
		||||
                    </executions>
 | 
			
		||||
                    <dependencies>
 | 
			
		||||
                        <!-- 3rdParty deps-->
 | 
			
		||||
                        <dependency>
 | 
			
		||||
                            <groupId>mysql</groupId>
 | 
			
		||||
                            <artifactId>mysql-connector-java</artifactId>
 | 
			
		||||
                            <version>${mysql.version}</version>
 | 
			
		||||
                        </dependency>
 | 
			
		||||
                    </dependencies>
 | 
			
		||||
                </plugin>
 | 
			
		||||
            </plugins>
 | 
			
		||||
        </pluginManagement>
 | 
			
		||||
    </build>
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										9
									
								
								model/src/main/java/test/cayenne/E1.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								model/src/main/java/test/cayenne/E1.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
package test.cayenne;
 | 
			
		||||
 | 
			
		||||
import test.cayenne.auto._E1;
 | 
			
		||||
 | 
			
		||||
public class E1 extends _E1 {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										9
									
								
								model/src/main/java/test/cayenne/E2.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								model/src/main/java/test/cayenne/E2.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
package test.cayenne;
 | 
			
		||||
 | 
			
		||||
import test.cayenne.auto._E2;
 | 
			
		||||
 | 
			
		||||
public class E2 extends _E2 {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										131
									
								
								model/src/main/java/test/cayenne/auto/_E1.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								model/src/main/java/test/cayenne/auto/_E1.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
package test.cayenne.auto;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.ObjectInputStream;
 | 
			
		||||
import java.io.ObjectOutputStream;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.apache.cayenne.BaseDataObject;
 | 
			
		||||
import org.apache.cayenne.exp.property.EntityProperty;
 | 
			
		||||
import org.apache.cayenne.exp.property.ListProperty;
 | 
			
		||||
import org.apache.cayenne.exp.property.PropertyFactory;
 | 
			
		||||
import org.apache.cayenne.exp.property.StringProperty;
 | 
			
		||||
 | 
			
		||||
import test.cayenne.E2;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class _E1 was generated by Cayenne.
 | 
			
		||||
 * It is probably a good idea to avoid changing this class manually,
 | 
			
		||||
 * since it may be overwritten next time code is regenerated.
 | 
			
		||||
 * If you need to make any customizations, please use subclass.
 | 
			
		||||
 */
 | 
			
		||||
public abstract class _E1 extends BaseDataObject {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public static final String ID_PK_COLUMN = "id";
 | 
			
		||||
 | 
			
		||||
    public static final StringProperty<String> TEXT = PropertyFactory.createString("text", String.class);
 | 
			
		||||
    public static final EntityProperty<E2> E2 = PropertyFactory.createEntity("e2", E2.class);
 | 
			
		||||
    public static final ListProperty<E2> E2S = PropertyFactory.createList("e2s", E2.class);
 | 
			
		||||
 | 
			
		||||
    protected String text;
 | 
			
		||||
 | 
			
		||||
    protected Object e2;
 | 
			
		||||
    protected Object e2s;
 | 
			
		||||
 | 
			
		||||
    public void setText(String text) {
 | 
			
		||||
        beforePropertyWrite("text", this.text, text);
 | 
			
		||||
        this.text = text;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getText() {
 | 
			
		||||
        beforePropertyRead("text");
 | 
			
		||||
        return this.text;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setE2(E2 e2) {
 | 
			
		||||
        setToOneTarget("e2", e2, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public E2 getE2() {
 | 
			
		||||
        return (E2)readProperty("e2");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void addToE2s(E2 obj) {
 | 
			
		||||
        addToManyTarget("e2s", obj, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void removeFromE2s(E2 obj) {
 | 
			
		||||
        removeToManyTarget("e2s", obj, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("unchecked")
 | 
			
		||||
    public List<E2> getE2s() {
 | 
			
		||||
        return (List<E2>)readProperty("e2s");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Object readPropertyDirectly(String propName) {
 | 
			
		||||
        if(propName == null) {
 | 
			
		||||
            throw new IllegalArgumentException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        switch(propName) {
 | 
			
		||||
            case "text":
 | 
			
		||||
                return this.text;
 | 
			
		||||
            case "e2":
 | 
			
		||||
                return this.e2;
 | 
			
		||||
            case "e2s":
 | 
			
		||||
                return this.e2s;
 | 
			
		||||
            default:
 | 
			
		||||
                return super.readPropertyDirectly(propName);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void writePropertyDirectly(String propName, Object val) {
 | 
			
		||||
        if(propName == null) {
 | 
			
		||||
            throw new IllegalArgumentException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        switch (propName) {
 | 
			
		||||
            case "text":
 | 
			
		||||
                this.text = (String)val;
 | 
			
		||||
                break;
 | 
			
		||||
            case "e2":
 | 
			
		||||
                this.e2 = val;
 | 
			
		||||
                break;
 | 
			
		||||
            case "e2s":
 | 
			
		||||
                this.e2s = val;
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                super.writePropertyDirectly(propName, val);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void writeObject(ObjectOutputStream out) throws IOException {
 | 
			
		||||
        writeSerialized(out);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
 | 
			
		||||
        readSerialized(in);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void writeState(ObjectOutputStream out) throws IOException {
 | 
			
		||||
        super.writeState(out);
 | 
			
		||||
        out.writeObject(this.text);
 | 
			
		||||
        out.writeObject(this.e2);
 | 
			
		||||
        out.writeObject(this.e2s);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException {
 | 
			
		||||
        super.readState(in);
 | 
			
		||||
        this.text = (String)in.readObject();
 | 
			
		||||
        this.e2 = in.readObject();
 | 
			
		||||
        this.e2s = in.readObject();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										131
									
								
								model/src/main/java/test/cayenne/auto/_E2.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								model/src/main/java/test/cayenne/auto/_E2.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
package test.cayenne.auto;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.ObjectInputStream;
 | 
			
		||||
import java.io.ObjectOutputStream;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.apache.cayenne.BaseDataObject;
 | 
			
		||||
import org.apache.cayenne.exp.property.EntityProperty;
 | 
			
		||||
import org.apache.cayenne.exp.property.ListProperty;
 | 
			
		||||
import org.apache.cayenne.exp.property.PropertyFactory;
 | 
			
		||||
import org.apache.cayenne.exp.property.StringProperty;
 | 
			
		||||
 | 
			
		||||
import test.cayenne.E1;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class _E2 was generated by Cayenne.
 | 
			
		||||
 * It is probably a good idea to avoid changing this class manually,
 | 
			
		||||
 * since it may be overwritten next time code is regenerated.
 | 
			
		||||
 * If you need to make any customizations, please use subclass.
 | 
			
		||||
 */
 | 
			
		||||
public abstract class _E2 extends BaseDataObject {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public static final String ID_PK_COLUMN = "id";
 | 
			
		||||
 | 
			
		||||
    public static final StringProperty<String> TEXT = PropertyFactory.createString("text", String.class);
 | 
			
		||||
    public static final EntityProperty<E1> E1 = PropertyFactory.createEntity("e1", E1.class);
 | 
			
		||||
    public static final ListProperty<E1> E1S = PropertyFactory.createList("e1s", E1.class);
 | 
			
		||||
 | 
			
		||||
    protected String text;
 | 
			
		||||
 | 
			
		||||
    protected Object e1;
 | 
			
		||||
    protected Object e1s;
 | 
			
		||||
 | 
			
		||||
    public void setText(String text) {
 | 
			
		||||
        beforePropertyWrite("text", this.text, text);
 | 
			
		||||
        this.text = text;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getText() {
 | 
			
		||||
        beforePropertyRead("text");
 | 
			
		||||
        return this.text;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setE1(E1 e1) {
 | 
			
		||||
        setToOneTarget("e1", e1, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public E1 getE1() {
 | 
			
		||||
        return (E1)readProperty("e1");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void addToE1s(E1 obj) {
 | 
			
		||||
        addToManyTarget("e1s", obj, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void removeFromE1s(E1 obj) {
 | 
			
		||||
        removeToManyTarget("e1s", obj, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("unchecked")
 | 
			
		||||
    public List<E1> getE1s() {
 | 
			
		||||
        return (List<E1>)readProperty("e1s");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Object readPropertyDirectly(String propName) {
 | 
			
		||||
        if(propName == null) {
 | 
			
		||||
            throw new IllegalArgumentException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        switch(propName) {
 | 
			
		||||
            case "text":
 | 
			
		||||
                return this.text;
 | 
			
		||||
            case "e1":
 | 
			
		||||
                return this.e1;
 | 
			
		||||
            case "e1s":
 | 
			
		||||
                return this.e1s;
 | 
			
		||||
            default:
 | 
			
		||||
                return super.readPropertyDirectly(propName);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void writePropertyDirectly(String propName, Object val) {
 | 
			
		||||
        if(propName == null) {
 | 
			
		||||
            throw new IllegalArgumentException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        switch (propName) {
 | 
			
		||||
            case "text":
 | 
			
		||||
                this.text = (String)val;
 | 
			
		||||
                break;
 | 
			
		||||
            case "e1":
 | 
			
		||||
                this.e1 = val;
 | 
			
		||||
                break;
 | 
			
		||||
            case "e1s":
 | 
			
		||||
                this.e1s = val;
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                super.writePropertyDirectly(propName, val);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void writeObject(ObjectOutputStream out) throws IOException {
 | 
			
		||||
        writeSerialized(out);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
 | 
			
		||||
        readSerialized(in);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void writeState(ObjectOutputStream out) throws IOException {
 | 
			
		||||
        super.writeState(out);
 | 
			
		||||
        out.writeObject(this.text);
 | 
			
		||||
        out.writeObject(this.e1);
 | 
			
		||||
        out.writeObject(this.e1s);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException {
 | 
			
		||||
        super.readState(in);
 | 
			
		||||
        this.text = (String)in.readObject();
 | 
			
		||||
        this.e1 = in.readObject();
 | 
			
		||||
        this.e1s = in.readObject();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								model/src/main/resources/test/cayenne-test.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								model/src/main/resources/test/cayenne-test.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<domain xmlns="http://cayenne.apache.org/schema/10/domain"
 | 
			
		||||
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
        xsi:schemaLocation="http://cayenne.apache.org/schema/10/domain https://cayenne.apache.org/schema/10/domain.xsd"
 | 
			
		||||
        project-version="10">
 | 
			
		||||
    <map name="test"/>
 | 
			
		||||
    <node name="test-node"
 | 
			
		||||
          factory="org.apache.cayenne.configuration.server.JNDIDataSourceFactory" parameters="jdbc/mysql/test">
 | 
			
		||||
        <map-ref name="test"/>
 | 
			
		||||
    </node>
 | 
			
		||||
</domain>
 | 
			
		||||
							
								
								
									
										40
									
								
								model/src/main/resources/test/test.map.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								model/src/main/resources/test/test.map.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap"
 | 
			
		||||
	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
	 xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap https://cayenne.apache.org/schema/10/modelMap.xsd"
 | 
			
		||||
	 project-version="10">
 | 
			
		||||
	<property name="defaultPackage" value="test.cayenne"/>
 | 
			
		||||
	<property name="defaultCatalog" value="test"/>
 | 
			
		||||
	<db-entity name="e1" catalog="test">
 | 
			
		||||
		<db-attribute name="e2_id" type="BIGINT" length="10"/>
 | 
			
		||||
		<db-attribute name="id" type="BIGINT" isPrimaryKey="true" isGenerated="true" isMandatory="true" length="10"/>
 | 
			
		||||
		<db-attribute name="text" type="LONGVARCHAR" length="65535"/>
 | 
			
		||||
	</db-entity>
 | 
			
		||||
	<db-entity name="e2" catalog="test">
 | 
			
		||||
		<db-attribute name="e1_id" type="BIGINT" length="10"/>
 | 
			
		||||
		<db-attribute name="id" type="BIGINT" isPrimaryKey="true" isGenerated="true" isMandatory="true" length="10"/>
 | 
			
		||||
		<db-attribute name="text" type="LONGVARCHAR" length="65535"/>
 | 
			
		||||
	</db-entity>
 | 
			
		||||
	<obj-entity name="E1" className="test.cayenne.E1" dbEntityName="e1">
 | 
			
		||||
		<obj-attribute name="text" type="java.lang.String" db-attribute-path="text"/>
 | 
			
		||||
	</obj-entity>
 | 
			
		||||
	<obj-entity name="E2" className="test.cayenne.E2" dbEntityName="e2">
 | 
			
		||||
		<obj-attribute name="text" type="java.lang.String" db-attribute-path="text"/>
 | 
			
		||||
	</obj-entity>
 | 
			
		||||
	<db-relationship name="e2" source="e1" target="e2">
 | 
			
		||||
		<db-attribute-pair source="e2_id" target="id"/>
 | 
			
		||||
	</db-relationship>
 | 
			
		||||
	<db-relationship name="e2s" source="e1" target="e2" toMany="true">
 | 
			
		||||
		<db-attribute-pair source="id" target="e1_id"/>
 | 
			
		||||
	</db-relationship>
 | 
			
		||||
	<db-relationship name="e1" source="e2" target="e1">
 | 
			
		||||
		<db-attribute-pair source="e1_id" target="id"/>
 | 
			
		||||
	</db-relationship>
 | 
			
		||||
	<db-relationship name="e1s" source="e2" target="e1" toMany="true">
 | 
			
		||||
		<db-attribute-pair source="id" target="e2_id"/>
 | 
			
		||||
	</db-relationship>
 | 
			
		||||
	<obj-relationship name="e2" source="E1" target="E2" deleteRule="Nullify" db-relationship-path="e2"/>
 | 
			
		||||
	<obj-relationship name="e2s" source="E1" target="E2" deleteRule="Deny" db-relationship-path="e2s"/>
 | 
			
		||||
	<obj-relationship name="e1" source="E2" target="E1" deleteRule="Nullify" db-relationship-path="e1"/>
 | 
			
		||||
	<obj-relationship name="e1s" source="E2" target="E1" deleteRule="Deny" db-relationship-path="e1s"/>
 | 
			
		||||
</data-map>
 | 
			
		||||
							
								
								
									
										131
									
								
								pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
 | 
			
		||||
    <artifactId>parent</artifactId>
 | 
			
		||||
    <groupId>test</groupId>
 | 
			
		||||
    <version>${revision}${sha1}${changelist}</version>
 | 
			
		||||
 | 
			
		||||
    <name>Parent</name>
 | 
			
		||||
 | 
			
		||||
    <packaging>pom</packaging>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <revision>1.0</revision>
 | 
			
		||||
        <sha1/>
 | 
			
		||||
        <changelist>-SNAPSHOT</changelist>
 | 
			
		||||
 | 
			
		||||
        <bootique.version>2.0.M1</bootique.version>
 | 
			
		||||
        <!-- must stay at 8.0.22 until bootique upgrades to liquibase 4.x -->
 | 
			
		||||
        <!-- see https://bugs.mysql.com/bug.php?id=102302 and https://github.com/liquibase/liquibase/blob/4.4.x/liquibase-core/src/main/java/liquibase/changelog/StandardChangeLogHistoryService.java#L324 -->
 | 
			
		||||
        <mysql.version>8.0.22</mysql.version>
 | 
			
		||||
        <mariadb.version>3.0.2-rc</mariadb.version>
 | 
			
		||||
        <cayenne.version>4.2.B1</cayenne.version>
 | 
			
		||||
 | 
			
		||||
        <maven.compiler.source>8</maven.compiler.source>
 | 
			
		||||
        <maven.compiler.target>8</maven.compiler.target>
 | 
			
		||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
			
		||||
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 | 
			
		||||
 | 
			
		||||
        <main.class>Dummy</main.class>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
    <modules>
 | 
			
		||||
        <module>db</module>
 | 
			
		||||
        <module>model</module>
 | 
			
		||||
        <module>test</module>
 | 
			
		||||
    </modules>
 | 
			
		||||
 | 
			
		||||
    <dependencyManagement>
 | 
			
		||||
        <dependencies>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>test</groupId>
 | 
			
		||||
                <artifactId>test-model</artifactId>
 | 
			
		||||
                <version>${project.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- bootique -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
              <groupId>io.bootique.bom</groupId>
 | 
			
		||||
              <artifactId>bootique-bom</artifactId>
 | 
			
		||||
              <version>${bootique.version}</version>
 | 
			
		||||
              <type>pom</type>
 | 
			
		||||
              <scope>import</scope>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- cayenne -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.apache.cayenne</groupId>
 | 
			
		||||
                <artifactId>cayenne-server</artifactId>
 | 
			
		||||
                <version>${cayenne.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- mysql driver -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>mysql</groupId>
 | 
			
		||||
                <artifactId>mysql-connector-java</artifactId>
 | 
			
		||||
                <version>${mysql.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>org.mariadb.jdbc</groupId>
 | 
			
		||||
                <artifactId>mariadb-java-client</artifactId>
 | 
			
		||||
                <version>${mariadb.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
        </dependencies>
 | 
			
		||||
    </dependencyManagement>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
        <pluginManagement>
 | 
			
		||||
            <plugins>
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
                    <artifactId>maven-shade-plugin</artifactId>
 | 
			
		||||
                    <version>3.2.1</version>
 | 
			
		||||
 | 
			
		||||
                    <configuration>
 | 
			
		||||
                        <createDependencyReducedPom>true</createDependencyReducedPom>
 | 
			
		||||
                        <filters>
 | 
			
		||||
                            <filter>
 | 
			
		||||
                                <artifact>*:*</artifact>
 | 
			
		||||
                                <excludes>
 | 
			
		||||
                                    <exclude>META-INF/*.SF</exclude>
 | 
			
		||||
                                    <exclude>META-INF/*.DSA</exclude>
 | 
			
		||||
                                    <exclude>META-INF/*.RSA</exclude>
 | 
			
		||||
                                </excludes>
 | 
			
		||||
                            </filter>
 | 
			
		||||
                        </filters>
 | 
			
		||||
                    </configuration>
 | 
			
		||||
                    <executions>
 | 
			
		||||
                        <execution>
 | 
			
		||||
                            <phase>package</phase>
 | 
			
		||||
                            <goals>
 | 
			
		||||
                                <goal>shade</goal>
 | 
			
		||||
                            </goals>
 | 
			
		||||
                            <configuration>
 | 
			
		||||
                                <transformers>
 | 
			
		||||
                                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
 | 
			
		||||
                                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
 | 
			
		||||
                                        <mainClass>${main.class}</mainClass>
 | 
			
		||||
                                    </transformer>
 | 
			
		||||
                                </transformers>
 | 
			
		||||
                            </configuration>
 | 
			
		||||
                        </execution>
 | 
			
		||||
                    </executions>
 | 
			
		||||
                </plugin>
 | 
			
		||||
 | 
			
		||||
                <plugin>
 | 
			
		||||
                    <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
                    <artifactId>maven-jar-plugin</artifactId>
 | 
			
		||||
                    <version>3.1.0</version>
 | 
			
		||||
                    <configuration>
 | 
			
		||||
                        <archive>
 | 
			
		||||
                            <manifest>
 | 
			
		||||
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
 | 
			
		||||
                            </manifest>
 | 
			
		||||
                        </archive>
 | 
			
		||||
                    </configuration>
 | 
			
		||||
                </plugin>
 | 
			
		||||
            </plugins>
 | 
			
		||||
        </pluginManagement>
 | 
			
		||||
    </build>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										10
									
								
								run-test.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								run-test.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
if [ -z `docker volume ls -q | grep -i test-m2` ]; then docker volume create test-m2; fi
 | 
			
		||||
docker-compose up -d db
 | 
			
		||||
sleep 30s
 | 
			
		||||
docker-compose run --rm mvn-build
 | 
			
		||||
docker-compose build
 | 
			
		||||
docker-compose run --rm fail
 | 
			
		||||
docker-compose run --rm happy
 | 
			
		||||
docker-compose down
 | 
			
		||||
							
								
								
									
										1
									
								
								test/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								test/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
/target
 | 
			
		||||
							
								
								
									
										5
									
								
								test/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								test/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
FROM openjdk:11
 | 
			
		||||
 | 
			
		||||
ARG version
 | 
			
		||||
ADD target/test-test-${version}.jar /test-test.jar
 | 
			
		||||
ENTRYPOINT ["java", "-jar", "/test-test.jar"]
 | 
			
		||||
							
								
								
									
										66
									
								
								test/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								test/pom.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
 | 
			
		||||
    <parent>
 | 
			
		||||
        <groupId>test</groupId>
 | 
			
		||||
        <artifactId>parent</artifactId>
 | 
			
		||||
        <version>${revision}${sha1}${changelist}</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
 | 
			
		||||
    <artifactId>test-test</artifactId>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <main.class>test.TestApp</main.class>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>test</groupId>
 | 
			
		||||
            <artifactId>test-model</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.bootique.cayenne</groupId>
 | 
			
		||||
            <artifactId>bootique-cayenne</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.bootique.agrest</groupId>
 | 
			
		||||
            <artifactId>bootique-agrest</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.agrest</groupId>
 | 
			
		||||
            <artifactId>agrest-engine</artifactId>
 | 
			
		||||
            <version>4.7</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.bootique.jdbc</groupId>
 | 
			
		||||
            <artifactId>bootique-jdbc-hikaricp</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.bootique.logback</groupId>
 | 
			
		||||
            <artifactId>bootique-logback</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>mysql</groupId>
 | 
			
		||||
            <artifactId>mysql-connector-java</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
        <plugins>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
                <artifactId>maven-shade-plugin</artifactId>
 | 
			
		||||
            </plugin>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>org.apache.maven.plugins</groupId>
 | 
			
		||||
                <artifactId>maven-jar-plugin</artifactId>
 | 
			
		||||
            </plugin>
 | 
			
		||||
        </plugins>
 | 
			
		||||
    </build>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										33
									
								
								test/src/main/java/test/FailCommand.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								test/src/main/java/test/FailCommand.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
package test;
 | 
			
		||||
 | 
			
		||||
import io.bootique.cli.Cli;
 | 
			
		||||
import io.bootique.command.CommandOutcome;
 | 
			
		||||
import io.bootique.command.CommandWithMetadata;
 | 
			
		||||
import io.bootique.meta.application.CommandMetadata;
 | 
			
		||||
import org.apache.cayenne.ObjectContext;
 | 
			
		||||
import org.apache.cayenne.configuration.server.ServerRuntime;
 | 
			
		||||
 | 
			
		||||
import javax.inject.Inject;
 | 
			
		||||
import javax.inject.Provider;
 | 
			
		||||
 | 
			
		||||
public class FailCommand extends CommandWithMetadata {
 | 
			
		||||
 | 
			
		||||
    @Inject
 | 
			
		||||
    private Provider<ServerRuntime> cayenneRuntimeProvider;
 | 
			
		||||
 | 
			
		||||
    @Inject
 | 
			
		||||
    public FailCommand(CommandMetadata.Builder metadataBuilder) {
 | 
			
		||||
        super(metadataBuilder
 | 
			
		||||
                .name("fail")
 | 
			
		||||
                .description("Demo of a possible issue with Cayenne.")
 | 
			
		||||
                .build()
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public CommandOutcome run(Cli cli) {
 | 
			
		||||
        ObjectContext context = cayenneRuntimeProvider.get().newContext();
 | 
			
		||||
        TestCase.runTest(context, true);
 | 
			
		||||
        return CommandOutcome.succeeded();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								test/src/main/java/test/HappyCommand.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								test/src/main/java/test/HappyCommand.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
package test;
 | 
			
		||||
 | 
			
		||||
import io.bootique.cli.Cli;
 | 
			
		||||
import io.bootique.command.CommandOutcome;
 | 
			
		||||
import io.bootique.command.CommandWithMetadata;
 | 
			
		||||
import io.bootique.meta.application.CommandMetadata;
 | 
			
		||||
import org.apache.cayenne.ObjectContext;
 | 
			
		||||
import org.apache.cayenne.configuration.server.ServerRuntime;
 | 
			
		||||
 | 
			
		||||
import javax.inject.Inject;
 | 
			
		||||
import javax.inject.Provider;
 | 
			
		||||
 | 
			
		||||
public class HappyCommand extends CommandWithMetadata {
 | 
			
		||||
    @Inject
 | 
			
		||||
    private Provider<ServerRuntime> cayenneRuntimeProvider;
 | 
			
		||||
 | 
			
		||||
    @Inject
 | 
			
		||||
    public HappyCommand(CommandMetadata.Builder metadataBuilder) {
 | 
			
		||||
        super(metadataBuilder
 | 
			
		||||
                .name("happy")
 | 
			
		||||
                .description("Demo of a possible issue with Cayenne. This command shows a workaround.")
 | 
			
		||||
                .build()
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public CommandOutcome run(Cli cli) {
 | 
			
		||||
        ObjectContext context = cayenneRuntimeProvider.get().newContext();
 | 
			
		||||
        TestCase.runTest(context, false);
 | 
			
		||||
        return CommandOutcome.succeeded();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								test/src/main/java/test/TestApp.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								test/src/main/java/test/TestApp.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
package test;
 | 
			
		||||
 | 
			
		||||
import io.bootique.BQCoreModule;
 | 
			
		||||
import io.bootique.BaseModule;
 | 
			
		||||
import io.bootique.Bootique;
 | 
			
		||||
import io.bootique.di.Binder;
 | 
			
		||||
import io.bootique.meta.application.OptionMetadata;
 | 
			
		||||
 | 
			
		||||
public class TestApp extends BaseModule {
 | 
			
		||||
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        Bootique.app(args)
 | 
			
		||||
                .autoLoadModules()
 | 
			
		||||
                .exec()
 | 
			
		||||
                .exit();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void configure(Binder binder) {
 | 
			
		||||
        BQCoreModule.extend(binder)
 | 
			
		||||
                .addConfig("classpath:test/default.yaml")
 | 
			
		||||
                .addCommand(FailCommand.class)
 | 
			
		||||
                .addCommand(HappyCommand.class)
 | 
			
		||||
 | 
			
		||||
                // --local
 | 
			
		||||
                .addOption(OptionMetadata.builder("local", "Load configuration for local environment.").build())
 | 
			
		||||
                .mapConfigResource("local", "classpath:test/local.yaml")
 | 
			
		||||
 | 
			
		||||
        ;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										13
									
								
								test/src/main/java/test/TestAppProvider.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								test/src/main/java/test/TestAppProvider.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
package test;
 | 
			
		||||
 | 
			
		||||
import io.bootique.BQModuleProvider;
 | 
			
		||||
 | 
			
		||||
public class TestAppProvider implements BQModuleProvider {
 | 
			
		||||
 | 
			
		||||
    public TestAppProvider() {}
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public TestApp module() {
 | 
			
		||||
        return new TestApp();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								test/src/main/java/test/TestCase.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								test/src/main/java/test/TestCase.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
package test;
 | 
			
		||||
 | 
			
		||||
import org.apache.cayenne.ObjectContext;
 | 
			
		||||
import test.cayenne.E1;
 | 
			
		||||
import test.cayenne.E2;
 | 
			
		||||
 | 
			
		||||
public class TestCase {
 | 
			
		||||
 | 
			
		||||
    public static void runTest (ObjectContext context, boolean doFail) {
 | 
			
		||||
        for (int i=100; i<110; ++i) {
 | 
			
		||||
            E1 e1 = context.newObject(E1.class);
 | 
			
		||||
            E2 e2 = context.newObject(E2.class);
 | 
			
		||||
 | 
			
		||||
            e1.setText("e1 #" + i);
 | 
			
		||||
            e2.setText("e2 #" + i);
 | 
			
		||||
 | 
			
		||||
            // executing this commit seems to
 | 
			
		||||
            // mitigate the issue
 | 
			
		||||
 | 
			
		||||
            if (!doFail) {
 | 
			
		||||
                context.commitChanges();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            e1.setE2(e2);
 | 
			
		||||
            e2.setE1(e1);
 | 
			
		||||
 | 
			
		||||
            context.commitChanges();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1 @@
 | 
			
		||||
test.TestAppProvider
 | 
			
		||||
							
								
								
									
										22
									
								
								test/src/main/resources/test/default.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								test/src/main/resources/test/default.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
# JDBC config
 | 
			
		||||
jdbc:
 | 
			
		||||
  test:
 | 
			
		||||
    driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
    jdbcUrl: "jdbc:mysql://db:3306/test?connectTimeout=0&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"
 | 
			
		||||
    username: root
 | 
			
		||||
    password: test
 | 
			
		||||
    minimumIdle: 1
 | 
			
		||||
    maximumPoolSize: 20
 | 
			
		||||
    connectionTestQuery: "select 1"
 | 
			
		||||
    autoCommit: false
 | 
			
		||||
 | 
			
		||||
cayenne:
 | 
			
		||||
  configs:
 | 
			
		||||
    - test/cayenne-test.xml
 | 
			
		||||
  datasource: test
 | 
			
		||||
 | 
			
		||||
log:
 | 
			
		||||
  level: debug
 | 
			
		||||
  appenders:
 | 
			
		||||
    - type: console
 | 
			
		||||
      logFormat: '[%d{"dd/MMM/yyyy:HH:mm:ss,SSS"}] %t %X %-5p %c{1}: %m%n%ex'
 | 
			
		||||
							
								
								
									
										3
									
								
								test/src/main/resources/test/local.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/src/main/resources/test/local.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
jdbc:
 | 
			
		||||
  test:
 | 
			
		||||
    jdbcUrl: "jdbc:mysql://localhost:33006/test?connectTimeout=0&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"
 | 
			
		||||
		Reference in New Issue
	
	Block a user