Joaquín Reñé
2 days ago e6b4cd695cfc6c0d4b0ea53cc403a4384d0f4d69
#4479 - upgrade SecurisServer to Java 21
13 files modified
changed files
securis/pom.xml patch | view | blame | history
securis/src/main/java/net/curisit/securis/RestServicesApplication.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/Settings.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/listeners/CreationTimestampListener.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/listeners/ModificationTimestampListener.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/ioc/EntityManagerProducer.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/services/PackResource.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/services/UserResource.java patch | view | blame | history
securis/src/main/webapp/WEB-INF/web.xml patch | view | blame | history
securis/src/main/webapp/src/app/footer.component.ts patch | view | blame | history
securis/src/main/webapp/src/app/user.service.ts patch | view | blame | history
securis/pom.xml
....@@ -59,6 +59,11 @@
5959 <artifactId>resteasy-jackson2-provider</artifactId>
6060 <version>${resteasy.version}</version>
6161 </dependency>
62
+ <dependency>
63
+ <groupId>org.jboss.resteasy</groupId>
64
+ <artifactId>resteasy-cdi</artifactId>
65
+ <version>${resteasy.version}</version>
66
+ </dependency>
6267 <dependency>
6368 <groupId>org.apache.httpcomponents</groupId>
6469 <artifactId>httpmime</artifactId>
....@@ -102,11 +107,18 @@
102107 <version>${hibernate.version}</version>
103108 </dependency>
104109 -->
110
+ <!--
105111 <dependency>
106112 <groupId>org.hibernate</groupId>
107113 <artifactId>hibernate-core</artifactId>
108114 <version>${hibernate.version}</version>
109115 </dependency>
116
+ -->
117
+ <dependency>
118
+ <groupId>org.hibernate</groupId>
119
+ <artifactId>hibernate-core-jakarta</artifactId>
120
+ <version>5.6.15.Final</version>
121
+ </dependency>
110122
111123 <!-- Logging -->
112124 <dependency>
securis/src/main/java/net/curisit/securis/RestServicesApplication.java
....@@ -8,7 +8,7 @@
88
99 import jakarta.ws.rs.core.Application;
1010
11
-///import net.curisit.securis.ioc.RequestsInterceptor;
11
+/// import net.curisit.securis.ioc.RequestsInterceptor;
1212 import net.curisit.securis.services.ApiResource;
1313 import net.curisit.securis.services.ApplicationResource;
1414 import net.curisit.securis.services.BasicServices;
securis/src/main/java/net/curisit/securis/db/Settings.java
....@@ -6,13 +6,13 @@
66 import java.io.Serializable;
77 import java.util.Date;
88
9
-import javax.persistence.Column;
10
-import javax.persistence.Entity;
11
-import javax.persistence.EntityListeners;
12
-import javax.persistence.Id;
13
-import javax.persistence.NamedQueries;
14
-import javax.persistence.NamedQuery;
15
-import javax.persistence.Table;
9
+import jakarta.persistence.Column;
10
+import jakarta.persistence.Entity;
11
+import jakarta.persistence.EntityListeners;
12
+import jakarta.persistence.Id;
13
+import jakarta.persistence.NamedQueries;
14
+import jakarta.persistence.NamedQuery;
15
+import jakarta.persistence.Table;
1616
1717 import net.curisit.securis.db.common.ModificationTimestampEntity;
1818 import net.curisit.securis.db.listeners.ModificationTimestampListener;
securis/src/main/java/net/curisit/securis/db/listeners/CreationTimestampListener.java
....@@ -5,7 +5,7 @@
55
66 import java.util.Date;
77
8
-import javax.persistence.PrePersist;
8
+import jakarta.persistence.PrePersist;
99
1010 import net.curisit.securis.db.common.CreationTimestampEntity;
1111
securis/src/main/java/net/curisit/securis/db/listeners/ModificationTimestampListener.java
....@@ -5,8 +5,8 @@
55
66 import java.util.Date;
77
8
-import javax.persistence.PrePersist;
9
-import javax.persistence.PreUpdate;
8
+import jakarta.persistence.PrePersist;
9
+import jakarta.persistence.PreUpdate;
1010
1111 import net.curisit.securis.db.common.ModificationTimestampEntity;
1212
securis/src/main/java/net/curisit/securis/ioc/EntityManagerProducer.java
....@@ -19,7 +19,7 @@
1919 @RequestScoped
2020 public class EntityManagerProducer {
2121
22
- private static final Logger LOG = LogManager.getLogger(EntityManagerProducer.class);
22
+ private static final Logger log = LogManager.getLogger(EntityManagerProducer.class);
2323
2424 @Inject
2525 private EntityManagerProvider emProvider;
....@@ -28,13 +28,16 @@
2828 @RequestScoped
2929 public EntityManager produceEntityManager() {
3030 EntityManager em = emProvider.getEntityManager();
31
- LOG.info("Produced EntityManager: {}", em);
31
+ if (em == null) {
32
+ throw new IllegalStateException("EntityManagerProvider returned null EntityManager");
33
+ }
34
+ log.info("Produced EntityManager: {}", em);
3235 return em;
3336 }
3437
3538 public void closeEntityManager(@Disposes EntityManager em) {
3639 if (em != null && em.isOpen()) {
37
- LOG.info("Closing produced EntityManager: {}", em);
40
+ log.info("Closing produced EntityManager: {}", em);
3841 em.close();
3942 }
4043 }
securis/src/main/java/net/curisit/securis/ioc/EntityManagerProvider.java
....@@ -45,7 +45,7 @@
4545 log.info("EntityManagerFactory initialized correctly: {}", entityManagerFactory);
4646 } catch (Exception e) {
4747 log.error("Error creating EntityManagerFactory for persistence unit 'localdb'", e);
48
- entityManagerFactory = null;
48
+ throw new IllegalStateException("Could not initialize EntityManagerFactory", e);
4949 }
5050 }
5151
....@@ -56,17 +56,11 @@
5656 * @return a new EntityManager; caller must close it
5757 */
5858 public EntityManager getEntityManager() {
59
- try {
60
- if (entityManagerFactory == null) {
61
- log.error("EntityManagerFactory is null");
62
- return null;
63
- }
64
- EntityManager em = entityManagerFactory.createEntityManager();
65
- log.info("Created EntityManager: {}", em);
66
- return em;
67
- } catch (Exception e) {
68
- log.error("Error creating EntityManager", e);
69
- return null;
59
+ if (entityManagerFactory == null) {
60
+ throw new IllegalStateException("EntityManagerFactory is null");
7061 }
62
+ EntityManager em = entityManagerFactory.createEntityManager();
63
+ log.info("Created EntityManager: {}", em);
64
+ return em;
7165 }
7266 }
securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java
....@@ -9,6 +9,7 @@
99 import java.util.Set;
1010
1111 import jakarta.annotation.Priority;
12
+import jakarta.enterprise.context.ApplicationScoped;
1213 import jakarta.inject.Inject;
1314 import jakarta.persistence.EntityManager;
1415 import jakarta.servlet.http.HttpServletRequest;
....@@ -53,6 +54,7 @@
5354 * Last reviewed by JRA on Oct 5, 2025.
5455 */
5556 @Provider
57
+@ApplicationScoped
5658 @Priority(Priorities.AUTHENTICATION)
5759 public class RequestsInterceptor implements ContainerRequestFilter, WriterInterceptor {
5860
....@@ -82,6 +84,11 @@
8284 @Override
8385 public void filter(ContainerRequestContext requestContext) throws IOException {
8486
87
+ log.info("RequestsInterceptor instance={}", this);
88
+ log.info("Injected tokenHelper={}", tokenHelper);
89
+ log.info("Injected cache={}", cache);
90
+ log.info("Injected em={}", em);
91
+
8592 Method method = resourceInfo != null ? resourceInfo.getResourceMethod() : null;
8693 if (method == null) {
8794 log.warn("RequestsInterceptor: resource method is null");
securis/src/main/java/net/curisit/securis/services/PackResource.java
....@@ -74,7 +74,7 @@
7474 @Inject MetadataHelper metadataHelper;
7575 @Inject private LicenseHelper licenseHelper;
7676
77
- @Context EntityManager em;
77
+ @Inject EntityManager em;
7878
7979 /**
8080 * index
....@@ -310,7 +310,7 @@
310310 * @throws SeCurisServiceException on invalid state.
311311 */
312312 @POST
313
- @Path("/{packId}/putonhold}")
313
+ @Path("/{packId}/putonhold")
314314 @EnsureTransaction
315315 @Securable(roles = Rol.ADMIN | Rol.ADVANCE)
316316 @RolesAllowed(BasicSecurityContext.ROL_ADMIN)
securis/src/main/java/net/curisit/securis/services/UserResource.java
....@@ -406,6 +406,11 @@
406406 LOG.info("index session: " + request.getSession());
407407 LOG.info("login() called. session={}", request.getSession(false));
408408 LOG.info("login() username='{}'", username);
409
+
410
+ LOG.info("UserResource instance={}", this);
411
+ LOG.info("Injected em={}", em);
412
+ LOG.info("Injected tokenHelper={}", tokenHelper);
413
+ LOG.info("Injected cache={}", cache);
409414
410415 if (username == null || username.trim().isEmpty()) {
411416 LOG.error("login() username is null or empty");
securis/src/main/webapp/WEB-INF/web.xml
....@@ -36,17 +36,17 @@
3636 <param-name>resteasy.providers</param-name>
3737 <param-value>net.curisit.securis.DefaultExceptionHandler</param-value>
3838 </context-param>
39
+
3940 <context-param>
4041 <param-name>resteasy.servlet.mapping.prefix</param-name>
4142 <param-value>/api</param-value>
4243 </context-param>
4344
44
- <!--
4545 <context-param>
4646 <param-name>resteasy.injector.factory</param-name>
4747 <param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value>
4848 </context-param>
49
- -->
49
+
5050
5151 <filter>
5252 <filter-name>DevFilter</filter-name>
securis/src/main/webapp/src/app/footer.component.ts
....@@ -17,7 +17,7 @@
1717
1818 ngOnInit(): void {
1919 //TODO Move to service
20
- this.http.get("api/version", /* workaround to avoid OPTIONS method request*/ new BaseRequestOptions())
20
+ this.http.get("version", /* workaround to avoid OPTIONS method request*/ new BaseRequestOptions())
2121 .map((res) => <string>res.json().version)
2222 .subscribe(
2323 version => this.securisVersion = version,
securis/src/main/webapp/src/app/user.service.ts
....@@ -27,7 +27,7 @@
2727 params.append('username', username);
2828 params.append('password', password);
2929 let options = new RequestOptions({ headers: new Headers({ "Content-Type": "application/x-www-form-urlencoded" })});
30
- return this.http.post('api/user/login', params.toString(), options)
30
+ return this.http.post('user/login', params.toString(), options)
3131 .map((resp) => this.mapLogin(resp))
3232 .catch((err) => super.processErrorResponse(err));
3333 }
....@@ -47,7 +47,7 @@
4747 }
4848 var token = this.store.get("token");
4949 let option = new RequestOptions({ headers: new Headers({ 'X-SECURIS-TOKEN': token }) });
50
- return this.http.get('api/check', option)
50
+ return this.http.get('check', option)
5151 .map((resp) => this.mapCheck(resp))
5252 .catch((err) => super.processErrorResponse(err));
5353 }