@ThreadSafe public class DatabaseBinaryStore extends AbstractBinaryStore
BinaryStore implementation that uses a database for persisting binary values.
This binary store implementation establishes a connection to the specified database and then attempts to determine which type of database is being used. ModeShape is aware of the following database types:
mysqlpostgresderbyhsqlh2sqlitedb2db2_390informixinterbasefirebirdsqlserveraccessoraclesybase
These statements are read from a property file named "binary_store_{type}_database.properties", where where "
{type}" is one of the above-mentioned database type strings. These properties files are expected to be found on
the classpath directly under "org/modeshape/jcr/database". If the corresponding file is not found on the classpath, then the "
binary_store_default_database.properties" file provided by ModeShape is used.
ModeShape provides out-of-the-box database-specific files for several of the DBMSes that are popular within the open source
community. The properties files for the other database types are not provided (though the ModeShape community will gladly
incorporate them if you wish to make them available to us); in such cases, simply copy one of the provided properties files
(e.g., "binary_store_default_database.properties" is often a good start) and customize it for your particular
DBMS, naming it according to the pattern described above and including it on the classpath.
Note that this mechanism can also be used to override the statements that ModeShape does provide out-of-the-box. In such cases, be sure to place the file on the classpath before the ModeShape JARs so that your file will be discovered first.
The JDBC driver used needs to be at least JDBC 1.4 (JDK 6) compliant,
because PreparedStatement.setBinaryStream(int parameterIndex, java.io.InputStream x) is being used.
logger, MEDIUM_BUFFER_SIZE| Constructor and Description |
|---|
DatabaseBinaryStore(String datasourceJNDILocation)
Create new store that uses the JDBC DataSource in the given JNDI location.
|
DatabaseBinaryStore(String driverClass,
String connectionURL,
String username,
String password)
Create new store.
|
| Modifier and Type | Method and Description |
|---|---|
Iterable<BinaryKey> |
getAllBinaryKeys()
Obtain an iterable implementation containing all of the store's binary keys.
|
String |
getExtractedText(BinaryValue source)
Returns the extracted text of a binary value, or
null if such text hasn't been stored previously (but the binary
value can be found in the store) |
InputStream |
getInputStream(BinaryKey key)
Get an
InputStream to the binary content with the supplied key. |
protected String |
getStoredMimeType(BinaryValue source)
Returns the stored mime-type of a binary value.
|
void |
markAsUnused(Iterable<BinaryKey> keys)
Mark the supplied binary keys as unused, but key them in quarantine until needed again (at which point they're removed from
quarantine) or until
BinaryStore.removeValuesUnusedLongerThan(long, TimeUnit) is called. |
void |
removeValuesUnusedLongerThan(long minimumAge,
TimeUnit unit)
Remove binary values that have been
unused for at least the specified amount of time. |
void |
shutdown()
Shuts down the store.
|
void |
start()
Initialize the store and get ready for use.
|
void |
storeExtractedText(BinaryValue source,
String extractedText)
Stores the extracted text of a binary value into this store.
|
protected void |
storeMimeType(BinaryValue source,
String mimeType)
Stores the given mime-type for a binary value.
|
BinaryValue |
storeValue(InputStream stream)
Store the binary value and return the JCR representation.
|
bestBufferSize, detector, extractors, getMimeType, getMinimumBinarySizeInBytes, getText, hasBinary, setMimeTypeDetector, setMinimumBinarySizeInBytes, setTextExtractors, storeValuepublic DatabaseBinaryStore(String driverClass, String connectionURL, String username, String password)
driverClass - JDBC driver class nameconnectionURL - database locationusername - database user namepassword - database passwordpublic DatabaseBinaryStore(String datasourceJNDILocation)
datasourceJNDILocation - the JNDI name of the JDBC Data Source that should be used, or nullpublic void start()
BinaryStorestart in interface BinaryStorestart in class AbstractBinaryStorepublic BinaryValue storeValue(InputStream stream) throws BinaryStoreException
BinaryStorestream - the stream containing the binary content to be stored; may not be nullBinaryStoreException - if there any unexpected problempublic InputStream getInputStream(BinaryKey key) throws BinaryStoreException
BinaryStoreInputStream to the binary content with the supplied key.key - the key to the binary content; never nullnever nullBinaryStoreException - if there is a problem reading the content from the store or if a valid, non-null
InputStream cannot be returned for the given key.public void markAsUnused(Iterable<BinaryKey> keys) throws BinaryStoreException
BinaryStoreBinaryStore.removeValuesUnusedLongerThan(long, TimeUnit) is called. This method ignores any keys for
values not stored within this store.keys - the keys for the binary values that are no longer neededBinaryStoreException - if there is a problem marking any of the supplied binary values as unusedpublic void removeValuesUnusedLongerThan(long minimumAge,
TimeUnit unit)
throws BinaryStoreException
BinaryStoreunused for at least the specified amount of time.minimumAge - the minimum time that a binary value has been unused before it can be
removed; must be non-negativeunit - the time unit for the minimum age; may not be nullBinaryStoreException - if there is a problem removing the unused valuesprotected String getStoredMimeType(BinaryValue source) throws BinaryStoreException
AbstractBinaryStoregetStoredMimeType in class AbstractBinaryStoresource - a non-null BinaryValueString if a stored mimetype exists, or null if such a value doesn't exist yet.BinaryStoreException - if there's a problem accessing the binary store or if the binary value cannot be found in the
storeprotected void storeMimeType(BinaryValue source, String mimeType) throws BinaryStoreException
AbstractBinaryStorestoreMimeType in class AbstractBinaryStoresource - a non-null BinaryValuemimeType - a non-empty StringBinaryStoreException - if there's a problem accessing the binary storepublic String getExtractedText(BinaryValue source) throws BinaryStoreException
AbstractBinaryStorenull if such text hasn't been stored previously (but the binary
value can be found in the store)getExtractedText in class AbstractBinaryStoresource - a non-null BinaryValue instance from which the text was extractedString representing the extracted text, or null if such text hasn't been stored in this store
previously.BinaryStoreException - if the binary value cannot be found in the store.public void storeExtractedText(BinaryValue source, String extractedText) throws BinaryStoreException
AbstractBinaryStorestoreExtractedText in class AbstractBinaryStoresource - a non-null BinaryValue instance from which the text was extractedextractedText - a non-null and non-blank string representing the extracted textBinaryStoreException - if the operation fails or if the extracted text cannot be stored for the given binary value
(regardless of the reason)public Iterable<BinaryKey> getAllBinaryKeys() throws BinaryStoreException
BinaryStoreBinaryKeys only as the iterator is used.BinaryStoreException - if anything unexpected happens.public void shutdown()
BinaryStoreshutdown in interface BinaryStoreshutdown in class AbstractBinaryStoreCopyright © 2008-2014 JBoss, a division of Red Hat. All Rights Reserved.