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
-~----------~----~----~----~------~----~------~--~---

Reply via email to