Class FHIRPersistenceJDBCImpl

    • Constructor Detail

      • FHIRPersistenceJDBCImpl

        public FHIRPersistenceJDBCImpl​(Properties configProps,
                                       IConnectionProvider cp,
                                       FHIRPersistenceJDBCCache cache)
                                throws Exception
        Constructor for use when running standalone, outside of any web container. The IConnectionProvider should be a pooling implementation which supports an ITransactionProvider. Uses the default adapter for reading FHIR configurations, which works OK for unit-tests.
        Parameters:
        configProps -
        cp -
        Throws:
        Exception
      • FHIRPersistenceJDBCImpl

        public FHIRPersistenceJDBCImpl​(Properties configProps,
                                       IConnectionProvider cp,
                                       FHIRConfigProvider configProvider,
                                       FHIRPersistenceJDBCCache cache)
                                throws Exception
        Constructor for use when running standalone, outside of any web container. The IConnectionProvider should be a pooling implementation which supports an ITransactionProvider.
        Parameters:
        configProps -
        cp -
        configProvider - adapter to provide access to FHIR configuration
        Throws:
        Exception
    • Method Detail

      • buildActionChain

        protected Action buildActionChain()
        Build a chain of actions we want to apply to new connections. Current the only action we need is setting the tenant if we're in multi-tenant mode.
        Returns:
        the chain of actions to be applied
      • create

        public <T extends ResourceSingleResourceResult<T> create​(FHIRPersistenceContext context,
                                                                   T resource)
                                                            throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Stores a new FHIR Resource in the datastore.
        Specified by:
        create in interface FHIRPersistence
        Parameters:
        context - the FHIRPersistenceContext instance associated with the current request
        resource - the FHIR Resource instance to be created in the datastore
        Returns:
        a SingleResourceResult with a copy of resource with Meta fields updated by the persistence layer and/or an OperationOutcome with hints, warnings, or errors related to the interaction
        Throws:
        FHIRPersistenceException
      • update

        public <T extends ResourceSingleResourceResult<T> update​(FHIRPersistenceContext context,
                                                                   String logicalId,
                                                                   T resource)
                                                            throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Updates an existing FHIR Resource by storing a new version in the datastore.
        Specified by:
        update in interface FHIRPersistence
        Parameters:
        context - the FHIRPersistenceContext instance associated with the current request
        logicalId - the logical id of the FHIR Resource to be updated
        resource - the new contents of the FHIR Resource to be stored
        Returns:
        a SingleResourceResult with a copy of resource with fields updated by the persistence layer and/or an OperationOutcome with hints, warnings, or errors related to the interaction
        Throws:
        FHIRPersistenceException
      • search

        public MultiResourceResult<Resource> search​(FHIRPersistenceContext context,
                                                    Class<? extends Resource> resourceType)
                                             throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Performs a search on the specified target resource type using the specified search parameters.
        Specified by:
        search in interface FHIRPersistence
        Parameters:
        context - the FHIRPersistenceContext instance associated with the current request
        resourceType - the resource type which is the target of the search
        Returns:
        a MultiResourceResult with the list of FHIR Resources in the search result set and/or an OperationOutcome with hints, warnings, or errors related to the interaction
        Throws:
        FHIRPersistenceException
      • delete

        public <T extends ResourceSingleResourceResult<T> delete​(FHIRPersistenceContext context,
                                                                   Class<T> resourceType,
                                                                   String logicalId)
                                                            throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Deletes the specified FHIR Resource from the datastore.
        Specified by:
        delete in interface FHIRPersistence
        Parameters:
        context - the FHIRPersistenceContext instance associated with the current request
        resourceType - The type of FHIR Resource to be deleted.
        logicalId - the logical id of the FHIR Resource to be deleted
        Returns:
        a SingleResourceResult with the FHIR Resource that was deleted or null if the specified resource doesn't exist and/or an OperationOutcome with hints, warnings, or errors related to the interaction
        Throws:
        FHIRPersistenceException
      • read

        public <T extends ResourceSingleResourceResult<T> read​(FHIRPersistenceContext context,
                                                                 Class<T> resourceType,
                                                                 String logicalId)
                                                          throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Retrieves the most recent version of a FHIR Resource from the datastore.
        Specified by:
        read in interface FHIRPersistence
        Parameters:
        context - the FHIRPersistenceContext instance associated with the current request
        resourceType - the resource type of the Resource instance to be retrieved
        logicalId - the logical id of the Resource instance to be retrieved
        Returns:
        a SingleResourceResult with the FHIR Resource that was retrieved from the datastore and/or an OperationOutcome with hints, warnings, or errors related to the interaction
        Throws:
        FHIRPersistenceResourceDeletedException - if the resource being read is currently in a deleted state and FHIRPersistenceContext.includeDeleted() is set to false
        FHIRPersistenceException
      • history

        public <T extends ResourceMultiResourceResult<T> history​(FHIRPersistenceContext context,
                                                                   Class<T> resourceType,
                                                                   String logicalId)
                                                            throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Retrieves all of the versions of the specified FHIR Resource.
        Specified by:
        history in interface FHIRPersistence
        Parameters:
        context - the FHIRPersistenceContext instance associated with the current request
        resourceType - the resource type of the Resource instances to be retrieved
        logicalId - the logical id of the Resource instances to be retrieved
        Returns:
        a MultiResourceResult with a list containing the available versions of the specified FHIR Resource and/or an OperationOutcome with hints, warnings, or errors related to the interaction
        Throws:
        FHIRPersistenceException
      • vread

        public <T extends ResourceSingleResourceResult<T> vread​(FHIRPersistenceContext context,
                                                                  Class<T> resourceType,
                                                                  String logicalId,
                                                                  String versionId)
                                                           throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Retrieves a specific version of a FHIR Resource from the datastore.
        Specified by:
        vread in interface FHIRPersistence
        Parameters:
        context - the FHIRPersistenceContext instance associated with the current request
        resourceType - the resource type of the Resource instance to be retrieved
        logicalId - the logical id of the Resource instance to be retrieved
        versionId - the version of the Resource instance to be retrieved
        Returns:
        a SingleResourceResult with the FHIR Resource that was retrieved from the datastore and/or an OperationOutcome with hints, warnings, or errors related to the interaction
        Throws:
        FHIRPersistenceResourceDeletedException - if the resource being read is currently in a deleted state and FHIRPersistenceContext.includeDeleted() is set to false
        FHIRPersistenceException
      • buildSortedFhirResources

        protected List<Resource> buildSortedFhirResources​(ResourceDAO resourceDao,
                                                          FHIRPersistenceContext context,
                                                          Class<? extends Resource> resourceType,
                                                          List<Long> sortedIdList,
                                                          List<String> elements)
                                                   throws FHIRException,
                                                          FHIRPersistenceException,
                                                          IOException
        This method takes the passed list of sorted Resource ids, acquires the Resource corresponding to each id, and returns those Resources in a List, sorted according to the input sorted ids.
        Parameters:
        context - - The FHIR persistence context for the current request.
        resourceType - - The type of Resource that each id in the passed list represents.
        sortedIdList - - A list of Resource ids representing the proper sort order for the list of Resources to be returned.
        elements - - An optional list of element names to include in the resources. If null, filtering will be skipped.
        Returns:
        List - A list of Resources of the passed resourceType, sorted according the order of ids in the passed sortedIdList.
        Throws:
        FHIRPersistenceException
        IOException
        FHIRException
      • retrieveUserTransaction

        protected UserTransaction retrieveUserTransaction​(String jndiName)
        Retrieves (via a JNDI lookup) a reference to the UserTransaction. If the JNDI lookup fails, we'll assume that we're not running inside the container.
      • isTransactional

        public boolean isTransactional()
        Description copied from interface: FHIRPersistence
        Returns true iff the persistence layer implementation supports transactions.
        Specified by:
        isTransactional in interface FHIRPersistence
      • isDeleteSupported

        public boolean isDeleteSupported()
        Description copied from interface: FHIRPersistence
        Returns true iff the persistence layer implementation supports the "delete" operation.
        Specified by:
        isDeleteSupported in interface FHIRPersistence
      • isReindexSupported

        public boolean isReindexSupported()
        Description copied from interface: FHIRPersistence
        Returns true iff the persistence layer implementation supports the "reindex" special operation
        Specified by:
        isReindexSupported in interface FHIRPersistence
        Returns:
      • reindex

        public int reindex​(FHIRPersistenceContext context,
                           OperationOutcome.Builder operationOutcomeResult,
                           Instant tstamp,
                           String resourceLogicalId)
                    throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Initiates reindexing for resources not yet processed. Limits the number of resources processed to resourceCount. The number processed is returned in the OperationOutcome. This can be used by a controller to continue processing until everything is complete. Increasing resourceCount reduces the number of calls required to reindex an entire database, but larger values risk exceeding the transaction timeout. Values around 100 are a good starting point for most systems.
        Specified by:
        reindex in interface FHIRPersistence
        Parameters:
        context - the FHIRPersistenceContext instance associated with the current request.
        operationOutcomeResult - accumulate issues in this Builder
        tstamp - reindex any resources with an index_tstamp less than this.
        resourceLogicalId - optional resourceType/logicalId value to reindex a specific resource
        Returns:
        count of the number of resources reindexed by this call (0 or 1)
        Throws:
        FHIRPersistenceException
      • persistResourceTokenValueRecords

        public void persistResourceTokenValueRecords​(Collection<ResourceTokenValueRec> records)
                                              throws FHIRPersistenceException
        Called just prior to commit so that we can persist all the token value records that have been accumulated during the transaction. This collection therefore contains multiple resource types, which have to be processed separately.
        Parameters:
        records -
        Throws:
        FHIRPersistenceException
      • fetchResourcePayloads

        public ResourcePayload fetchResourcePayloads​(Class<? extends Resource> resourceType,
                                                     Instant fromLastModified,
                                                     Instant toLastModified,
                                                     Function<ResourcePayload,​Boolean> processor)
                                              throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Special function for high speed export of resource payloads. The process function must process the InputStream before returning. Result processing will be stopped if the process function returns Boolean FALSE.
        Specified by:
        fetchResourcePayloads in interface FHIRPersistence
        Parameters:
        resourceType - the resource type which is the target of the search
        fromLastModified - start reading from this timestamp
        toLastModified - do not read beyond this timestamp
        processor - function to process each payload record
        Returns:
        the last ResourcePayload processed, or null if no data was found
        Throws:
        FHIRPersistenceException
      • changes

        public List<ResourceChangeLogRecord> changes​(int resourceCount,
                                                     Instant fromLastModified,
                                                     Long afterResourceId,
                                                     String resourceTypeName)
                                              throws FHIRPersistenceException
        Description copied from interface: FHIRPersistence
        Fetch up to resourceCount records from the RESOURCE_CHANGE_LOG table
        Specified by:
        changes in interface FHIRPersistence
        Parameters:
        resourceCount - the max number of resource change records to fetch
        fromLastModified - filter records with record.lastUpdate >= fromLastModified. Optional.
        afterResourceId - filter records with record.resourceId > afterResourceId. Optional.
        resourceTypeName - filter records with record.resourceType = resourceTypeName. Optional.
        Returns:
        a list containing up to resourceCount elements describing resources which have changed
        Throws:
        FHIRPersistenceException