diff --git a/.travis.yml b/.travis.yml index 68a107639..c8ed11b83 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: java -jdk: openjdk8 +jdk: openjdk11 cache: directories: - "$HOME/.m2" diff --git a/pom.xml b/pom.xml index 5f1da2ba0..c4429c52b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,9 @@ 2.0.0-SNAPSHOT pom transitclock + http://www.transitclock.org// + transitclock transitclockApi diff --git a/transitclock/pom.xml b/transitclock/pom.xml index 8833bb1ba..cab10d5d0 100755 --- a/transitclock/pom.xml +++ b/transitclock/pom.xml @@ -1,28 +1,82 @@ - + 4.0.0 - TheTransitClock transitclockCore - 2.0.0-SNAPSHOT + + + transitclockCore + + TheTransitClock + transitclock + 2.0.0-SNAPSHOT + UTF-8 + 1.2.0 + 3.0.2 + 1.18.24 + 5.4..Final + 6.0.21.Final + 6.0.21.Final + - transitclockCore - - - - - repo.obaweb.org - http://repo.obaweb.org:8080/archiva/repository/releases - + + + com.sun.activation + javax.activation + ${javax.activation.version} + + + + + + jakarta.xml.bind + jakarta.xml.bind-api + 3.0.1 + + + + + com.sun.xml.bind + jaxb-impl + 3.0.2 + runtime + + + + + org.projectlombok + lombok + ${lombok.version} + provided + TheTransitClock transitclockBarefootClient @@ -38,17 +92,11 @@ esri-geometry-api 1.1 - - - io.kevinlee - one-jar-boot - 0.97.4 - - mysql @@ -56,34 +104,28 @@ 5.1.35 - org.postgresql - postgresql - 9.3-1103-jdbc41 - + org.postgresql + postgresql + 42.6.0 + + + + - org.hibernate - hibernate-core - 4.3.9.Final - - - org.hibernate.common - hibernate-commons-annotations - 4.0.5.Final - - - org.hibernate - hibernate-c3p0 - 4.3.9.Final + org.hibernate + hibernate-core + 5.5.7.Final - - + @@ -98,9 +140,9 @@ 1.1.3 - org.hsqldb - hsqldb - 2.2.4 + org.hsqldb + hsqldb + 2.2.4 @@ -144,7 +186,7 @@ 1.2 - @@ -166,10 +208,10 @@ 1.3.0 - org.json @@ -184,7 +226,7 @@ 1.1 - net.jcip @@ -221,15 +263,18 @@ test + + - com.google.guava - guava - 18.0 + com.google.guava + guava + 30.1.1-jre - - org.ehcache - ehcache - 3.4.0 + + + org.ehcache + ehcache + 3.4.0 org.slf4j @@ -239,18 +284,18 @@ - com.esotericsoftware - kryo - 4.0.0 + com.esotericsoftware + kryo + 4.0.0 - + - org.apache.commons - commons-jcs-core - 2.2 + org.apache.commons + commons-jcs-core + 2.2 - + javax.servlet @@ -259,12 +304,12 @@ provided - + - com.github.haifengl - smile-core - 1.5.1 - + com.github.haifengl + smile-core + 1.5.1 + @@ -273,31 +318,31 @@ 1.11 - + - com.github.haifengl - smile-core - 1.5.1 - + com.github.haifengl + smile-core + 1.5.1 + - net.spy - spymemcached - 2.12.3 + net.spy + spymemcached + 2.12.3 - + org.apache.maven.plugins maven-compiler-plugin - 2.5.1 + 3.8.1 - 1.8 - 1.8 + 17 + 17 @@ -434,83 +479,79 @@ - - - - - - - - - PredictionsAccuracyIntegrationTest - - - - org.codehaus.mojo - truezip-maven-plugin - 1.2 - - - unzip-database - - copy - - test - - true - - ${project.basedir}/src/test/resources/database/transitime_test.zip - ${project.basedir}/src/test/resources/database/data - - - - - - - org.onebusaway.plugins - maven-hsqldb-plugin - - 1.0.1 - - - user-database-start - test - - run - - - true - ${project.basedir}/src/test/resources/database/data/transitime_test - 9001 - - - - - - org.codehaus.mojo - exec-maven-plugin - 1.1.1 - - - test - test-case-execution - - java - - - org.transitclock.applications.PredictionsAccuracyIntegrationTest - -c transitime/src/test/resources/transiTimeConfigIntegrationTest.xml -gtfsDirectoryName transitime/src/test/resources/wmata_gtfs -storeNewRevs -maxTravelTimeSegmentLength 1000 - - - - - - - + + PredictionsAccuracyIntegrationTest + + + + org.codehaus.mojo + truezip-maven-plugin + 1.2 + + + unzip-database + + copy + + test + + true + + ${project.basedir}/src/test/resources/database/transitime_test.zip + ${project.basedir}/src/test/resources/database/data + + + + + + + org.onebusaway.plugins + maven-hsqldb-plugin + + 1.0.1 + + + user-database-start + test + + run + + + true + ${project.basedir}/src/test/resources/database/data/transitime_test + 9001 + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.1.1 + + + test + test-case-execution + + java + + + org.transitclock.applications.PredictionsAccuracyIntegrationTest + -c + transitime/src/test/resources/transiTimeConfigIntegrationTest.xml + -gtfsDirectoryName transitime/src/test/resources/wmata_gtfs + -storeNewRevs -maxTravelTimeSegmentLength 1000 + + + + + + + diff --git a/transitclock/src/main/java/org/transitclock/applications/SchemaGenerator.java b/transitclock/src/main/java/org/transitclock/applications/SchemaGenerator.java index 9a749b594..b7fe34661 100644 --- a/transitclock/src/main/java/org/transitclock/applications/SchemaGenerator.java +++ b/transitclock/src/main/java/org/transitclock/applications/SchemaGenerator.java @@ -31,7 +31,10 @@ import java.nio.file.StandardCopyOption; import java.sql.Types; import java.util.ArrayList; +import java.util.EnumSet; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.commons.cli.BasicParser; import org.apache.commons.cli.CommandLine; @@ -40,9 +43,15 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; +import org.hibernate.boot.Metadata; +import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.dialect.MySQLDialect; +import org.hibernate.service.ServiceRegistry; import org.hibernate.tool.hbm2ddl.SchemaExport; +import org.hibernate.tool.hbm2ddl.SchemaExport.Action; +import org.hibernate.tool.schema.TargetType; import com.google.common.reflect.ClassPath; @@ -68,9 +77,10 @@ * */ public class SchemaGenerator { - private final Configuration cfg; + private final String packageName; private final String outputDirectory; + private static List> classList=null; private static final Logger logger = LoggerFactory.getLogger(SchemaGenerator.class); @@ -96,11 +106,10 @@ public ImprovedMySQLDialect() { @SuppressWarnings("unchecked") public SchemaGenerator(String packageName, String outputDirectory) throws Exception { - this.cfg = new Configuration(); - this.cfg.setProperty("hibernate.hbm2ddl.auto", "create"); - + + classList=new ArrayList>(); for (Class clazz : getClasses(packageName)) { - this.cfg.addAnnotatedClass(clazz); + classList.add(clazz); } this.packageName = packageName; @@ -151,24 +160,13 @@ private void trimCruftFromFile(String outputFilename) { // Filter out the alter table commands where dropping a key or // a constraint if (line.contains("alter table")) { - String nextLine = reader.readLine(); - if (nextLine.contains("drop")) { - // Need to continue reading until process a blank line - while (reader.readLine().length() != 0); + + if (line.contains("drop")) { + // Continue to next line since filtering out drop commands continue; - } else { - // It is an "alter table" command but not a "drop". - // Therefore need to keep this command. Since read in - // two lines need to handle this specially and then - // continue - writer.write(line); - writer.write("\n"); - writer.write(nextLine); - writer.write("\n"); - continue; - } + } } // Line not being filtered so write it to the file @@ -207,10 +205,12 @@ private void trimCruftFromFile(String outputFilename) { * @param dbDialect to use */ private void generate(Dialect dialect) { - cfg.setProperty("hibernate.dialect", dialect.getDialectClass()); - - SchemaExport export = new SchemaExport(cfg); - export.setDelimiter(";"); + + Map settings = new HashMap<>(); + settings.put("hibernate.dialect", dialect.getDialectClass()); + + ServiceRegistry serviceRegistry = + new StandardServiceRegistryBuilder().applySettings(settings).build(); // Determine file name. Use "ddl_" plus dialect name such as mysql or // oracle plus the package name with "_" replacing "." such as @@ -221,11 +221,23 @@ private void generate(Dialect dialect) { "ddl_" + dialect.name().toLowerCase() + "_" + packeNameSuffix + ".sql"; - export.setOutputFile(outputFilename); - // Export, but only to an SQL file. Don't actually modify the database - System.out.println("Writing file " + outputFilename); - export.execute(true, false, false, false); + System.out.println("Writing file " + outputFilename); + + MetadataSources metadatasource = new MetadataSources(serviceRegistry); + + for(Class annotatedClass:classList) + { + metadatasource.addAnnotatedClass( annotatedClass); + } + + Metadata metadata =metadatasource.buildMetadata(); + + new SchemaExport().setDelimiter(";") // + .setOutputFile(outputFilename) + .create(EnumSet.of(TargetType.SCRIPT), metadata); + + metadata.buildSessionFactory().close(); // Get rid of unneeded SQL for dropping tables and keys and such trimCruftFromFile(outputFilename); diff --git a/transitclock/src/main/java/org/transitclock/db/hibernate/HibernateUtils.java b/transitclock/src/main/java/org/transitclock/db/hibernate/HibernateUtils.java index d9af9fd5c..a390c4a75 100644 --- a/transitclock/src/main/java/org/transitclock/db/hibernate/HibernateUtils.java +++ b/transitclock/src/main/java/org/transitclock/db/hibernate/HibernateUtils.java @@ -32,7 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.transitclock.configData.DbSetupConfig; -import org.hibernate.service.ServiceRegistryBuilder; + /** * Utilities for dealing with Hibernate issues such as sessions. diff --git a/transitclock/src/main/java/org/transitclock/db/hibernate/PrecisionTimestampType.java b/transitclock/src/main/java/org/transitclock/db/hibernate/PrecisionTimestampType.java index 837300416..0749dc0a2 100644 --- a/transitclock/src/main/java/org/transitclock/db/hibernate/PrecisionTimestampType.java +++ b/transitclock/src/main/java/org/transitclock/db/hibernate/PrecisionTimestampType.java @@ -25,6 +25,7 @@ import org.hibernate.HibernateException; import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.type.TimestampType; import org.hibernate.usertype.UserType; @@ -104,13 +105,15 @@ public int hashCode(Object x) throws HibernateException { public boolean isMutable() { return false; } + + /* (non-Javadoc) * @see org.hibernate.usertype.UserType#nullSafeGet(java.sql.ResultSet, java.lang.String[], org.hibernate.engine.spi.SessionImplementor, java.lang.Object) */ @Override public Object nullSafeGet(ResultSet rs, String[] names, - SessionImplementor session, Object owner) + SharedSessionContractImplementor session, Object owner) throws HibernateException, SQLException { assert names.length == 1; @@ -129,7 +132,7 @@ public Object nullSafeGet(ResultSet rs, String[] names, */ @Override public void nullSafeSet(PreparedStatement st, Object value, int index, - SessionImplementor session) throws HibernateException, SQLException { + SharedSessionContractImplementor session) throws HibernateException, SQLException { if ( value != null ) { // System.out.println("value.class=" + value.getClass().getName()); // System.out.println("value=" + value); @@ -167,4 +170,6 @@ public Class returnedClass() { return Timestamp.class; } + + } diff --git a/transitclock/src/main/java/org/transitclock/db/structs/Block.java b/transitclock/src/main/java/org/transitclock/db/structs/Block.java index f5a2a21a6..32541db16 100644 --- a/transitclock/src/main/java/org/transitclock/db/structs/Block.java +++ b/transitclock/src/main/java/org/transitclock/db/structs/Block.java @@ -49,6 +49,7 @@ import org.hibernate.annotations.DynamicUpdate; import org.hibernate.collection.internal.PersistentList; import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.internal.SessionImpl; import org.postgresql.util.PSQLException; import org.slf4j.Logger; @@ -837,7 +838,7 @@ public List getTrips() { // Get the current session associated with the trips. // Can be null. PersistentList persistentListTrips = (PersistentList) trips; - SessionImplementor session = + SharedSessionContractImplementor session = persistentListTrips.getSession(); // If the session is different from the global @@ -902,7 +903,7 @@ public List getTrips() { // but still got exception "Illegal attempt to associate // a collection with two open sessions" PersistentList persistentListTrips = (PersistentList) trips; - SessionImplementor sessionImpl = + SharedSessionContractImplementor sessionImpl = persistentListTrips.getSession(); SessionImpl session = (SessionImpl) sessionImpl; if (!session.isClosed()) { diff --git a/transitclock/src/main/java/org/transitclock/db/structs/TravelTimesForTrip.java b/transitclock/src/main/java/org/transitclock/db/structs/TravelTimesForTrip.java index 68d7e27f4..703cc4aac 100644 --- a/transitclock/src/main/java/org/transitclock/db/structs/TravelTimesForTrip.java +++ b/transitclock/src/main/java/org/transitclock/db/structs/TravelTimesForTrip.java @@ -28,6 +28,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Index; +import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.OrderColumn; @@ -102,7 +103,9 @@ public Integer getId() { private final String tripCreatedForId; @ManyToMany(fetch=FetchType.EAGER) - @JoinTable(name="TravelTimesForTrip_to_TravelTimesForPath_joinTable") + @JoinTable(name="TravelTimesForTrip_to_TravelTimesForPath_joinTable", + joinColumns=@JoinColumn(name="traveltimesfortrips_id", referencedColumnName="id"), + inverseJoinColumns=@JoinColumn(name="traveltimesforstoppaths_id", referencedColumnName="id")) @Cascade({CascadeType.SAVE_UPDATE}) @OrderColumn(name="listIndex") private final List travelTimesForStopPaths = diff --git a/transitclock/src/main/java/org/transitclock/db/structs/Trip.java b/transitclock/src/main/java/org/transitclock/db/structs/Trip.java index 75e5851d8..240916f98 100644 --- a/transitclock/src/main/java/org/transitclock/db/structs/Trip.java +++ b/transitclock/src/main/java/org/transitclock/db/structs/Trip.java @@ -42,6 +42,7 @@ import org.hibernate.annotations.DynamicUpdate; import org.hibernate.collection.internal.PersistentList; import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.classic.Lifecycle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -1023,7 +1024,7 @@ public ScheduleTime getScheduleTime(int stopPathIndex) { // TODO this is an anti-pattern // instead find a way to manage sessions more consistently PersistentList persistentListTimes = (PersistentList)scheduledTimesList; - SessionImplementor session = + SharedSessionContractImplementor session = persistentListTimes.getSession(); if (session == null) { Session globalLazyLoadSession = Core.getInstance().getDbConfig().getGlobalSession(); diff --git a/transitclock/src/main/java/org/transitclock/db/structs/TripPattern.java b/transitclock/src/main/java/org/transitclock/db/structs/TripPattern.java index d12665316..c75aaa496 100644 --- a/transitclock/src/main/java/org/transitclock/db/structs/TripPattern.java +++ b/transitclock/src/main/java/org/transitclock/db/structs/TripPattern.java @@ -28,6 +28,7 @@ import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinTable; +import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OrderColumn; import javax.persistence.Table; @@ -79,7 +80,17 @@ public class TripPattern implements Serializable, Lifecycle { // Paths are automatically stored. @OneToMany(fetch=FetchType.EAGER) @Cascade({CascadeType.SAVE_UPDATE}) - @JoinTable(name="TripPattern_to_Path_joinTable") + @JoinTable(name="TripPattern_to_Path_joinTable", + joinColumns= { + @JoinColumn(name="trippattern_id", referencedColumnName="id"), + @JoinColumn(name="trippatterns_configrev", referencedColumnName="configrev") + }, + inverseJoinColumns= { + @JoinColumn(name="stoppaths_trippatternid", referencedColumnName="trippatternid"), + @JoinColumn(name="stoppaths_stoppathid", referencedColumnName="stoppathid"), + @JoinColumn(name="stoppaths_configrev", referencedColumnName="configRev") + }) + @OrderColumn( name="listIndex") final protected List stopPaths; diff --git a/transitclockApi/pom.xml b/transitclockApi/pom.xml index 3049c8888..7edeb4c1d 100755 --- a/transitclockApi/pom.xml +++ b/transitclockApi/pom.xml @@ -1,4 +1,6 @@ - + 4.0.0 TheTransitClock @@ -8,10 +10,9 @@ transitclockApi - UTF-8 - 1.8 - 1.8 - + UTF-8 + + @@ -32,21 +33,25 @@ org.glassfish.jersey.media jersey-media-moxy - 2.24.1 + 2.35 org.slf4j slf4j-api 1.7.2 - + org.glassfish.jersey.containers jersey-container-servlet - 2.24.1 + 2.35 + + + org.glassfish.jersey.inject + jersey-hk2 + 2.35 - TheTransitClock transitclockCore @@ -58,46 +63,43 @@ TheTransitClock - transitclockBarefootClient + transitclockBarefootClient TheTransitClock - transitclockTraccarClient - + transitclockTraccarClient + - - com.google.guava - guava - 20.0 - - - org.glassfish.jersey.bundles.repackaged - jersey-guava - 2.6 - - + + com.google.guava + guava + 20.0 + + + org.glassfish.jersey.bundles.repackaged + jersey-guava + 2.6 + + - - - - - - io.swagger.core.v3 - swagger-jaxrs2 - 2.0.2 - + + + + + + io.swagger.core.v3 + swagger-jaxrs2 + 2.0.2 + - - - org.webjars - swagger-ui - 3.17.1 - + + + org.webjars + swagger-ui + 3.17.1 + @@ -111,13 +113,18 @@ org.apache.maven.plugins maven-compiler-plugin - 2.5.1 + 3.8.1 true - 1.8 - 1.8 + 17 + 17 + + org.apache.maven.plugins + maven-war-plugin + 3.3.1 + diff --git a/transitclockBarefootClient/pom.xml b/transitclockBarefootClient/pom.xml index 56e03686e..fc390f2b5 100644 --- a/transitclockBarefootClient/pom.xml +++ b/transitclockBarefootClient/pom.xml @@ -2,18 +2,32 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - TheTransitClock transitclockBarefootClient - 2.0.0-SNAPSHOT jar transitclockBarefootClient http://maven.apache.org - - UTF-8 - - + + + TheTransitClock + transitclock + 2.0.0-SNAPSHOT + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 17 + 17 + + + + junit diff --git a/transitclockQuickStart/pom.xml b/transitclockQuickStart/pom.xml index 3901fea48..411a724b9 100644 --- a/transitclockQuickStart/pom.xml +++ b/transitclockQuickStart/pom.xml @@ -3,11 +3,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 - TheTransitClock transitclockQuickStart - 2.0.0-SNAPSHOT transitclockQuickStart http://maven.apache.org + + TheTransitClock + transitclock + 2.0.0-SNAPSHOT + 9.4.15.v20190215 @@ -88,11 +91,13 @@ + org.apache.maven.plugins maven-compiler-plugin - 3.8.0 + 3.8.1 + - 1.8 - 1.8 + 17 + 17 diff --git a/transitclockTraccarClient/pom.xml b/transitclockTraccarClient/pom.xml index dcead3184..b501a4e52 100644 --- a/transitclockTraccarClient/pom.xml +++ b/transitclockTraccarClient/pom.xml @@ -1,11 +1,13 @@ 4.0.0 - TheTransitClock transitclockTraccarClient - 2.0.0-SNAPSHOT jar - + + TheTransitClock + transitclock + 2.0.0-SNAPSHOT + transitclockTraccarClient http://maven.apache.org @@ -45,11 +47,12 @@ + org.apache.maven.plugins maven-compiler-plugin - 2.5.1 + 3.8.1 - 1.7 - 1.7 + 17 + 17 diff --git a/transitclockWebapp/pom.xml b/transitclockWebapp/pom.xml index 0c40110fa..39bdfd4cf 100644 --- a/transitclockWebapp/pom.xml +++ b/transitclockWebapp/pom.xml @@ -1,4 +1,6 @@ - + 4.0.0 TheTransitClock transitclockWebapp @@ -8,8 +10,8 @@ http://maven.apache.org - UTF-8 - + UTF-8 + @@ -28,12 +30,12 @@ org.slf4j slf4j-api 1.7.2 - + - org.apache.commons - commons-lang3 - 3.4 + org.apache.commons + commons-lang3 + 3.4 TheTransitClock @@ -55,13 +57,18 @@ org.apache.maven.plugins maven-compiler-plugin - 2.5.1 + 3.8.1 true - 1.8 - 1.8 + 17 + 17 + + org.apache.maven.plugins + maven-war-plugin + 3.3.1 + org.apache.tomcat.maven tomcat7-maven-plugin