This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 92b3ca0aa30c8232271278da787450e77166ef7a Author: Peter Palaga <ppal...@redhat.com> AuthorDate: Mon Feb 22 16:07:55 2021 +0100 FHIR: Prefer SyntheticBeanBuildItem to initializing bean producers via volatile fields #2273 --- .../component/fhir/deployment/FhirProcessor.java | 6 - .../fhir/deployment/dstu2/FhirDstu2Processor.java | 183 ++------------------- .../fhir/deployment/dstu3/FhirDstu3Processor.java | 15 +- .../fhir/deployment/r4/FhirR4Processor.java | 15 +- .../fhir/deployment/r5/FhirR5Processor.java | 14 +- .../component/fhir/FhirContextProducers.java | 76 --------- .../component/fhir/FhirContextRecorder.java | 13 +- .../component/fhir/it/FhirDstu2RouteBuilder.java | 4 +- .../component/fhir/it/FhirDstu3RouteBuilder.java | 4 +- .../component/fhir/it/FhirR4RouteBuilder.java | 4 +- .../component/fhir/it/FhirR5RouteBuilder.java | 4 +- 11 files changed, 62 insertions(+), 276 deletions(-) diff --git a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/FhirProcessor.java b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/FhirProcessor.java index ab2f536..64568e8 100644 --- a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/FhirProcessor.java +++ b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/FhirProcessor.java @@ -19,7 +19,6 @@ package org.apache.camel.quarkus.component.fhir.deployment; import ca.uhn.fhir.rest.client.apache.ApacheRestfulClientFactory; import ca.uhn.fhir.util.jar.DependencyLogImpl; import ca.uhn.fhir.validation.schematron.SchematronBaseValidator; -import io.quarkus.arc.deployment.AdditionalBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.builditem.AdditionalApplicationArchiveMarkerBuildItem; @@ -27,7 +26,6 @@ import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBundleBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; -import org.apache.camel.quarkus.component.fhir.FhirContextProducers; final class FhirProcessor { private static final String FEATURE = "camel-fhir"; @@ -64,8 +62,4 @@ final class FhirProcessor { reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, true, ApacheRestfulClientFactory.class)); } - @BuildStep - void beans(BuildProducer<AdditionalBeanBuildItem> beanProducer) { - beanProducer.produce(AdditionalBeanBuildItem.unremovableOf(FhirContextProducers.class)); - } } diff --git a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/dstu2/FhirDstu2Processor.java b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/dstu2/FhirDstu2Processor.java index 45f6658..c0d20f7 100644 --- a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/dstu2/FhirDstu2Processor.java +++ b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/dstu2/FhirDstu2Processor.java @@ -19,173 +19,12 @@ package org.apache.camel.quarkus.component.fhir.deployment.dstu2; import java.util.HashSet; import java.util.Set; -import ca.uhn.fhir.model.dstu2.resource.*; -import ca.uhn.fhir.model.dstu2.valueset.AccountStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ActionListEnum; -import ca.uhn.fhir.model.dstu2.valueset.AddressTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.AddressUseEnum; -import ca.uhn.fhir.model.dstu2.valueset.AdjudicationCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.AdjudicationErrorCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.AdjustmentReasonCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.AdministrativeGenderEnum; -import ca.uhn.fhir.model.dstu2.valueset.AdmitSourceEnum; -import ca.uhn.fhir.model.dstu2.valueset.AggregationModeEnum; -import ca.uhn.fhir.model.dstu2.valueset.AllergyIntoleranceCategoryEnum; -import ca.uhn.fhir.model.dstu2.valueset.AllergyIntoleranceCertaintyEnum; -import ca.uhn.fhir.model.dstu2.valueset.AllergyIntoleranceCriticalityEnum; -import ca.uhn.fhir.model.dstu2.valueset.AllergyIntoleranceSeverityEnum; -import ca.uhn.fhir.model.dstu2.valueset.AllergyIntoleranceStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.AllergyIntoleranceTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.AnswerFormatEnum; -import ca.uhn.fhir.model.dstu2.valueset.AppointmentStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.AssertionDirectionTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.AssertionOperatorTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.AssertionResponseTypesEnum; -import ca.uhn.fhir.model.dstu2.valueset.AuditEventActionEnum; -import ca.uhn.fhir.model.dstu2.valueset.AuditEventObjectLifecycleEnum; -import ca.uhn.fhir.model.dstu2.valueset.AuditEventObjectRoleEnum; -import ca.uhn.fhir.model.dstu2.valueset.AuditEventObjectTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.AuditEventOutcomeEnum; -import ca.uhn.fhir.model.dstu2.valueset.AuditEventParticipantNetworkTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.AuditEventSourceTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.BindingStrengthEnum; -import ca.uhn.fhir.model.dstu2.valueset.BundleTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.CarePlanActivityStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.CarePlanRelationshipEnum; -import ca.uhn.fhir.model.dstu2.valueset.CarePlanStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ClaimTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.ClinicalImpressionStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.CommunicationRequestStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.CommunicationStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.CompositionAttestationModeEnum; -import ca.uhn.fhir.model.dstu2.valueset.CompositionStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ConceptMapEquivalenceEnum; -import ca.uhn.fhir.model.dstu2.valueset.ConditionCategoryCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.ConditionClinicalStatusCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.ConditionVerificationStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ConditionalDeleteStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ConformanceEventModeEnum; -import ca.uhn.fhir.model.dstu2.valueset.ConformanceResourceStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ConformanceStatementKindEnum; -import ca.uhn.fhir.model.dstu2.valueset.ConstraintSeverityEnum; -import ca.uhn.fhir.model.dstu2.valueset.ContactPointSystemEnum; -import ca.uhn.fhir.model.dstu2.valueset.ContactPointUseEnum; -import ca.uhn.fhir.model.dstu2.valueset.ContentTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.DataElementStringencyEnum; -import ca.uhn.fhir.model.dstu2.valueset.DaysOfWeekEnum; -import ca.uhn.fhir.model.dstu2.valueset.DetectedIssueSeverityEnum; -import ca.uhn.fhir.model.dstu2.valueset.DeviceMetricCalibrationStateEnum; -import ca.uhn.fhir.model.dstu2.valueset.DeviceMetricCalibrationTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.DeviceMetricCategoryEnum; -import ca.uhn.fhir.model.dstu2.valueset.DeviceMetricColorEnum; -import ca.uhn.fhir.model.dstu2.valueset.DeviceMetricOperationalStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.DeviceStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.DeviceUseRequestPriorityEnum; -import ca.uhn.fhir.model.dstu2.valueset.DeviceUseRequestStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.DiagnosticOrderPriorityEnum; -import ca.uhn.fhir.model.dstu2.valueset.DiagnosticOrderStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.DiagnosticReportStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.DigitalMediaTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.DocumentModeEnum; -import ca.uhn.fhir.model.dstu2.valueset.DocumentReferenceStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.DocumentRelationshipTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.EncounterClassEnum; -import ca.uhn.fhir.model.dstu2.valueset.EncounterLocationStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.EncounterStateEnum; -import ca.uhn.fhir.model.dstu2.valueset.EpisodeOfCareStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.EventTimingEnum; -import ca.uhn.fhir.model.dstu2.valueset.ExtensionContextEnum; -import ca.uhn.fhir.model.dstu2.valueset.FamilyHistoryStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.FilterOperatorEnum; -import ca.uhn.fhir.model.dstu2.valueset.FlagStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.GoalPriorityEnum; -import ca.uhn.fhir.model.dstu2.valueset.GoalStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.GroupTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.GuideDependencyTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.GuidePageKindEnum; -import ca.uhn.fhir.model.dstu2.valueset.GuideResourcePurposeEnum; -import ca.uhn.fhir.model.dstu2.valueset.HTTPVerbEnum; -import ca.uhn.fhir.model.dstu2.valueset.IdentifierTypeCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.IdentifierUseEnum; -import ca.uhn.fhir.model.dstu2.valueset.IdentityAssuranceLevelEnum; -import ca.uhn.fhir.model.dstu2.valueset.InstanceAvailabilityEnum; -import ca.uhn.fhir.model.dstu2.valueset.IssueSeverityEnum; -import ca.uhn.fhir.model.dstu2.valueset.IssueTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.KOStitleEnum; -import ca.uhn.fhir.model.dstu2.valueset.LinkTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.ListModeEnum; -import ca.uhn.fhir.model.dstu2.valueset.ListOrderCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.ListStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.LocationModeEnum; -import ca.uhn.fhir.model.dstu2.valueset.LocationStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.LocationTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.MaritalStatusCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.MeasmntPrincipleEnum; -import ca.uhn.fhir.model.dstu2.valueset.MedicationAdministrationStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.MedicationDispenseStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.MedicationOrderStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.MedicationStatementStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.MessageEventEnum; -import ca.uhn.fhir.model.dstu2.valueset.MessageSignificanceCategoryEnum; -import ca.uhn.fhir.model.dstu2.valueset.MessageTransportEnum; -import ca.uhn.fhir.model.dstu2.valueset.NameUseEnum; -import ca.uhn.fhir.model.dstu2.valueset.NamingSystemIdentifierTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.NamingSystemTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.NarrativeStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.NoteTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.NutritionOrderStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ObservationRelationshipTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.ObservationStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.OperationKindEnum; -import ca.uhn.fhir.model.dstu2.valueset.OperationParameterUseEnum; -import ca.uhn.fhir.model.dstu2.valueset.OrderStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ParticipantRequiredEnum; -import ca.uhn.fhir.model.dstu2.valueset.ParticipantStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ParticipantTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.ParticipationStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.PayeeTypeCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.ProcedureRequestPriorityEnum; -import ca.uhn.fhir.model.dstu2.valueset.ProcedureRequestStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ProcedureStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.PropertyRepresentationEnum; -import ca.uhn.fhir.model.dstu2.valueset.ProvenanceEntityRoleEnum; -import ca.uhn.fhir.model.dstu2.valueset.QuantityComparatorEnum; -import ca.uhn.fhir.model.dstu2.valueset.QuestionnaireResponseStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.QuestionnaireStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.ReferralMethodEnum; -import ca.uhn.fhir.model.dstu2.valueset.ReferralStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.RemittanceOutcomeEnum; -import ca.uhn.fhir.model.dstu2.valueset.ResourceTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.ResourceVersionPolicyEnum; -import ca.uhn.fhir.model.dstu2.valueset.ResponseTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.RestfulConformanceModeEnum; -import ca.uhn.fhir.model.dstu2.valueset.RestfulSecurityServiceEnum; -import ca.uhn.fhir.model.dstu2.valueset.RulesetCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.SearchEntryModeEnum; -import ca.uhn.fhir.model.dstu2.valueset.SearchModifierCodeEnum; -import ca.uhn.fhir.model.dstu2.valueset.SearchParamTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.ServiceProvisionConditionsEnum; -import ca.uhn.fhir.model.dstu2.valueset.SignatureTypeCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.SlicingRulesEnum; -import ca.uhn.fhir.model.dstu2.valueset.SlotStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.SpecimenStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.StructureDefinitionKindEnum; -import ca.uhn.fhir.model.dstu2.valueset.SubscriptionChannelTypeEnum; -import ca.uhn.fhir.model.dstu2.valueset.SubscriptionStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.SubstanceCategoryCodesEnum; -import ca.uhn.fhir.model.dstu2.valueset.SupplyDeliveryStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.SupplyRequestStatusEnum; -import ca.uhn.fhir.model.dstu2.valueset.SystemRestfulInteractionEnum; -import ca.uhn.fhir.model.dstu2.valueset.TimingAbbreviationEnum; -import ca.uhn.fhir.model.dstu2.valueset.TransactionModeEnum; -import ca.uhn.fhir.model.dstu2.valueset.TypeRestfulInteractionEnum; -import ca.uhn.fhir.model.dstu2.valueset.UnitsOfTimeEnum; -import ca.uhn.fhir.model.dstu2.valueset.UnknownContentCodeEnum; -import ca.uhn.fhir.model.dstu2.valueset.UseEnum; -import ca.uhn.fhir.model.dstu2.valueset.VisionBaseEnum; -import ca.uhn.fhir.model.dstu2.valueset.VisionEyesEnum; -import ca.uhn.fhir.model.dstu2.valueset.XPathUsageTypeEnum; -import io.quarkus.arc.deployment.BeanContainerBuildItem; +import javax.inject.Singleton; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.model.dstu2.resource.BaseResource; +import ca.uhn.fhir.model.dstu2.valueset.*; +import io.quarkus.arc.deployment.SyntheticBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.annotations.ExecutionTime; @@ -210,10 +49,14 @@ public class FhirDstu2Processor { @BuildStep(onlyIf = FhirFlags.Dstu2Enabled.class) @Record(ExecutionTime.STATIC_INIT) - void recordContext(FhirContextRecorder fhirContextRecorder, BeanContainerBuildItem beanContainer, + SyntheticBeanBuildItem recordContext(FhirContextRecorder fhirContextRecorder, Dstu2PropertiesBuildItem propertiesBuildItem) { - fhirContextRecorder.createDstu2FhirContext(beanContainer.getValue(), - getResourceDefinitions(propertiesBuildItem.getProperties())); + return SyntheticBeanBuildItem.configure(FhirContext.class) + .scope(Singleton.class) + .named("DSTU2") + .runtimeValue(fhirContextRecorder.createDstu2FhirContext( + getResourceDefinitions(propertiesBuildItem.getProperties()))) + .done(); } @BuildStep(onlyIf = FhirFlags.Dstu2Enabled.class) diff --git a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/dstu3/FhirDstu3Processor.java b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/dstu3/FhirDstu3Processor.java index 96832b6..7e3148e 100644 --- a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/dstu3/FhirDstu3Processor.java +++ b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/dstu3/FhirDstu3Processor.java @@ -19,7 +19,10 @@ package org.apache.camel.quarkus.component.fhir.deployment.dstu3; import java.util.HashSet; import java.util.Set; -import io.quarkus.arc.deployment.BeanContainerBuildItem; +import javax.inject.Singleton; + +import ca.uhn.fhir.context.FhirContext; +import io.quarkus.arc.deployment.SyntheticBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.annotations.ExecutionTime; @@ -50,10 +53,14 @@ public class FhirDstu3Processor { @BuildStep(onlyIf = FhirFlags.Dstu3Enabled.class) @Record(ExecutionTime.STATIC_INIT) - void recordContext(FhirContextRecorder fhirContextRecorder, BeanContainerBuildItem beanContainer, + SyntheticBeanBuildItem recordContext(FhirContextRecorder fhirContextRecorder, Dstu3PropertiesBuildItem propertiesBuildItem) { - fhirContextRecorder.createDstu3FhirContext(beanContainer.getValue(), - getResourceDefinitions(propertiesBuildItem.getProperties())); + return SyntheticBeanBuildItem.configure(FhirContext.class) + .scope(Singleton.class) + .named("DSTU3") + .runtimeValue(fhirContextRecorder.createDstu3FhirContext( + getResourceDefinitions(propertiesBuildItem.getProperties()))) + .done(); } @BuildStep(onlyIf = FhirFlags.Dstu3Enabled.class) diff --git a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/r4/FhirR4Processor.java b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/r4/FhirR4Processor.java index 02019fa..1a63550 100644 --- a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/r4/FhirR4Processor.java +++ b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/r4/FhirR4Processor.java @@ -19,7 +19,10 @@ package org.apache.camel.quarkus.component.fhir.deployment.r4; import java.util.HashSet; import java.util.Set; -import io.quarkus.arc.deployment.BeanContainerBuildItem; +import javax.inject.Singleton; + +import ca.uhn.fhir.context.FhirContext; +import io.quarkus.arc.deployment.SyntheticBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.annotations.ExecutionTime; @@ -44,10 +47,14 @@ public class FhirR4Processor { @BuildStep(onlyIf = FhirFlags.R4Enabled.class) @Record(ExecutionTime.STATIC_INIT) - void recordContext(FhirContextRecorder fhirContextRecorder, BeanContainerBuildItem beanContainer, + SyntheticBeanBuildItem recordContext(FhirContextRecorder fhirContextRecorder, R4PropertiesBuildItem propertiesBuildItem) { - fhirContextRecorder.createR4FhirContext(beanContainer.getValue(), - getResourceDefinitions(propertiesBuildItem.getProperties())); + return SyntheticBeanBuildItem.configure(FhirContext.class) + .scope(Singleton.class) + .named("R4") + .runtimeValue(fhirContextRecorder.createR4FhirContext( + getResourceDefinitions(propertiesBuildItem.getProperties()))) + .done(); } @BuildStep(onlyIf = FhirFlags.R4Enabled.class) diff --git a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/r5/FhirR5Processor.java b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/r5/FhirR5Processor.java index 32ae7a5..8b0e267 100644 --- a/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/r5/FhirR5Processor.java +++ b/extensions/fhir/deployment/src/main/java/org/apache/camel/quarkus/component/fhir/deployment/r5/FhirR5Processor.java @@ -19,7 +19,11 @@ package org.apache.camel.quarkus.component.fhir.deployment.r5; import java.util.HashSet; import java.util.Set; +import javax.inject.Singleton; + +import ca.uhn.fhir.context.FhirContext; import io.quarkus.arc.deployment.BeanContainerBuildItem; +import io.quarkus.arc.deployment.SyntheticBeanBuildItem; import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.annotations.ExecutionTime; @@ -44,10 +48,14 @@ public class FhirR5Processor { @BuildStep(onlyIf = FhirFlags.R5Enabled.class) @Record(ExecutionTime.STATIC_INIT) - void recordContext(FhirContextRecorder fhirContextRecorder, BeanContainerBuildItem beanContainer, + SyntheticBeanBuildItem recordContext(FhirContextRecorder fhirContextRecorder, BeanContainerBuildItem beanContainer, R5PropertiesBuildItem propertiesBuildItem) { - fhirContextRecorder.createR5FhirContext(beanContainer.getValue(), - getResourceDefinitions(propertiesBuildItem.getProperties())); + return SyntheticBeanBuildItem.configure(FhirContext.class) + .scope(Singleton.class) + .named("R5") + .runtimeValue(fhirContextRecorder.createR5FhirContext( + getResourceDefinitions(propertiesBuildItem.getProperties()))) + .done(); } @BuildStep(onlyIf = FhirFlags.R5Enabled.class) diff --git a/extensions/fhir/runtime/src/main/java/org/apache/camel/quarkus/component/fhir/FhirContextProducers.java b/extensions/fhir/runtime/src/main/java/org/apache/camel/quarkus/component/fhir/FhirContextProducers.java deleted file mode 100644 index 69d133b..0000000 --- a/extensions/fhir/runtime/src/main/java/org/apache/camel/quarkus/component/fhir/FhirContextProducers.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.quarkus.component.fhir; - -import javax.enterprise.inject.Produces; -import javax.inject.Named; -import javax.inject.Singleton; - -import ca.uhn.fhir.context.FhirContext; - -@Singleton -public class FhirContextProducers { - - private volatile FhirContext dstu2; - private volatile FhirContext dstu3; - private volatile FhirContext r4; - private volatile FhirContext r5; - - public void setDstu2(FhirContext dstu2) { - this.dstu2 = dstu2; - } - - public void setDstu3(FhirContext dstu3) { - this.dstu3 = dstu3; - } - - public void setR4(FhirContext r4) { - this.r4 = r4; - } - - public void setR5(FhirContext r5) { - this.r5 = r5; - } - - @Singleton - @Produces - @Named("DSTU2") - FhirContext dstu2() { - return this.dstu2; - } - - @Singleton - @Produces - @Named("DSTU3") - FhirContext dstu3() { - return this.dstu3; - } - - @Singleton - @Produces - @Named("R4") - FhirContext r4() { - return this.r4; - } - - @Singleton - @Produces - @Named("R5") - FhirContext r5() { - return this.r5; - } -} diff --git a/extensions/fhir/runtime/src/main/java/org/apache/camel/quarkus/component/fhir/FhirContextRecorder.java b/extensions/fhir/runtime/src/main/java/org/apache/camel/quarkus/component/fhir/FhirContextRecorder.java index 93b9d5e..8f51cb0 100644 --- a/extensions/fhir/runtime/src/main/java/org/apache/camel/quarkus/component/fhir/FhirContextRecorder.java +++ b/extensions/fhir/runtime/src/main/java/org/apache/camel/quarkus/component/fhir/FhirContextRecorder.java @@ -19,38 +19,33 @@ package org.apache.camel.quarkus.component.fhir; import java.util.Collection; import ca.uhn.fhir.context.FhirContext; -import io.quarkus.arc.runtime.BeanContainer; import io.quarkus.runtime.RuntimeValue; import io.quarkus.runtime.annotations.Recorder; @Recorder public class FhirContextRecorder { - public RuntimeValue<FhirContext> createDstu2FhirContext(BeanContainer container, Collection<String> resourceDefinitions) { + public RuntimeValue<FhirContext> createDstu2FhirContext(Collection<String> resourceDefinitions) { FhirContext fhirContext = FhirContext.forDstu2(); initContext(resourceDefinitions, fhirContext); - container.instance(FhirContextProducers.class).setDstu2(fhirContext); return new RuntimeValue<>(fhirContext); } - public RuntimeValue<FhirContext> createDstu3FhirContext(BeanContainer container, Collection<String> resourceDefinitions) { + public RuntimeValue<FhirContext> createDstu3FhirContext(Collection<String> resourceDefinitions) { FhirContext fhirContext = FhirContext.forDstu3(); initContext(resourceDefinitions, fhirContext); - container.instance(FhirContextProducers.class).setDstu3(fhirContext); return new RuntimeValue<>(fhirContext); } - public RuntimeValue<FhirContext> createR4FhirContext(BeanContainer container, Collection<String> resourceDefinitions) { + public RuntimeValue<FhirContext> createR4FhirContext(Collection<String> resourceDefinitions) { FhirContext fhirContext = FhirContext.forR4(); initContext(resourceDefinitions, fhirContext); - container.instance(FhirContextProducers.class).setR4(fhirContext); return new RuntimeValue<>(fhirContext); } - public RuntimeValue<FhirContext> createR5FhirContext(BeanContainer container, Collection<String> resourceDefinitions) { + public RuntimeValue<FhirContext> createR5FhirContext(Collection<String> resourceDefinitions) { FhirContext fhirContext = FhirContext.forR5(); initContext(resourceDefinitions, fhirContext); - container.instance(FhirContextProducers.class).setR5(fhirContext); return new RuntimeValue<>(fhirContext); } diff --git a/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirDstu2RouteBuilder.java b/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirDstu2RouteBuilder.java index 6793907..a26b4f6 100644 --- a/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirDstu2RouteBuilder.java +++ b/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirDstu2RouteBuilder.java @@ -17,6 +17,7 @@ package org.apache.camel.quarkus.component.fhir.it; import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.inject.Named; @@ -34,11 +35,12 @@ public class FhirDstu2RouteBuilder extends RouteBuilder { @Inject @Named("DSTU2") - FhirContext fhirContext; + Instance<FhirContext> fhirContextInstance; @Override public void configure() { if (ENABLED) { + FhirContext fhirContext = fhirContextInstance.get(); fhirContext.setParserErrorHandler(new StrictErrorHandler()); FhirJsonDataFormat fhirJsonDataFormat = new FhirJsonDataFormat(); diff --git a/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirDstu3RouteBuilder.java b/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirDstu3RouteBuilder.java index 9ec816c..b08ba71 100644 --- a/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirDstu3RouteBuilder.java +++ b/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirDstu3RouteBuilder.java @@ -17,6 +17,7 @@ package org.apache.camel.quarkus.component.fhir.it; import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.inject.Named; @@ -33,11 +34,12 @@ public class FhirDstu3RouteBuilder extends RouteBuilder { private static final Boolean ENABLED = new FhirFlags.Dstu3Enabled().getAsBoolean(); @Inject @Named("DSTU3") - FhirContext fhirContext; + Instance<FhirContext> fhirContextInstance; @Override public void configure() { if (ENABLED) { + FhirContext fhirContext = fhirContextInstance.get(); fhirContext.setParserErrorHandler(new StrictErrorHandler()); FhirJsonDataFormat fhirJsonDataFormat = new FhirJsonDataFormat(); diff --git a/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirR4RouteBuilder.java b/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirR4RouteBuilder.java index adf728e..11ce9a5 100644 --- a/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirR4RouteBuilder.java +++ b/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirR4RouteBuilder.java @@ -17,6 +17,7 @@ package org.apache.camel.quarkus.component.fhir.it; import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.inject.Named; @@ -34,11 +35,12 @@ public class FhirR4RouteBuilder extends RouteBuilder { @Inject @Named("R4") - FhirContext fhirContext; + Instance<FhirContext> fhirContextInstance; @Override public void configure() { if (ENABLED) { + FhirContext fhirContext = fhirContextInstance.get(); fhirContext.setParserErrorHandler(new StrictErrorHandler()); FhirJsonDataFormat fhirJsonDataFormat = new FhirJsonDataFormat(); diff --git a/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirR5RouteBuilder.java b/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirR5RouteBuilder.java index e8b44d4..4869330 100644 --- a/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirR5RouteBuilder.java +++ b/integration-tests/fhir/src/main/java/org/apache/camel/quarkus/component/fhir/it/FhirR5RouteBuilder.java @@ -17,6 +17,7 @@ package org.apache.camel.quarkus.component.fhir.it; import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.inject.Named; @@ -34,11 +35,12 @@ public class FhirR5RouteBuilder extends RouteBuilder { @Inject @Named("R5") - FhirContext fhirContext; + Instance<FhirContext> fhirContextInstance; @Override public void configure() { if (ENABLED) { + FhirContext fhirContext = fhirContextInstance.get(); fhirContext.setParserErrorHandler(new StrictErrorHandler()); FhirJsonDataFormat fhirJsonDataFormat = new FhirJsonDataFormat();