UniTime / unitime

Comprehensive University Timetabling System
http://www.unitime.org
Apache License 2.0
274 stars 162 forks source link

Unitime Multiple Primary Keys Error #170

Closed strixthekiet closed 2 months ago

strixthekiet commented 4 months ago

Hi all,

Below is container with dockerfile:

FROM tomcat:8-jre11
RUN apt-get update
RUN echo 'JAVA_OPTS=”-Djava.awt.headless=true -Xmx2g -XX:+UseConcMarkSweepGC”' >> /etc/default/tomcat8
RUN sed -i "s|-Djava.protocol.handler.pkgs=org.apache.catalina.webresources|-Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djava.awt.headless=true -Xmx2g -XX:+UseConcMarkSweepGC|g" \
/usr/local/tomcat/bin/catalina.sh
RUN mkdir /usr/local/tomcat/data
RUN chmod 777 /usr/local/tomcat/data
ADD https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.31/mysql-connector-j-8.0.31.jar /usr/local/tomcat/lib
RUN echo 'tmtbl.custom.properties=/usr/local/tomcat/conf/unitime.properties' >> /usr/local/tomcat/conf/catalina.properties
ADD web/UniTime.war /usr/local/tomcat/webapps/ROOT.war
COPY unitime.properties /usr/local/tomcat/conf/unitime.properties

I wish to connect the container to Azure MySQL database, however, it seems to have a problem with primary keys of the database. I have ran the schema.sql file as well as the woebegon_data.sql file. Here is the full stack trace:

docker run a_v8 
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
04-May-2024 17:16:39.462 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/8.5.100
04-May-2024 17:16:39.464 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Mar 19 2024 13:54:42 UTC
04-May-2024 17:16:39.465 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 8.5.100.0
04-May-2024 17:16:39.465 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
04-May-2024 17:16:39.465 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.15.146.1-microsoft-standard-WSL2
04-May-2024 17:16:39.466 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
04-May-2024 17:16:39.466 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
04-May-2024 17:16:39.466 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.22+7
04-May-2024 17:16:39.466 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium
04-May-2024 17:16:39.466 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
04-May-2024 17:16:39.467 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
04-May-2024 17:16:39.467 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
04-May-2024 17:16:39.468 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
04-May-2024 17:16:39.468 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
04-May-2024 17:16:39.469 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
04-May-2024 17:16:39.469 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
04-May-2024 17:16:39.469 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
04-May-2024 17:16:39.469 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
04-May-2024 17:16:39.469 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
04-May-2024 17:16:39.469 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.awt.headless=true
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx2g
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+UseConcMarkSweepGC
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.39] using APR version [1.7.0].
04-May-2024 17:16:39.470 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [{4}].
04-May-2024 17:16:39.471 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
04-May-2024 17:16:39.473 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.2 15 Mar 2022]
04-May-2024 17:16:39.510 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
04-May-2024 17:16:39.523 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 304 ms
04-May-2024 17:16:39.562 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
04-May-2024 17:16:39.562 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/8.5.100]
04-May-2024 17:16:39.578 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/ROOT.war]
04-May-2024 17:16:40.973 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[05/04/24 17:16:41] INFO  ContextLoader> Root WebApplicationContext: initialization started
[05/04/24 17:16:42] INFO  SpringSecurityCoreVersion> You are running with Spring Security Core 5.8.10
[05/04/24 17:16:42] INFO  SecurityNamespaceHandler> Spring Security 'config' module version is 5.8.10
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Creating access control expression attribute 'isAuthenticated()' for /temp/*
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Creating access control expression attribute 'permitAll' for /classes.action
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Creating access control expression attribute 'permitAll' for /exams.action
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Creating access control expression attribute 'permitAll' for /login.action
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Creating access control expression attribute 'permitAll' for /main.action
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Creating access control expression attribute 'permitAll' for /gwt.action
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Creating access control expression attribute 'isAuthenticated()' for /*.do
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Creating access control expression attribute 'isAuthenticated()' for /*.action
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Creating access control expression attribute 'permitAll' for /**
[05/04/24 17:16:42] INFO  FilterInvocationSecurityMetadataSourceParser> Using bean 'webExpressionHandler' as web SecurityExpressionHandler implementation
[05/04/24 17:16:42] INFO  HttpSecurityBeanDefinitionParser> Checking sorted filter chain: [Root bean: class [org.springframework.security.web.session.DisableEncodeUrlFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 100, Root bean: class [org.springframework.security.web.context.SecurityContextPersistenceFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 400, Root bean: class [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 600, Root bean: class [org.springframework.security.web.header.HeaderWriterFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 700, Root bean: class [org.springframework.security.web.authentication.logout.LogoutFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 1300, <org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0>, order = 2100, Root bean: class [org.springframework.security.web.authentication.www.BasicAuthenticationFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 2700, Root bean: class [org.springframework.security.web.savedrequest.RequestCacheAwareFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 2800, Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.security.config.http.HttpConfigurationBuilder$SecurityContextHolderAwareRequestFilterBeanFactory#0; factoryMethodName=getBean; initMethodName=null; destroyMethodName=null, order = 2900, <unitimeAnonymousFilter>, order = 3200, Root bean: class [org.springframework.security.web.session.SessionManagementFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 3500, Root bean: class [org.springframework.security.web.access.ExceptionTranslationFilter]; scope=; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null, order = 3600, <org.springframework.security.web.access.intercept.FilterSecurityInterceptor#0>, order = 3700]
[05/04/24 17:16:42] INFO  GlobalMethodSecurityBeanDefinitionParser> Using bean 'expressionHandler' as method ExpressionHandler implementation
[05/04/24 17:16:42] INFO  load> Reading file:/usr/local/tomcat/webapps/ROOT/WEB-INF/lib/timetable.jar!/application.properties ...
[05/04/24 17:16:42] INFO  load> Reading /usr/local/tomcat/conf/unitime.properties ...
[05/04/24 17:16:42] INFO  afterPropertiesSet> ******* UniTime 4.8.115 build on Wed, 13 Mar 2024 is starting up *******
[05/04/24 17:16:42] INFO  afterPropertiesSet>  - Initializing Hibernate ...
[05/04/24 17:16:42] INFO  HibernateUtil> Connecting to jdbc:mysql://unitime.mysql.database.azure.com:3306/timetable?useSSL=true&serverTimezone=UTC
[05/04/24 17:16:42] INFO  Version> HHH000412: Hibernate ORM core version 6.2.22.Final
[05/04/24 17:16:42] INFO  Environment> HHH000406: Using bytecode reflection optimizer
[05/04/24 17:16:42] INFO  c3p0> HHH010002: C3P0 using driver: com.mysql.cj.jdbc.Driver at URL: jdbc:mysql://unitime.mysql.database.azure.com:3306/timetable?useSSL=true&serverTimezone=UTC
[05/04/24 17:16:42] INFO  c3p0> HHH10001001: Connection properties: {handling_mode=DELAYED_ACQUISITION_AND_HOLD, release_mode=auto, password=****, autocommit=true, useUnicode=true, characterEncoding=utf8, user=dev_admin}        
[05/04/24 17:16:42] INFO  c3p0> HHH10001003: Autocommit mode: true
[05/04/24 17:16:42] INFO  MLog> MLog clients using slf4j logging.
[05/04/24 17:16:42] INFO  C3P0Registry> Initializing c3p0-0.9.5.5 [built 11-December-2019 22:18:33 -0800; debug? true; trace: 10]
[05/04/24 17:16:42] INFO  c3p0> HHH10001007: JDBC isolation level: <unknown>
[05/04/24 17:16:42] INFO  AbstractPoolBackedDataSource> Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@34a9110e [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@28b42728 [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, identityToken -> 1bqq1hgb3j1b19z3jdfdy|313dbd10, idleConnectionTestPeriod -> 3000, initialPoolSize -> 10, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 1800, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 100, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 10, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@c88e58a4 [ description -> null, driverClass -> null, factoryClassLocation -> null, forceUseNamedDriverClass -> false, identityToken -> 1bqq1hgb3j1b19z3jdfdy|410669f4, jdbcUrl -> jdbc:mysql://unitime.mysql.database.azure.com:3306/timetable?useSSL=true&serverTimezone=UTC, properties -> {handling_mode=DELAYED_ACQUISITION_AND_HOLD, release_mode=auto, password=******, autocommit=true, useUnicode=true, characterEncoding=utf8, user=******} ], preferredTestQuery -> SELECT 1;, privilegeSpawnedThreads -> false, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, extensions -> {}, factoryClassLocation -> null, identityToken -> 1bqq1hgb3j1b19z3jdfdy|5b768600, numHelperThreads -> 3 ]
[05/04/24 17:16:44] WARN  deprecation> HHH90000025: MySQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
[05/04/24 17:16:44] INFO  run> InfoCache cleanup thread started.
[05/04/24 17:16:45] WARN  PERSISTENCE> ISPN000554: jboss-marshalling is deprecated and planned for removal
[05/04/24 17:16:45] WARN  CONFIG> ISPN000569: Unable to persist Infinispan internal caches as no global state enabled
[05/04/24 17:16:45] INFO  CONTAINER> ISPN000556: Starting user marshaller 'org.infinispan.jboss.marshalling.core.JBossUserMarshaller'
[05/04/24 17:16:46] INFO  CONTAINER> ISPN000025: wakeUpInterval is <= 0, not starting expired purge thread
[05/04/24 17:16:48] INFO  <init>> Reading file:/usr/local/tomcat/webapps/ROOT/WEB-INF/lib/timetable.jar!/dbupdate.xml ...
[05/04/24 17:16:49] INFO  DatabaseUpdate> Current UniTime database version: 257
[05/04/24 17:16:49] INFO  DatabaseUpdate>   Performing UniTime update to version 258 (Table Generator Hibernate Update)
[05/04/24 17:16:49] WARN  SqlExceptionHelper> SQL Error: 1068, SQLState: 42000
[05/04/24 17:16:49] ERROR SqlExceptionHelper> Multiple primary key defined
[05/04/24 17:16:49] WARN  DatabaseUpdate> Query 'alter table timetable.hibernate_unique_key add sequence_name varchar(100) not null primary key default 'default'' failed, JDBC exception executing SQL [/* dynamic native SQL query */ alter table timetable.hibernate_unique_key add sequence_name varchar(100) not null primary key default 'default'] [Multiple primary key defined] [n/a]
org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [/* dynamic native SQL query */ alter table timetable.hibernate_unique_key add sequence_name varchar(100) not null primary key default 'default'] [Multiple primary key defined] [n/a]
        at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:64) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:56) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.sql.exec.internal.StandardJdbcMutationExecutor.execute(StandardJdbcMutationExecutor.java:96) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.query.sql.internal.NativeNonSelectQueryPlanImpl.executeUpdate(NativeNonSelectQueryPlanImpl.java:76) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.query.sql.internal.NativeQueryImpl.doExecuteUpdate(NativeQueryImpl.java:839) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.query.spi.AbstractQuery.executeUpdate(AbstractQuery.java:637) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.unitime.commons.hibernate.util.DatabaseUpdate.performUpdate(DatabaseUpdate.java:177) ~[timetable.jar:?]
        at org.unitime.commons.hibernate.util.DatabaseUpdate.performUpdate(DatabaseUpdate.java:108) ~[timetable.jar:?]
        at org.unitime.commons.hibernate.util.DatabaseUpdate.update(DatabaseUpdate.java:230) ~[timetable.jar:?]
        at org.unitime.commons.hibernate.util.HibernateUtil.initialize(HibernateUtil.java:616) ~[timetable.jar:?]
        at org.unitime.timetable.StartupService.afterPropertiesSet(StartupService.java:55) ~[timetable.jar:?]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) [spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) [spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) [spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) [spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:929) [spring-context-5.3.32.jar:5.3.32]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591) [spring-context-5.3.32.jar:5.3.32]
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:399) [spring-web-5.3.32.jar:5.3.32]
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:278) [spring-web-5.3.32.jar:5.3.32]
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) [spring-web-5.3.32.jar:5.3.32]
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4441) [catalina.jar:8.5.100]
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4899) [catalina.jar:8.5.100]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) [catalina.jar:8.5.100]
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:710) [catalina.jar:8.5.100]
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:687) [catalina.jar:8.5.100]
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:660) [catalina.jar:8.5.100]
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1015) [catalina.jar:8.5.100]
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1867) [catalina.jar:8.5.100]
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
        at java.base/java.lang.Thread.run(Unknown Source) [?:?]
Caused by: java.sql.SQLSyntaxErrorException: Multiple primary key defined
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1061) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1009) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1320) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:994) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:1502) ~[c3p0-0.9.5.5.jar:0.9.5.5]
        at org.hibernate.sql.exec.internal.StandardJdbcMutationExecutor.execute(StandardJdbcMutationExecutor.java:83) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        ... 35 more
[05/04/24 17:16:49] WARN  DatabaseUpdate> Cause: Multiple primary key defined
[05/04/24 17:16:49] ERROR DatabaseUpdate> Update to version 258 failed.
[05/04/24 17:16:49] INFO  DatabaseUpdate> New UniTime database version: 257
[05/04/24 17:16:49] INFO  afterPropertiesSet>  - Creating Message Log Appender ... 
[05/04/24 17:16:49] INFO  afterPropertiesSet>  - Initializing Room Availability Service ...
[05/04/24 17:16:50] INFO  afterPropertiesSet>  - Cleaning Logs ...
[05/04/24 17:16:52] WARN  SqlExceptionHelper> SQL Error: 1146, SQLState: 42S02
[05/04/24 17:16:52] ERROR SqlExceptionHelper> Table 'timetable.access_stats' doesn't exist
[05/04/24 17:16:52] WARN  LogCleaner> Failed to cleanup access statistics: JDBC exception executing SQL [/* delete from AccessStatistics where timeStamp < adddate(current_date(),:days) */ delete from access_stats where time_stamp<adddate(current_date,?)] [Table 'timetable.access_stats' doesn't exist] [n/a]
org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [/* delete from AccessStatistics where timeStamp < adddate(current_date(),:days) */ delete from access_stats where time_stamp<adddate(current_date,?)] [Table 'timetable.access_stats' doesn't exist] [n/a]
        at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:64) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:56) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:94) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.sql.exec.internal.StandardJdbcMutationExecutor.execute(StandardJdbcMutationExecutor.java:96) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.query.sqm.internal.SimpleDeleteQueryPlan.executeUpdate(SimpleDeleteQueryPlan.java:206) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.query.sqm.internal.QuerySqmImpl.doExecuteUpdate(QuerySqmImpl.java:735) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.hibernate.query.sqm.internal.QuerySqmImpl.executeUpdate(QuerySqmImpl.java:705) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        at org.unitime.timetable.util.LogCleaner.cleanupAccessStatisticsLog(LogCleaner.java:183) ~[timetable.jar:?]
        at org.unitime.timetable.util.LogCleaner.cleanupLogs(LogCleaner.java:203) ~[timetable.jar:?]
        at org.unitime.timetable.StartupService.afterPropertiesSet(StartupService.java:77) ~[timetable.jar:?]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) [spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) [spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) [spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) [spring-beans-5.3.32.jar:5.3.32]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:929) [spring-context-5.3.32.jar:5.3.32]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:591) [spring-context-5.3.32.jar:5.3.32]
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:399) [spring-web-5.3.32.jar:5.3.32]
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:278) [spring-web-5.3.32.jar:5.3.32]
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) [spring-web-5.3.32.jar:5.3.32]
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4441) [catalina.jar:8.5.100]
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4899) [catalina.jar:8.5.100]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) [catalina.jar:8.5.100]
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:710) [catalina.jar:8.5.100]
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:687) [catalina.jar:8.5.100]
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:660) [catalina.jar:8.5.100]
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1015) [catalina.jar:8.5.100]
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1867) [catalina.jar:8.5.100]
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
        at java.base/java.lang.Thread.run(Unknown Source) [?:?]
Caused by: java.sql.SQLSyntaxErrorException: Table 'timetable.access_stats' doesn't exist
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1061) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1009) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1320) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:994) ~[mysql-connector-j-8.0.31.jar:8.0.31]
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:1502) ~[c3p0-0.9.5.5.jar:0.9.5.5]
        at org.hibernate.sql.exec.internal.StandardJdbcMutationExecutor.execute(StandardJdbcMutationExecutor.java:83) ~[hibernate-core-6.2.22.Final.jar:6.2.22.Final]
        ... 33 more
[05/04/24 17:16:52] INFO  afterPropertiesSet>  - Starting Event Expiration Service ...
[05/04/24 17:16:52] INFO  EventExpirationService> Event expiration service started.
[05/04/24 17:16:52] INFO  EventExpirationService> Checking for expired events ...
[05/04/24 17:16:52] INFO  afterPropertiesSet> ******* UniTime 4.8.115 build on Wed, 13 Mar 2024 initialized successfully *******
[05/04/24 17:16:52] INFO  CourseSolverContainer> Solver passivation thread started.
[05/04/24 17:16:52] INFO  CourseSolverContainer> Restore folder: /usr/local/tomcat/data/unitime/restore
[05/04/24 17:16:52] INFO  ExaminationSolverContainer> Solver passivation thread started.
[05/04/24 17:16:52] INFO  StudentSolverContainer> Solver passivation thread started.
[05/04/24 17:16:52] INFO  OnlineStudentSchedulingContainer> Student Sectioning Service is starting up ...
[05/04/24 17:16:52] INFO  InstructorSchedulingContainer> Solver passivation thread started.
[05/04/24 17:16:52] INFO  AbstractSolverServer> Solver server is up and running.
[05/04/24 17:16:52] INFO  updater[generic]> Generic updater started.
[05/04/24 17:16:52] INFO  OnlineSectioningLogger> Online Sectioning Logger is up.
[05/04/24 17:16:53] INFO  MenuBackend> Reading menu from file:/usr/local/tomcat/webapps/ROOT/WEB-INF/lib/timetable.jar!/menu.xml ...
[05/04/24 17:16:53] INFO  MenuBackend> Reading custom menu from file:/usr/local/tomcat/webapps/ROOT/WEB-INF/lib/timetable.jar!/menu-custom.xml ...
[05/04/24 17:16:53] INFO  TaskExecutorService> Task executor service started.
tomas-muller commented 4 months ago

Looks like UniTime failed to update the database to version 258. I would have to see the first deployment to provide more details as to why. To fix this issue, you can manually update the database to this version using the 258 Table Generator Hibernate Update.sql file (ensure that all the listed changes have been applied). Restart the tomcat after that.

strixthekiet commented 4 months ago

Thank you so much, tomas. I really appreciate it.

However, after i ran file 258 following the order: schema, woebegon, 258 Table Generator Hibernate Update; I receive error on table 269.

tomas-muller commented 4 months ago

Do you mean that the database updated to version 268 but failed to update to 269? You can use the 269 Acess Control Statistics Update.sql script to make the changes manually. By the way, all updates are available in Documentation/Database/MySQL/Changes.