[ 
https://issues.apache.org/jira/browse/DERBY-2469?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12503777
 ] 

Luigi Lauro commented on DERBY-2469:
------------------------------------

Ok, I answer to you all on the several issues, in several upcoming comments :)

Summary of the patch (@Dan): currently derby supports only several storage 
system for the database file persistence. The aim of this patch is to add a new 
Storage system for derby, built upon the JNLP PersistenceService API, which is 
a sun provided persistence service meant to be used in java web start 
environments (web apps or web-deployed desktop apps, as the one I'm 
developing), and is meant to be sandbox friendly (no 'give me full access to 
your HD' popups as per using the standard file factory).

To get in depth, my implementation is currently made up of two implementation 
classes and an abstract class.

AbstractStorageFactory: abstract base class implementing StorageFactory 
interface. This is meant to be a base class for StorageFactory implementation 
classes, and it's a sort of 'cleaned up' and rewritten from scratch version of 
derby BaseStorageFactory class. It provides basic initialization logic for 
needed database/temp directories, and it also gives a standard temporary files 
implementation, using standard files.

JNLPStorageFactory: Java Web Start based StorageFactory implementation using 
JNLPStorageFile classes for file entities. All the persistence operations are 
delegated to JNLPStorageFile instances, which make use of the JNLP 
PersistenceService API provided by the Java Web Start framework, which is a 
sandbox friendly persistent storage available to JWS-enabled applications.

Persistence is based on a cookie-like mechanism which stores persistent 
entities associated with URLs. We build hierarchy upon this flat structure by 
using a implicit naming hierarchy.

Mapping is currently 1-1 (PersistenceEntity <---> Derby StorageFile) because I 
wanted to keep the implementation simple and straightforward, and this limits 
current applications of this factory till the sun PersistenceService 
implementation bug of maximum 255 persistence entries have been fixed (probably 
in next update, from the informations I have from Sun). This means the whole 
factory will fail horribly as soon as Derby asks for more than 255 storage 
entities.

The current implementation use JNLP Storage entities even for temporary files 
(to avoid using standard files, which will defy the whole purpose of this 
factory - making a sandbox friendly JWS enabled factory), but I plan to plug in 
a in-memory implementation for the temp files, in order to avoid spamming the 
persistence storage with temporary files (especially since the 255 max entities 
bug, presently).

JNLP Storage Entities have no hierarchy, so I had to code an implicit one into 
the name, using a special char (comma "," presently, as I thought it was the 
one  least probable to be seen in URLs, but still valid).

A JNLP Storage entity therefore is associate with a given URL, which is usually 
something like "http://APP_CODEBASE/DIR1,DIR2,DIR3,FILE"; (ex: 
"http://www.derby.com/jnlp/directory,subdirectory,file";)

Currently, the implementation scan the whole persistent entities list to find 
the 'files' contained in a given directory, and parses all paths to find the 
entities that matches the needed path. This could be optimized by using data 
structures for indexing the entities, in order to avoid a full scan each time, 
but performance wise this should not be too much of a problem given the max 255 
entities limit and the fact the PersistenceService is pretty efficient in 
retrieving the entities names. First make it work, then make it fast ;-)

> Java Web Start JNLP PersistenceService API storage support
> ----------------------------------------------------------
>
>                 Key: DERBY-2469
>                 URL: https://issues.apache.org/jira/browse/DERBY-2469
>             Project: Derby
>          Issue Type: New Feature
>          Components: Store
>    Affects Versions: 10.2.2.0
>         Environment: Java Web Start
>            Reporter: Luigi Lauro
>            Assignee: David Van Couvering
>            Priority: Minor
>             Fix For: 10.3.0.0
>
>         Attachments: svn-diff-20070329, svn-diff-20070606
>
>
> I would love to have Derby write/read to the storage area provided by the 
> JNLP PersistenceService API.
> Since Derby is now bundled with the Java6 JDK as JavaDB, I think this  
> integration would go a long way towards making derby more developer- friendly 
> in Java Web Start environments, where using the sandbox tools Sun provides us 
> it the right way to go, instead of working  around it and force the user to 
> give the app the authorization to write on the hard drive IMHO.
> I'm investigating the effort needed to provide an implementation of the 
> WritableStorageFactory interface around the PersistenceService API, and if 
> that's doable in a few days work, I will start working on it and submit a 
> patch for testing/approval ASAP.
> Feel free to volounteer and provide pointers/hints/whatever, it's really 
> appreciate, especially since I currently know nothing of derby internals.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to