Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ARG BUILD_IMAGE=gradle:9-jdk21
ARG RUN_IMAGE=jeffersonlab/wildfly:1.0.0
ARG RUN_IMAGE=jeffersonlab/wildfly:2.2.0

################## Stage 0
FROM ${BUILD_IMAGE} AS builder
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# jam [![CI](https://github.com/JeffersonLab/jam/actions/workflows/ci.yaml/badge.svg)](https://github.com/JeffersonLab/jam/actions/workflows/ci.yaml) [![Docker](https://img.shields.io/docker/v/jeffersonlab/jam?sort=semver&label=DockerHub)](https://hub.docker.com/r/jeffersonlab/jam)
A [Java EE 8](https://en.wikipedia.org/wiki/Jakarta_EE) web application for both beam and RF operations authorization at Jefferson Lab built with the [Smoothness](https://github.com/JeffersonLab/smoothness) web template.
A [Jakarta EE 10](https://en.wikipedia.org/wiki/Jakarta_EE) web application for both beam and RF operations authorization at Jefferson Lab built with the [Smoothness](https://github.com/JeffersonLab/smoothness) web template.

![Screenshot](https://github.com/JeffersonLab/jam/raw/main/Screenshot.png?raw=true "Screenshot")

Expand Down Expand Up @@ -49,10 +49,10 @@ http://localhost:8080/jam
**See**: [Docker Compose Strategy](https://gist.github.com/slominskir/a7da801e8259f5974c978f9c3091d52c)

## Install
This application requires a Java 17+ JVM and standard library to run, plus a Java EE 8+ application server (developed with Wildfly).
This application requires a Java 17+ JVM and standard library to run, plus a Jakarta EE 10 application server (developed with Wildfly).

1. Install service [dependencies](https://github.com/JeffersonLab/jam/blob/main/deps.yaml)
2. Download [Wildfly 26.1.3](https://www.wildfly.org/downloads/)
2. Download [Wildfly 37.0.1](https://www.wildfly.org/downloads/)
3. [Configure](https://github.com/JeffersonLab/jam#configure) Wildfly and start it
4. Download [jam.war](https://github.com/JeffersonLab/jam/releases) and deploy it to Wildfly
5. Navigate your web browser to [localhost:8080/jam](http://localhost:8080/jam)
Expand Down Expand Up @@ -112,13 +112,13 @@ The [server](https://github.com/JeffersonLab/wildfly/blob/main/scripts/server-se
## Deploy
The deploy to JLab's acctest is handled automatically via the release workflow.

At JLab this app is found at [ace.jlab.org/jam](https://ace.jlab.org/jam) and internally at [acctest.acc.jlab.org/jam](https://acctest.acc.jlab.org/jam). However, those servers are proxies for `wildfly5.acc.jlab.org` and `wildflytest5.acc.jlab.org` respectively. A [deploy script](https://github.com/JeffersonLab/wildfly/blob/main/scripts/deploy.sh) is provided on each server to automate wget and deploy. Example:
At JLab this app is found at [ace.jlab.org/jam](https://ace.jlab.org/jam) and internally at [acctest.acc.jlab.org/jam](https://acctest.acc.jlab.org/jam). However, those servers are proxies for `wildfly3.acc.jlab.org` and `wildflytest3.acc.jlab.org` respectively. A [deploy script](https://github.com/JeffersonLab/wildfly/blob/main/scripts/deploy.sh) is provided on each server to automate wget and deploy. Example:

```
/root/setup/deploy.sh jam v1.2.3
/opt/wildfly/cd/deploy.sh jam v1.2.3
```

**JLab Internal Docs**: [InstallGuideWildflyRHEL9](https://accwiki.acc.jlab.org/do/view/SysAdmin/InstallGuideWildflyRHEL9)
**JLab Internal Docs**: [RHEL9 Wildfly](https://acgdocs.acc.jlab.org/en/ace/builds/rhel9-wildfly)

## See Also
- [JLab ACE management-app list](https://github.com/search?q=org%3Ajeffersonlab+topic%3Aace+topic%3Amanagement-app&type=repositories)
18 changes: 7 additions & 11 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description = 'JLab authorization manager app'
group = 'org.jlab'
version = new File("${projectDir}/VERSION").text.trim()
ext.version = project.version
ext.smoothnessVersion = '4.13.0'
ext.smoothnessVersion = '5.0.2'
ext.releaseDate = new Date().format('MMM dd yyyy')

tasks.withType(JavaCompile).configureEach {
Expand All @@ -16,23 +16,19 @@ tasks.withType(JavaCompile).configureEach {
}
repositories {
mavenCentral()

maven {
url = "https://s01.oss.sonatype.org/content/repositories/releases/"
}
}
dependencies {
// No matter what smoothness weblib MUST be included in WAR (https://github.com/JeffersonLab/smoothness/issues/4)
implementation "org.jlab:smoothness-weblib:${smoothnessVersion}"

// Smoothness setup should install these into Wildfly
providedCompile 'org.tuckey:urlrewritefilter:4.0.4',
'org.jlab:jlog:5.1.0'
providedCompile 'org.tuckey:urlrewritefilter:5.1.3',
'org.jlab:jlog:5.2.0'

// Wildfly 26.1.3.Final provides:
providedCompile 'javax:javaee-api:8.0.1',
'javax.servlet:jstl:1.2',
'org.hibernate:hibernate-core:5.3.28.Final'
// Wildfly 37.0.1.Final provides:
providedCompile 'jakarta.platform:jakarta.jakartaee-api:10.0.0',
'org.hibernate:hibernate-core:6.6.19.Final',
'org.glassfish.web:jakarta.servlet.jsp.jstl:3.0.1'
}
tasks.named('jar') {
enabled = false
Expand Down
1 change: 1 addition & 0 deletions container/app/app-setup.env
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ ORACLE_PASS=password
ORACLE_SERVER=oracle:1521
ORACLE_SERVICE=xepdb1
ORACLE_USER=JAM_OWNER
WILDFLY_RUN_USER=jboss
WILDFLY_APP_HOME=/opt/jboss/wildfly
EMAIL_FROM=tester@example.com
EMAIL_HOST=mailhog
Expand Down
28 changes: 14 additions & 14 deletions src/main/java/org/jlab/jam/business/session/AbstractFacade.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package org.jlab.jam.business.session;

import jakarta.annotation.Resource;
import jakarta.annotation.security.DeclareRoles;
import jakarta.annotation.security.PermitAll;
import jakarta.ejb.EJBAccessException;
import jakarta.ejb.SessionContext;
import jakarta.ejb.TransactionAttribute;
import jakarta.ejb.TransactionAttributeType;
import jakarta.persistence.EntityManager;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Order;
import jakarta.persistence.criteria.Path;
import jakarta.persistence.criteria.Root;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.PermitAll;
import javax.ejb.EJBAccessException;
import javax.ejb.SessionContext;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Root;
import org.jlab.jam.persistence.entity.VerificationTeam;
import org.jlab.smoothness.business.service.UserAuthorizationService;
import org.jlab.smoothness.persistence.view.User;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package org.jlab.jam.business.session;

import jakarta.annotation.security.PermitAll;
import jakarta.annotation.security.RolesAllowed;
import jakarta.ejb.EJB;
import jakarta.ejb.Stateless;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.*;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.*;
import org.jlab.jam.persistence.entity.Authorizer;
import org.jlab.jam.persistence.entity.AuthorizerPK;
import org.jlab.jam.persistence.entity.Facility;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
package org.jlab.jam.business.session;

import jakarta.annotation.security.DeclareRoles;
import jakarta.annotation.security.PermitAll;
import jakarta.ejb.EJB;
import jakarta.ejb.Stateless;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.Query;
import jakarta.persistence.TypedQuery;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.Date;
Expand All @@ -8,14 +16,6 @@
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.PermitAll;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.jlab.jam.business.util.EqualityHelper;
import org.jlab.jam.persistence.entity.*;
import org.jlab.jam.persistence.enumeration.OperationsType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package org.jlab.jam.business.session;

import jakarta.annotation.security.DeclareRoles;
import jakarta.annotation.security.PermitAll;
import jakarta.annotation.security.RolesAllowed;
import jakarta.ejb.EJB;
import jakarta.ejb.Stateless;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.Query;
import jakarta.persistence.TypedQuery;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.Period;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.jlab.jam.persistence.entity.*;
import org.jlab.jam.persistence.entity.BeamAuthorization;
import org.jlab.jam.persistence.view.BeamExpirationEvent;
Expand Down Expand Up @@ -344,12 +347,22 @@ public void insertExpiredHistory(
@PermitAll
public List<BeamControlVerification> checkForUpcomingVerificationExpirations(
Facility facility, boolean boundary) {
String dateRangeConstraint =
"(sysdate) <= a.expirationDate and (sysdate + 7) > a.expirationDate";

LocalDateTime now = LocalDateTime.now();
Period sevenDayPeriod = Period.ofDays(7);
Period sixDayPeriod = Period.ofDays(6);
LocalDateTime inFutureSevenDays = now.plus(sevenDayPeriod);
LocalDateTime inFutureSixDays = now.plus(sixDayPeriod);

String dateRangeConstraint = ":beginRange <= a.expirationDate and :endRange > a.expirationDate";

LocalDateTime beginRange = now;
LocalDateTime endRange = inFutureSevenDays;

if (boundary) {
dateRangeConstraint =
"(sysdate + 6) <= a.expirationDate and (sysdate + 7) > a.expirationDate";
dateRangeConstraint = ":beginRange <= a.expirationDate and :endRange > a.expirationDate";

beginRange = inFutureSixDays;
}

TypedQuery<BeamControlVerification> q =
Expand All @@ -360,6 +373,8 @@ public List<BeamControlVerification> checkForUpcomingVerificationExpirations(
BeamControlVerification.class);

q.setParameter("facility", facility);
q.setParameter("beginRange", Timestamp.valueOf(beginRange));
q.setParameter("endRange", Timestamp.valueOf(endRange));

// sysdate >= (a.expirationDate - 7) and sysdate < (a.expirationDate - 6)
// (sysdate + 6) <= a.expirationDate and (sysdate + 7) > a.expirationDate
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package org.jlab.jam.business.session;

import jakarta.annotation.security.PermitAll;
import jakarta.ejb.Stateless;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.TypedQuery;
import java.math.BigInteger;
import java.util.List;
import javax.annotation.security.PermitAll;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import org.jlab.jam.persistence.entity.BeamControlVerificationHistory;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package org.jlab.jam.business.session;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import jakarta.ejb.Stateless;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.jlab.jam.persistence.entity.BeamDestinationAuthorization;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package org.jlab.jam.business.session;

import jakarta.annotation.security.PermitAll;
import jakarta.ejb.Stateless;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.*;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.annotation.security.PermitAll;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.*;
import org.jlab.jam.persistence.entity.*;

/**
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/org/jlab/jam/business/session/ComponentFacade.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package org.jlab.jam.business.session;

import jakarta.annotation.security.RolesAllowed;
import jakarta.ejb.EJB;
import jakarta.ejb.Stateless;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import java.math.BigInteger;
import java.util.*;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.jlab.jam.persistence.entity.BeamControlVerification;
import org.jlab.jam.persistence.entity.Component;
import org.jlab.jam.persistence.entity.RFControlVerification;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package org.jlab.jam.business.session;

import jakarta.annotation.security.PermitAll;
import jakarta.annotation.security.RolesAllowed;
import jakarta.ejb.Stateless;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.*;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.*;
import org.jlab.jam.persistence.entity.CreditedControl;
import org.jlab.jam.persistence.entity.Facility;
import org.jlab.jam.persistence.entity.VerificationTeam;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package org.jlab.jam.business.session;

import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
import jakarta.annotation.security.RolesAllowed;
import jakarta.ejb.EJB;
import jakarta.ejb.ScheduleExpression;
import jakarta.ejb.Singleton;
import jakarta.ejb.Startup;
import jakarta.ejb.Timeout;
import jakarta.ejb.Timer;
import jakarta.ejb.TimerConfig;
import jakarta.ejb.TimerService;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.ScheduleExpression;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;
import org.jlab.jam.persistence.entity.Facility;
import org.jlab.jam.persistence.view.FacilityExpirationEvent;
import org.jlab.jam.persistence.view.FacilityUpcomingExpiration;
Expand Down
Loading
Loading