Don't forget XMLEncoder/XMLDecoder. They come in pretty handy when you want to serialize objects that (already) follow bean conventions.
-- KD Dakshinamurthy Karra (blog: http://blog.marathontesting.com) (daily dose: http://twitter.com/marathontesting) On Tue, Dec 2, 2008 at 4:06 PM, Tayssir John Gabbour <[EMAIL PROTECTED]> wrote: > > Interesting, thanks for the new perspective! Using YAML seems more > flexible than what I was thinking, particularly since Clojure > apparently doesn't make me worry too much about the specific kind of > sequence/map I'm using. > > (Yeah, I have an app which sends serialized objects all over the > place, and one thing I didn't like was how brittle my serialization > tool was when I made a little change to object definitions. (This is > in Common Lisp.) In my next release, I'd like to make it less strict.) > > > Tayssir > > > On Dec 2, 11:12 am, Luc Prefontaine <[EMAIL PROTECTED]> > wrote: >> I use YAML to serialize. I needed a simple way to pass Maps, Lists and >> Vector between java, Ruby and Clojure components. >> I change the classes of Clojure in the YAML output to java.util.Map, >> List and so on to remove dependencies >> on Clojure classes while retaining the ability to walk through the >> structures using these basic types in "foreign" >> components. In Java it's pretty obvious, Map, List and Vectors are >> always present and in Ruby these things are >> also part of the core language. >> >> Have a look athttp://jyaml.sourceforge.net/ >> >> Essentially it sums up to something like this: >> >> (def *YAML-config* (YamlConfig.)) >> (. *YAML-config* load yamlmsg) ;; Loads a YAML representation to an >> equivalent object representation >> (. *YAML-config* dump msg) ;; Dumps an object to a YAML string. >> >> I extended a bit the library to deal transparently with types like >> java.sql.Date (I deal with several databases) >> but nothing else was changed. Just beware of binary characters in your >> strings. I encoded these with XML/HTML escapes before serializing. >> I need to talk to the maintainer about this issue. >> >> Never liked Java serialization mainly because: >> >> a) The the binary representation of classes has to be exactly the same >> at both ends otherwise you are stuck in a dead end. >> >> b) You need that [EMAIL PROTECTED]@[EMAIL PROTECTED] Serializable interface >> which should be >> implemented by default everywhere by Java, not you. >> An embedded object misses the interface ? Well find it.. at run-time >> and good luck. >> >> c) It's not easy to debug since it's not human readable. >> >> d) It makes upgrading a distributed environment a pain in the ass since >> you may have upgrade everything even if no major >> changes occurred in your classes. You added a method irrelevant to >> most of the components in a class ? >> That single change forces you to upgrade everything... this is a >> typical example of developpers disconnected from real life. >> In real life your systems are running and you may not be able to >> interrupt services for a long period to upgrade them >> all at once. You may have to do so in multiple steps and without >> interrupting the service. >> >> e) I want the data serialized, not the access to it... >> >> If size of the YAML output becomes an issue then zip it. >> >> Luc >> >> On Tue, 2008-12-02 at 00:57 -0800, Tayssir John Gabbour wrote: >> > Hi! >> >> > How should I approach serialization? I made a little test function >> > which serializes and deserializes Clojure objects. It works for >> > strings, integers, symbols, LazilyPersistentVectors and.. oddly.. >> > PersistentHashMaps that have exactly one element. (My Clojure is about >> > a month old.) >> >> > But for other things, like keywords and most PersistentHashMaps, it >> > throws NotSerializableException. >> >> > My imagined possible solutions: >> >> > * Implement Serializable for Clojure data -- but is it possible in a >> > dynamic "Hey I'll just write a new method!" way? >> >> > * Go into Clojure's source and implement Serializable to the Java >> > classes. >> >> > My end goal is using a nonrelational DB like Tokyo Cabinet or >> > BerkeleyDB. >> >> > Thanks, >> > Tayssir >> >> > PS: Here's my test code: >> >> > (defn my-identity "Copies obj through serialization and >> > deserialization." >> > [obj] >> > (let [byte-out (new java.io.ByteArrayOutputStream) >> > obj-out (new java.io.ObjectOutputStream byte-out)] >> > (try (.writeObject obj-out obj) >> > (finally (.close obj-out))) >> > (let [obj-in (new java.io.ObjectInputStream >> > (new java.io.ByteArrayInputStream (.toByteArray >> > byte-out)))] >> > (try (.readObject obj-in) >> > (finally (.close obj-in)))))) >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---