From e6b4cd695cfc6c0d4b0ea53cc403a4384d0f4d69 Mon Sep 17 00:00:00 2001
From: Joaquín Reñé <jrene@curisit.net>
Date: Sun, 19 Apr 2026 15:44:36 +0000
Subject: [PATCH] #4479 - upgrade SecurisServer to Java 21
---
securis/src/main/java/net/curisit/securis/ioc/EntityManagerProducer.java | 9 +++-
securis/src/main/java/net/curisit/securis/RestServicesApplication.java | 2
securis/src/main/java/net/curisit/securis/db/listeners/CreationTimestampListener.java | 2
securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java | 7 +++
securis/src/main/webapp/src/app/footer.component.ts | 2
securis/src/main/java/net/curisit/securis/db/listeners/ModificationTimestampListener.java | 4 +-
securis/src/main/java/net/curisit/securis/services/PackResource.java | 4 +-
securis/pom.xml | 12 ++++++
securis/src/main/webapp/WEB-INF/web.xml | 4 +-
securis/src/main/java/net/curisit/securis/services/UserResource.java | 5 ++
securis/src/main/java/net/curisit/securis/db/Settings.java | 14 +++---
securis/src/main/webapp/src/app/user.service.ts | 4 +-
securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java | 18 +++------
13 files changed, 54 insertions(+), 33 deletions(-)
diff --git a/securis/pom.xml b/securis/pom.xml
index cc62f8a..7ee0670 100644
--- a/securis/pom.xml
+++ b/securis/pom.xml
@@ -59,6 +59,11 @@
<artifactId>resteasy-jackson2-provider</artifactId>
<version>${resteasy.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-cdi</artifactId>
+ <version>${resteasy.version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
@@ -102,11 +107,18 @@
<version>${hibernate.version}</version>
</dependency>
-->
+ <!--
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
+ -->
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-core-jakarta</artifactId>
+ <version>5.6.15.Final</version>
+ </dependency>
<!-- Logging -->
<dependency>
diff --git a/securis/src/main/java/net/curisit/securis/RestServicesApplication.java b/securis/src/main/java/net/curisit/securis/RestServicesApplication.java
index c3dcffe..b6a7ea3 100644
--- a/securis/src/main/java/net/curisit/securis/RestServicesApplication.java
+++ b/securis/src/main/java/net/curisit/securis/RestServicesApplication.java
@@ -8,7 +8,7 @@
import jakarta.ws.rs.core.Application;
-///import net.curisit.securis.ioc.RequestsInterceptor;
+/// import net.curisit.securis.ioc.RequestsInterceptor;
import net.curisit.securis.services.ApiResource;
import net.curisit.securis.services.ApplicationResource;
import net.curisit.securis.services.BasicServices;
diff --git a/securis/src/main/java/net/curisit/securis/db/Settings.java b/securis/src/main/java/net/curisit/securis/db/Settings.java
index ed28e2c..1455bee 100644
--- a/securis/src/main/java/net/curisit/securis/db/Settings.java
+++ b/securis/src/main/java/net/curisit/securis/db/Settings.java
@@ -6,13 +6,13 @@
import java.io.Serializable;
import java.util.Date;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.Id;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EntityListeners;
+import jakarta.persistence.Id;
+import jakarta.persistence.NamedQueries;
+import jakarta.persistence.NamedQuery;
+import jakarta.persistence.Table;
import net.curisit.securis.db.common.ModificationTimestampEntity;
import net.curisit.securis.db.listeners.ModificationTimestampListener;
diff --git a/securis/src/main/java/net/curisit/securis/db/listeners/CreationTimestampListener.java b/securis/src/main/java/net/curisit/securis/db/listeners/CreationTimestampListener.java
index 0e858e3..bd53c19 100644
--- a/securis/src/main/java/net/curisit/securis/db/listeners/CreationTimestampListener.java
+++ b/securis/src/main/java/net/curisit/securis/db/listeners/CreationTimestampListener.java
@@ -5,7 +5,7 @@
import java.util.Date;
-import javax.persistence.PrePersist;
+import jakarta.persistence.PrePersist;
import net.curisit.securis.db.common.CreationTimestampEntity;
diff --git a/securis/src/main/java/net/curisit/securis/db/listeners/ModificationTimestampListener.java b/securis/src/main/java/net/curisit/securis/db/listeners/ModificationTimestampListener.java
index 937269f..856db96 100644
--- a/securis/src/main/java/net/curisit/securis/db/listeners/ModificationTimestampListener.java
+++ b/securis/src/main/java/net/curisit/securis/db/listeners/ModificationTimestampListener.java
@@ -5,8 +5,8 @@
import java.util.Date;
-import javax.persistence.PrePersist;
-import javax.persistence.PreUpdate;
+import jakarta.persistence.PrePersist;
+import jakarta.persistence.PreUpdate;
import net.curisit.securis.db.common.ModificationTimestampEntity;
diff --git a/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProducer.java b/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProducer.java
index fe4612d..dc560fa 100644
--- a/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProducer.java
+++ b/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProducer.java
@@ -19,7 +19,7 @@
@RequestScoped
public class EntityManagerProducer {
- private static final Logger LOG = LogManager.getLogger(EntityManagerProducer.class);
+ private static final Logger log = LogManager.getLogger(EntityManagerProducer.class);
@Inject
private EntityManagerProvider emProvider;
@@ -28,13 +28,16 @@
@RequestScoped
public EntityManager produceEntityManager() {
EntityManager em = emProvider.getEntityManager();
- LOG.info("Produced EntityManager: {}", em);
+ if (em == null) {
+ throw new IllegalStateException("EntityManagerProvider returned null EntityManager");
+ }
+ log.info("Produced EntityManager: {}", em);
return em;
}
public void closeEntityManager(@Disposes EntityManager em) {
if (em != null && em.isOpen()) {
- LOG.info("Closing produced EntityManager: {}", em);
+ log.info("Closing produced EntityManager: {}", em);
em.close();
}
}
diff --git a/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java b/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java
index 19bdfc8..d4d2e74 100644
--- a/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java
+++ b/securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java
@@ -45,7 +45,7 @@
log.info("EntityManagerFactory initialized correctly: {}", entityManagerFactory);
} catch (Exception e) {
log.error("Error creating EntityManagerFactory for persistence unit 'localdb'", e);
- entityManagerFactory = null;
+ throw new IllegalStateException("Could not initialize EntityManagerFactory", e);
}
}
@@ -56,17 +56,11 @@
* @return a new EntityManager; caller must close it
*/
public EntityManager getEntityManager() {
- try {
- if (entityManagerFactory == null) {
- log.error("EntityManagerFactory is null");
- return null;
- }
- EntityManager em = entityManagerFactory.createEntityManager();
- log.info("Created EntityManager: {}", em);
- return em;
- } catch (Exception e) {
- log.error("Error creating EntityManager", e);
- return null;
+ if (entityManagerFactory == null) {
+ throw new IllegalStateException("EntityManagerFactory is null");
}
+ EntityManager em = entityManagerFactory.createEntityManager();
+ log.info("Created EntityManager: {}", em);
+ return em;
}
}
diff --git a/securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java b/securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java
index 4c55831..64e3e92 100644
--- a/securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java
+++ b/securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java
@@ -9,6 +9,7 @@
import java.util.Set;
import jakarta.annotation.Priority;
+import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.persistence.EntityManager;
import jakarta.servlet.http.HttpServletRequest;
@@ -53,6 +54,7 @@
* Last reviewed by JRA on Oct 5, 2025.
*/
@Provider
+@ApplicationScoped
@Priority(Priorities.AUTHENTICATION)
public class RequestsInterceptor implements ContainerRequestFilter, WriterInterceptor {
@@ -82,6 +84,11 @@
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
+ log.info("RequestsInterceptor instance={}", this);
+ log.info("Injected tokenHelper={}", tokenHelper);
+ log.info("Injected cache={}", cache);
+ log.info("Injected em={}", em);
+
Method method = resourceInfo != null ? resourceInfo.getResourceMethod() : null;
if (method == null) {
log.warn("RequestsInterceptor: resource method is null");
diff --git a/securis/src/main/java/net/curisit/securis/services/PackResource.java b/securis/src/main/java/net/curisit/securis/services/PackResource.java
index 85b784f..5049445 100644
--- a/securis/src/main/java/net/curisit/securis/services/PackResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/PackResource.java
@@ -74,7 +74,7 @@
@Inject MetadataHelper metadataHelper;
@Inject private LicenseHelper licenseHelper;
- @Context EntityManager em;
+ @Inject EntityManager em;
/**
* index
@@ -310,7 +310,7 @@
* @throws SeCurisServiceException on invalid state.
*/
@POST
- @Path("/{packId}/putonhold}")
+ @Path("/{packId}/putonhold")
@EnsureTransaction
@Securable(roles = Rol.ADMIN | Rol.ADVANCE)
@RolesAllowed(BasicSecurityContext.ROL_ADMIN)
diff --git a/securis/src/main/java/net/curisit/securis/services/UserResource.java b/securis/src/main/java/net/curisit/securis/services/UserResource.java
index 0764f5e..3674d25 100644
--- a/securis/src/main/java/net/curisit/securis/services/UserResource.java
+++ b/securis/src/main/java/net/curisit/securis/services/UserResource.java
@@ -406,6 +406,11 @@
LOG.info("index session: " + request.getSession());
LOG.info("login() called. session={}", request.getSession(false));
LOG.info("login() username='{}'", username);
+
+ LOG.info("UserResource instance={}", this);
+ LOG.info("Injected em={}", em);
+ LOG.info("Injected tokenHelper={}", tokenHelper);
+ LOG.info("Injected cache={}", cache);
if (username == null || username.trim().isEmpty()) {
LOG.error("login() username is null or empty");
diff --git a/securis/src/main/webapp/WEB-INF/web.xml b/securis/src/main/webapp/WEB-INF/web.xml
index 61cb287..32393d6 100644
--- a/securis/src/main/webapp/WEB-INF/web.xml
+++ b/securis/src/main/webapp/WEB-INF/web.xml
@@ -36,17 +36,17 @@
<param-name>resteasy.providers</param-name>
<param-value>net.curisit.securis.DefaultExceptionHandler</param-value>
</context-param>
+
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/api</param-value>
</context-param>
- <!--
<context-param>
<param-name>resteasy.injector.factory</param-name>
<param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value>
</context-param>
- -->
+
<filter>
<filter-name>DevFilter</filter-name>
diff --git a/securis/src/main/webapp/src/app/footer.component.ts b/securis/src/main/webapp/src/app/footer.component.ts
index 2018eaa..309167b 100644
--- a/securis/src/main/webapp/src/app/footer.component.ts
+++ b/securis/src/main/webapp/src/app/footer.component.ts
@@ -17,7 +17,7 @@
ngOnInit(): void {
//TODO Move to service
- this.http.get("api/version", /* workaround to avoid OPTIONS method request*/ new BaseRequestOptions())
+ this.http.get("version", /* workaround to avoid OPTIONS method request*/ new BaseRequestOptions())
.map((res) => <string>res.json().version)
.subscribe(
version => this.securisVersion = version,
diff --git a/securis/src/main/webapp/src/app/user.service.ts b/securis/src/main/webapp/src/app/user.service.ts
index 95273eb..45bb541 100644
--- a/securis/src/main/webapp/src/app/user.service.ts
+++ b/securis/src/main/webapp/src/app/user.service.ts
@@ -27,7 +27,7 @@
params.append('username', username);
params.append('password', password);
let options = new RequestOptions({ headers: new Headers({ "Content-Type": "application/x-www-form-urlencoded" })});
- return this.http.post('api/user/login', params.toString(), options)
+ return this.http.post('user/login', params.toString(), options)
.map((resp) => this.mapLogin(resp))
.catch((err) => super.processErrorResponse(err));
}
@@ -47,7 +47,7 @@
}
var token = this.store.get("token");
let option = new RequestOptions({ headers: new Headers({ 'X-SECURIS-TOKEN': token }) });
- return this.http.get('api/check', option)
+ return this.http.get('check', option)
.map((resp) => this.mapCheck(resp))
.catch((err) => super.processErrorResponse(err));
}
--
Gitblit v1.3.2