You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2021/02/22 20:52:15 UTC

[camel-quarkus] 03/04: FHIR: Prefer SyntheticBeanBuildItem to initializing bean producers via volatile fields #2273

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 <pp...@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();