# 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.  

removeall-byclass: The datacache does not support automatic removal of \
	subclasses.
nested-exceps: This operation failed for some instances.  See the nested \
	exceptions array for details.
exp-listener-ex: An exception was thrown while executing an expiration \
	listener callback method. It was intercepted. The event framework \
	consumes any exceptions that an ExpirationListener may throw.
interrupt: This thread has been interrupted.
cache-timeout: The value corresponding to key "{0}" has timed out.
cache-already-configured: Cannot invoke this method, as the cache has \
	already been configured.
invalid-type: Invalid cache type "{0}". Allowed types are "distributed", \
	"replicated", or "named".
cache-miss: Cache miss while looking up key "{0}".
cache-hit: Cache hit while looking up key "{0}".
cache-put: Put key "{0}" into cache.
cache-removeclass: Cache removing class "{0}".
cache-remove-miss: Cache miss while removing key "{0}".
cache-remove-hit: Cache hit while removing key "{0}".
cache-clear: Clearing datastore cache "{0}".
cache-pin-hit: Pinning key "{0}". Key is currently in the cache.
cache-pin-miss: Pinning key "{0}". Key is currently not in the cache.
cache-unpin-hit: Unpinning key "{0}". Key is currently in the cache.
cache-unpin-miss: Unpinning key "{0}". Key is currently not in the cache.
cache-expired: Key "{0}" was expired from the cache.
cache-commit: Performing a commit on the cache. Adding {0}, \
	updating {1} and {2}, and removing {3}.
cache-stats: Usage statistics for cache {0}: hits: {1}; misses: {2}; hit \
	ratio: {3}
cache-class-pin: The cache "{0}" does not support per-class pinning.
cache-class-unpin: The cache "{0}" does not support per-class pinning.
cache-class-unpin-all: The cache "{0}" does not supper per-class pinning.  \
    All pinned keys will be un-pinned.
list-closed: This operation cannot be performed on this list, as the list has \
	been closed.
query-cache-miss-evict: Query cache miss while looking up key "{0}". The \
	key was in the cache, but the results have expired.
query-cache-miss: Query cache miss while looking up key "{0}".
query-cache-hit: Query cache hit while looking up key "{0}".
query-cache-put: Put key "{0}" into query cache.
query-cache-remove-miss: Query cache miss while removing key "{0}".
query-cache-remove-hit: Query cache hit while removing key "{0}".
query-cache-clear: Clearing query cache.
query-cache-key-expired: Key "{0}" has expired from the query cache.
query-cache-key-removed: Key "{0}" has been removed from the query cache.
reg-mbean: Registered MBean ({0}).
cant-reg-mbean: Unable to register Datastore Cache {0} MBean.
query-cache-name:  Query Cache
scheduler-start: Starting cache scheduler thread "{0}"...
scheduler-name: OpenJPA Cache Scheduler
scheduler-interval: Cache schedule thread will check every "{0}" min.
scheduler-clear: Scheduled cache eviction at time "{1}" for cache:"{0}"
scheduler-stop: Stopping scheduled cache eviction thread.
scheduler-fail: Cache scheduler thread unexpectedly interrupted. Stopping \
	scheduler.
bad-schedule: Invalid schedule string: "{0}"
not-number: Token "{0}" is not a valid number or wildcard (*) for schedule.
bad-count: Invalid number of tokens in string "{0}" for cache schedule.  \
	There should be five tokens (minute, hour, dom, month, dow).
not-range: The token "{0}" is not in the valid range ({1}, {2}).
deserialize-classnotfound: Deserialization error, unable to find class.
no-default-cache: None of the data cache instances in the configuration \
	string "{0}" are configured to be the default data cache. There must be \
	one and only one cache whose name is "{1}", or whose name is not specified.
multi-default-cache: More than one of the data cache instances in the \
	configuration string "{0}" are configured to be the default data cache. \
	There must be one and only one cache whose name is "{1}", or whose name is \
	not specified.
	
