[jboss-dev] Embedded DB for internal use

Brian Stansberry brian.stansberry at redhat.com
Thu Sep 6 16:49:26 EDT 2007


Basically avoids issues with FileCacheLoader, which the JBC team doesn't 
recommend using in production.[1]

Some specific stuff I've seen:

1) Had to add a dummy level w/ 100 nodes in it to the Fqns we use for 
storing sessions.  Otherwise we were hitting file system limitations on 
the # of subdirectories you could have under a directory, limiting the 
max number of beans.
2) On Windows with FIELD granularity web sessions, the directory 
structure gets deep enough that I'm starting to see maximum file path 
length issues in unit tests. (This is the one that prompted my post.)


[1] From the Section 8.3.1 of the JBC docs:

"The FileCacheLoader has some severe limitations which restrict it's use 
in a production environment, or if used in such an environment, it 
should be used with due care and sufficient understanding of these 
limitations.

     * Due to the way the FileCacheLoader represents a tree structure on 
disk (directories and files) traversal is inefficient for deep trees.
     * Usage on shared filesystems like NFS, Windows shares, etc. should 
be avoided as these do not implement proper file locking and can cause 
data corruption.
     * Usage with an isolation level of NONE can cause corrupt writes as 
multiple threads attempt to write to the same file.
     * File systems are inherently not transactional, so when attempting 
to use your cache in a transactional context, failures when writing to 
the file (which happens during the commit phase) cannot be recovered.

As a rule of thumb, it is recommended that the FileCacheLoader not be 
used in a highly concurrent, transactional or stressful environment, and 
it's use is restricted to testing. "

Bill Burke wrote:
> what benefit does a DB give you?
> 
> Brian Stansberry wrote:
>> I know there've been a few threads on this general topic, so please 
>> forgive if I'm rehashing old ground.
>>
>> I'd like to replace the way clustered web sessions and clustered EJB3 
>> SFSBs store their data.  They currently do it to the file system via 
>> JBossCache's FileCacheLoader.  Lot's of issues with that. A simple 
>> alternative is a config change to use JDBCCacheLoader and have the 
>> storage done to an embedded DB.
>>
>> My assumptions about this are:
>>
>> 1) Each AS instance would be *meant to* have it's own DB instance; 
>> it's not meant to be a shared resource. A user reconfiguring the AS to 
>> share the same db instance with the same schema between AS instances 
>> would be making a configuration mistake.
>> 2) It would be a production ready RDBMS (Derby ???); expectation would 
>> not be that customers should replace it by default.
>> 3) We'd deploy our own datasource (say "EmbeddedDS" or "InternalDS") 
>> to talk to it. Internal services like I described would use that 
>> datasource.
>> 4) DefaultDS could point to it as well, so the AS works out of the 
>> box. But the recommendation there would be the same as now -- 
>> reconfigure the DefaultDS to point to an external production-ready DB.
>>
>> Thoughts?
>>
> 


-- 
Brian Stansberry
Lead, AS Clustering
JBoss, a division of Red Hat
brian.stansberry at redhat.com




More information about the jboss-development mailing list