0950fdd4ea7dd479d23c12081426bb8b373bcc43
This is an unimplemented proposal for handling non-basic types in Depot in an
extensible way, instead of continuing down the road of the ByteEnum-style
hackery that we've been doing to date. The basic design is as follows:
Annotate either a field or a class with @Transform and specify the classname of
a Transformer in that annotation. For example:
public class MyRecord extends PersistentRecord {
@Transform(Transformers.CommaSeparatedString.class)
public String[] cities;
}
will cause "cities" to be combined into a single string (comma separated)
before storing in the database, and split back into a string array from the
single string when read from the database.
Alternatively, one can annotate a type:
@Transform(ByteEnumTransformer.class)
public interface ByteEnum { ... }
If Depot sees a field of non-basic type, it will look for a @Transform
annotation on the field's type (and any interfaces implemented by that type or
its parent types, which is not auto-magic). If it finds one, it will use it.
Otherwise it will fall back to what it does now (which I think is to just foist
the object off to JDBC and hope for the best).
Comments and suggestions are invited.
Depot Persistence Library ------------------------- Depot is a relational persistence library for Java. It is an ORM library, but has aims that are somewhat different from the popular "managed" persistence libraries like Hibernate and others. Website ------- See the Depot website for documentation and other info: http://code.google.com/p/depot/ Building -------- The library is built using ant. It can be found here: http://jakarta.apache.org/ant/ Next, ensure that the necessary third party jar files are copied to the lib/ directory. See etc/libs-incl.xml for the list of those jar files. Finally invoke 'ant dist' to compile the code and generate a jar file. Invoke 'ant -p' to see information on other build targets. Depot also provides .classpath and .project files for Eclipse users which require that you set an EXT_LIBS_DIR variable indicating the location of the external jar dependencies. The Depot Eclipse project also depends on the Eclipse project for the samskivert library. That library can be found at: http://code.google.com/p/samskivert/ License and Distribution ------------------------ Depot is released under the LGPL. This means you are free to use Depot on any project, open source or proprietary, but that any modifications made to the library must be made available to the maintainers. See COPYING for more detailed information. The most recent version of the Depot source code is available at the website listed above. $Id$
Description
Languages
Java
95.6%
Shell
4.3%