diff --git a/src/main/java/org/etsi/osl/tmf/pm628/repo/MeasurementCollectionJobRepository.java b/src/main/java/org/etsi/osl/tmf/pm628/repo/MeasurementCollectionJobRepository.java index 444e9d0c0a7100a6db058e558bf67220eaca5e0a..244016e6ac5e3a54a9ffb81ea4715469b7877013 100644 --- a/src/main/java/org/etsi/osl/tmf/pm628/repo/MeasurementCollectionJobRepository.java +++ b/src/main/java/org/etsi/osl/tmf/pm628/repo/MeasurementCollectionJobRepository.java @@ -1,15 +1,13 @@ package org.etsi.osl.tmf.pm628.repo; +import java.util.Optional; import org.etsi.osl.tmf.pm628.model.ExecutionStateType; import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob; -import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import java.util.Optional; - @Repository -public interface MeasurementCollectionJobRepository extends CrudRepository<MeasurementCollectionJob, Long>, PagingAndSortingRepository<MeasurementCollectionJob, Long> { +public interface MeasurementCollectionJobRepository extends JpaRepository <MeasurementCollectionJob, Long> { Optional<MeasurementCollectionJob> findByUuid(String uuid); Iterable<MeasurementCollectionJob> findByExecutionState(ExecutionStateType executionState); diff --git a/src/main/java/org/etsi/osl/tmf/pm628/reposervices/MeasurementCollectionJobService.java b/src/main/java/org/etsi/osl/tmf/pm628/reposervices/MeasurementCollectionJobService.java index ada0cd1946fdc115921d8c38800d3f50c1b5b125..4ca0ceaeb4875242189cd57f36867ee9984a4d92 100755 --- a/src/main/java/org/etsi/osl/tmf/pm628/reposervices/MeasurementCollectionJobService.java +++ b/src/main/java/org/etsi/osl/tmf/pm628/reposervices/MeasurementCollectionJobService.java @@ -6,6 +6,7 @@ import jakarta.validation.Valid; import org.etsi.osl.tmf.pm628.api.MeasurementCollectionJobApiRouteBuilderEvents; import org.etsi.osl.tmf.pm628.model.*; import org.etsi.osl.tmf.pm628.repo.MeasurementCollectionJobRepository; +import org.etsi.osl.tmf.so641.model.ServiceOrder; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; @@ -15,11 +16,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; import java.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -288,58 +291,63 @@ public class MeasurementCollectionJobService { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Hibernate5JakartaModule()); String res = mapper.writeValueAsString(mcj); - + log.debug("=====> MCJObjectMapper {}", res); return res; } + @Transactional private MeasurementCollectionJob findMeasurementCollectionJobByUuidEager(String id) { - if ( id == null || id.equals("")) { + if (id == null || id.equals("")) { return null; - } - Session session = sessionFactory.openSession(); - Transaction tx = session.beginTransaction(); - MeasurementCollectionJob s = null; - try { + } + MeasurementCollectionJob s = null; + try (Session session = sessionFactory.openSession()) { + Transaction tx = session.beginTransaction(); s = (MeasurementCollectionJob) session.get(MeasurementCollectionJob.class, id); if (s == null) { - return this.findMeasurementCollectionJobByUuid(id);// last resort + log.debug("=====> findMeasurementCollectionJobByUuidEager last resort"); + return this.findMeasurementCollectionJobByUuid(id);// last resort } - Hibernate.initialize(s.getDataAccessEndpoint() ); - Hibernate.initialize(s.getFileTransferData() ); - Hibernate.initialize(s.getPerformanceIndicatorGroupSpecification() ); + Hibernate.initialize(s.getDataAccessEndpoint()); + Hibernate.initialize(s.getFileTransferData()); + Hibernate.initialize(s.getPerformanceIndicatorGroupSpecification()); Hibernate.initialize(s.getPerformanceIndicatorSpecification()); - Hibernate.initialize(s.getScheduleDefinition() ); - Hibernate.initialize(s.getTrackingRecord() ); - + Hibernate.initialize(s.getScheduleDefinition()); + Hibernate.initialize(s.getTrackingRecord()); + tx.commit(); - } finally { - session.close(); - } - - return s; + } catch (Exception e) { + e.printStackTrace(); + } + + return s; } + @Transactional public MeasurementCollectionJob findMeasurementCollectionJobByUuid(String uuid){ log.debug("MeasurementCollectionJob FIND BY UUID"); Optional<MeasurementCollectionJob> measurementCollectionJob = measurementCollectionJobRepository.findByUuid(uuid); return measurementCollectionJob.orElse(null); } + @Transactional public MeasurementCollectionJob createMeasurementCollectionJob(MeasurementCollectionJobFVO measurementCollectionJobFVO){ log.debug("MeasurementCollectionJob CREATE: {}", measurementCollectionJobFVO); MeasurementCollectionJobMapper mapper = Mappers.getMapper(MeasurementCollectionJobMapper.class); MeasurementCollectionJob mcj = mapper.createMeasurementCollectionJob(measurementCollectionJobFVO); - - mcj = this.measurementCollectionJobRepository.save(mcj); + mcj.setCreationTime( OffsetDateTime.now() ); + mcj.setLastModifiedTime( OffsetDateTime.now()); + mcj = this.measurementCollectionJobRepository.saveAndFlush(mcj); raiseMCJCreateNotification(mcj); return mcj; } + @Transactional public MeasurementCollectionJob updateMeasurementCollectionJob(String uuid, @Valid MeasurementCollectionJobMVO measurementCollectionJobUpdate){ log.debug("MeasurementCollectionJob UPDATE with UUID: {}", uuid); @@ -352,8 +360,10 @@ public class MeasurementCollectionJobService { MeasurementCollectionJobMapper mapper = Mappers.getMapper(MeasurementCollectionJobMapper.class); measurementCollectionJob = mapper.updateMeasurementCollectionJob(measurementCollectionJobUpdate, measurementCollectionJob); + measurementCollectionJob.setLastModifiedTime( OffsetDateTime.now()); measurementCollectionJob = this.measurementCollectionJobRepository.save(measurementCollectionJob); + // This may be unnecessary since MeasurementCollectionJobMVO doesn't have the executionState attribute if ( originalExecutionState!=null) { executionStateChanged = !originalExecutionState.equals(measurementCollectionJob.getExecutionState()); @@ -373,12 +383,12 @@ public class MeasurementCollectionJobService { MeasurementCollectionJob measurementCollectionJob = measurementCollectionJobRepository.findByUuid(uuid) .orElseThrow(() -> new IllegalArgumentException("No MeasurementCollectionJob with UUID: " + uuid)); measurementCollectionJobRepository.delete(measurementCollectionJob); - raiseMCJDeleteNotification(measurementCollectionJob); return null; } + @Transactional(propagation = Propagation.REQUIRES_NEW) private void raiseMCJCreateNotification(MeasurementCollectionJob mcj){ // Create the event payload MeasurementCollectionJobRef ref = new MeasurementCollectionJobRef(); @@ -399,6 +409,7 @@ public class MeasurementCollectionJobService { routeBuilderEvents.publishEvent(event, mcj.getUuid()); } + @Transactional private void raiseMCJAttributeValueChangeNotification(MeasurementCollectionJob mcj){ // Create the event payload @@ -414,6 +425,7 @@ public class MeasurementCollectionJobService { routeBuilderEvents.publishEvent(event, mcj.getUuid()); } + @Transactional private void raiseMCJExecutionStateChangeNotification(MeasurementCollectionJob mcj){ // Create the event payload @@ -429,6 +441,7 @@ public class MeasurementCollectionJobService { routeBuilderEvents.publishEvent(event, mcj.getUuid()); } + @Transactional private void raiseMCJDeleteNotification(MeasurementCollectionJob mcj){ // Create the event payload diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 603a244bb1c46059e9a24e2f751a9482536a09e9..894408a4961b66b322c2ecf6a608c4e57844dae8 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -49,10 +49,13 @@ spring: username: root hikari: minimumIdle: 2 - maximumPoolSize: 40 - idleTimeout: 120000 - connectionTimeout: 400000 - leakDetectionThreshold: 100000 + maximumPoolSize: 20 + idleTimeout: 20000 + idle-timeout: 20000 + connectionTimeout: 40000 + leakDetectionThreshold: 30000 + + jpa: database-platform: org.etsi.osl.tmf.LocalMysqlDialect hibernate: diff --git a/src/test/java/org/etsi/osl/services/api/pm628/MeasurementCollectionJobApiControllerTest.java b/src/test/java/org/etsi/osl/services/api/pm628/MeasurementCollectionJobApiControllerTest.java index 40a2697c2ed42e1a4e955744fe733cfeca4776c7..a2d93c3c0570e92350d4f6a590cd85235bac0cd3 100644 --- a/src/test/java/org/etsi/osl/services/api/pm628/MeasurementCollectionJobApiControllerTest.java +++ b/src/test/java/org/etsi/osl/services/api/pm628/MeasurementCollectionJobApiControllerTest.java @@ -1,5 +1,6 @@ package org.etsi.osl.services.api.pm628; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.io.IOUtils; @@ -114,6 +115,7 @@ public class MeasurementCollectionJobApiControllerTest { assertThat(mcj2.getReportingPeriod()).isEqualTo(mcj.getReportingPeriod()); } + @WithMockUser(username="osadmin", roles = {"USER","ADMIN"}) @Test public void testCreateMeasurementCollectionJob() throws Exception { @@ -126,6 +128,39 @@ public class MeasurementCollectionJobApiControllerTest { assertThat(mcj.getExecutionState()).isEqualTo(ExecutionStateType.ACKNOWLEDGED); assertThat(mcj.getGranularity()).isEqualTo(Granularity.fromValue("g_1mn")); assertThat(mcj.getReportingPeriod()).isEqualTo(ReportingPeriod.fromValue("r_1mn")); + + + // Create the event + MeasurementCollectionJobRef ref = new MeasurementCollectionJobRef(); + ref.setId(mcj.getUuid()); + ref.setHref(mcj.getHref()); + ref.setName("MeasurementCollectionJob"); + + MeasurementCollectionJobCreateEventPayload payload = new MeasurementCollectionJobCreateEventPayload(); + payload.setMeasurementCollectionJob(ref); + + MeasurementCollectionJobCreateEvent event = new MeasurementCollectionJobCreateEvent(); + event.setTitle("MeasurementCollectionJob created"); + event.setDescription("MeasurementCollectionJob with UUID: " + mcj.getUuid() + " has been created"); + event.setEvent(payload); + + String apayload = toJsonString(event); + + MeasurementCollectionJobCreateEvent eventresponse = toJsonObj (apayload, MeasurementCollectionJobCreateEvent.class); + assertThat(eventresponse.getEvent().getMeasurementCollectionJob()).isNotNull(); + } + + + static String toJsonString(Object object) throws IOException { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + return mapper.writeValueAsString(object); + } + + static <T> T toJsonObj(String content, Class<T> valueType) throws IOException { + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + return mapper.readValue( content, valueType); } @WithMockUser(username="osadmin", roles = {"USER","ADMIN"})