[erlang-questions] : Use of Records in the Java API
Alexander Lamb
alexander.lamb@REDACTED
Wed Jun 11 14:24:31 CEST 2008
Ok, I should have remembered the "records are tuples in disguise" from
Joe's book.
So, since there is no actual runtime documentation of a record, this
makes programming from Java an issue of "conventions". It is like
puting in place a protocole were client and server agree on fields and
data types. Therefore, it is not possible to build the java records by
introspection.
What would be possible though is to "by convention" always send and
receive meta-model type of information with any data exchanged between
java and erlang.
Thanks,
Alex
Le 11 juin 08 à 13:31, Raimo Niskanen a écrit :
> On Wed, Jun 11, 2008 at 12:58:57PM +0200, Gleb Peregud wrote:
>> On Wed, Jun 11, 2008 at 10:23 AM, Alexander Lamb
>> <alexander.lamb@REDACTED> wrote:
>>> Hello,
>>>
>>> My Erlang modules are mainly a server to Java Web applications (for
>>> the time being).
>>>
>>> This means that I am making a big use of the Erlang Java API which
>>> works fine.
>>> Since my Erlang modules use Mnesia to store data coming from the
>>> Java
>>> side (and vice versa), I need to implement functions with many
>>> parameters for example to insert new data in a Mnesia table.
>>> I also need to convert tuples into actual Java objects when reading
>>> data.
>>>
>>> This would be simpler if the Java API had an OtpErlangRecord. It
>>> would
>>> make it possible to subclass it and could even be the prefered way
>>> of
>>> bridging the Erlang world with the Java world. It would also avoid
>>> breaking code each time a new attribute is needed for a Mnesia table
>>> (making it today necessary to add a parameter to the complete
>>> chain of
>>> function calls).
>>>
>>> I didn't find any mention of OtpErlangRecord in the documentation. I
>>> suspect it is because the Java API was written before records were
>>> introduced in Erlang.
>>>
>>> In a more general sense, is there any plan to enhance the
>>> functionalities of the Java API to handle more gracefully the
>>> mismatch between the loosely typed functional world of Erlang and
>>> the
>>> object oriented world of Java?
>>>
>>> I could very well imagine a Java class to handle marshalling and
>>> unmarshalling of terms at a high level using records. You would
>>> add a
>>> type description to the attributes and on the Java side you would
>>> immediately receive objects (subclasses of OtpErlangRecord for
>>> example). It could look somewhat like tools such as Cayenne or
>>> Hibernate in the SQL world.
>>>
>>> Just some thoughts. And since in two weeks Dennis Byrne is making a
>>> presentation at Erlang Exchange on that subject, maybe if Dennis is
>>> reading this post, he could consider preparing a few words in that
>>> direction for his London speech:-)
>>> That comment actually also applies if the client is in ActionScript
>>> for a Flash/Flex application or even JavaScript.
>>>
>>> Alex
>>
>> Hello,
>>
>> There's a problem with records on the Java side, since records are
>> comple-time module-specific features. As far i know erlang VM does
>> not
>> have any runtime information about records, hence it is unable to
>> send
>> it to Java side. Though probably it is not possible to implement
>> OtpErlangRecord in general way.
>>
>> Feel free to correct me if i'm wrong.
>>
> http://www.erlang.org/doc/reference_manual/part_frame.html
>
>
>
> 8.7 Internal Representation of Records
>
> Record expressions are translated to tuple expressions during
> compilation. A record defined as
>
> -record(Name, {Field1,...,FieldN}).
>
> is internally represented by the tuple
>
> {Name,Value1,...,ValueN}
>
> where each ValueI is the default value for FieldI.
>
> To each module using records, a pseudo function is added during
> compilation to obtain information about records:
>
> record_info(fields, Record) -> [Field]
> record_info(size, Record) -> Size
>
> Size is the size of the tuple representation, that is one more than
> the number of fields.
>
>
>
>> Best regards,
>> --
>> Gleb Peregud
>> http://gleber.pl/
>>
>> Every minute is to be grasped.
>> Time waits for nobody.
>> -- Inscription on a Zen Gong
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://www.erlang.org/mailman/listinfo/erlang-questions
>
> --
>
> / Raimo Niskanen, Erlang/OTP, Ericsson AB
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
More information about the erlang-questions
mailing list