Dear Khadija,
To me it fails in both cases, where Child inherits from Parent or from
GrandParent. It's important to mention that I'm using mozart-1.3.2.
Now, since it works for you when Child inherits from GrandParent, I assume
something changed in the distribution of class features between mozart-1.3.2
to mozart-1.4.0. I remember I did some part of the distribution of
dictionaries, but I don't know if those are related to features. Anyway,
replacing the features by object attributes works well in Mozart-1.3.2, even
if Child inherits from Parent. See the code attached (I did not modify Main.oz).
I hope that solves the issue with the features. Now back to the OS.rand thing,
I have some code that might help you, although I noticed in Main.oz that you
are already following the approach of sending messages through ports, so this
code will be easy for you to understand.
At site A
-------------------------------------------------------------------------------
First I create the class Foo that uses {OS.rand} to assign the id of the object.
declare
class Foo
attr id
meth init
id := {OS.rand}
end
meth resetId
{self init}
end
meth getId($)
@id
end
end
Then I create the port and stream that will locally forward every request to
an instance of class Foo.
declare
P S Obj in
Obj = {New Foo init}
P = {NewPort S}
thread
for Msg in S do
{Obj Msg}
end
end
Now I build a proxy, which is simply a procedure that sends a message to the
port. Note that ObjProxy does not include any reference to a resource.
declare
proc {ObjProxy Method}
{Send P Method}
end
{Pickle.save {Connection.offerUnlimited ObjProxy} 'object.tket'}
-----------------------------------------------------------------------------
Now the code at Site B
-----------------------------------------------------------------------------
I get a reference to the proxy using the ticket, and I just use the remote
reference as if it was an object.
declare
Remote = {Connection.take {Pickle.load 'object.tket'}}
{Browse {Remote getId($)}}
{Remote resetId}
{Browse {Remote getId($)}}
-----------------------------------------------------------------------------
I hope it helps
cheers
Boriss
On 07/09/10 11:50, Khadija EL MAHRSI wrote:
Hello,
I've made so many tests that I don't know what to think anymore.
I don't think I'm doing anything wrong so here is the complete code.
In this code changing the MyClasses.oz file by writing "from
GrandParent" will make everything work.
If anyone has an explanation please enlighten me.
Thanks.
2010/9/6 Khadija EL MAHRSI <[email protected]
<mailto:[email protected]>>
Hello again,
I have to admit I'm really puzzled. The warning disappeared
(apparently it doesn't appear each time that's why I didn't notice
it earlier) and yet the error is here to stay.
The code is basically something like this:
class GrandParent
attr (or feat)
x
y
z
meth init(X)
x receives X
y receives 78 (for example)
end
getters for x, y and z
end
class Parent from GrandParent
meth init(X)
GrandParent, init(X)
z receives 'K' (for example)
end
end
class Child from Parent
meth init(X)
Parent, init(X)
z receives 'H' (for example)
end
end
The problem I get is that if I create stationary instances of the
class "Child" on a remote site and I try to access x, y or z I get
the following error:
%********************** error in application *************
%**
%** Application of non-procedure and non-object
%**
%** In statement: {<Resource> getX(_<optimized>)}
I want to remind that instances created from the Parent class cause
no problem and changing "class Child from Parent" into "class Child
from GrandParent" makes everything work. Any explanation?
Thanks.
2010/9/6 Khadija EL MAHRSI <[email protected]
<mailto:[email protected]>>
Hello,
you were right I get the warning in this application too but I
didn't notice it. I will review my code and try to find out
what's wrong otherwise I will write the code in my next message.
Thanks a lot.
2010/9/6 Khadija EL MAHRSI <[email protected]
<mailto:[email protected]>>
Hello,
I need to clarify something. In this application I don't get
the warning it is in another application that I'm writing
that the marshalling warning occurs.
Thanks.
2010/9/6 Boriss Mejias <[email protected]
<mailto:[email protected]>>
On 06/09/10 10:32, Khadija EL MAHRSI wrote:
Hello,
the weird thing is that if I create an instance of
the class "parent" on
the remote site it works just fine. Any ideas?
Yes, it is probably related to the resources that you
can't export to other sites, so they are just marshalled
as "resource/unusable" (depending on Mozart's version).
Post the code of the parent class, and the error message
and we might be able to help you better.
cheers
Boriss
Thanks
2010/9/5 Wolfgang Meyer
<[email protected]
<mailto:[email protected]>
<mailto:[email protected]
<mailto:[email protected]>>>
Hi,
there is probably something about class "parent"
which causes problems
on the remote site, like for example usage of a
sited module in the
constructor of "parent". Hard to say without
more details. Is there
any error message? Can you show the code of
class "parent"?
Cheers,
Wolfgang
On Sun, Sep 5, 2010 at 5:12 PM, Khadija EL MAHRSI
<[email protected]
<mailto:[email protected]>
<mailto:[email protected]
<mailto:[email protected]>>> wrote:
> Hello,
> I have encountered a problem and I was wondering
if anyone had an
> explanation to it.
> I have the following hierarchy:
> class grandParent
> class parent from grandParent
> class child from parent
> If I try to create an instance of the child class
on a remote
site, the
> creation fails. If I write "class child from
grandParent" instead
of "class
> child from parent" the creation of the child
instance on the
remote site is
> successful.
> I tried to seperate the 3 classes in 3 different
.oz files but it
still
> didn't work. When working locally, the creation
works perfectly
using "class
> child from parent".
> Can anyone explain why?
> Maybe I'm doing something wrong? Am I supposed to
do things
differently now
> that the instance is being created on a remote site?
> I need an answer.
> Thanks.
>
>
_________________________________________________________________________________
> mozart-users mailing list
> [email protected]
<mailto:[email protected]>
<mailto:[email protected]
<mailto:[email protected]>>
>
http://www.mozart-oz.org/mailman/listinfo/mozart-users
>
_________________________________________________________________________________
mozart-users mailing list
[email protected]
<mailto:[email protected]>
<mailto:[email protected]
<mailto:[email protected]>>
http://www.mozart-oz.org/mailman/listinfo/mozart-users
_________________________________________________________________________________
mozart-users mailing list [email protected]
<mailto:[email protected]>
http://www.mozart-oz.org/mailman/listinfo/mozart-users
_________________________________________________________________________________
mozart-users mailing list [email protected]
<mailto:[email protected]>
http://www.mozart-oz.org/mailman/listinfo/mozart-users
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users
functor
import
MyGrandParent(grandParent:GrandParent)
export
parent:Parent
child:Child
define
class Parent from GrandParent
meth init(A)
GrandParent, init(A)
d :='K'
end
end
class Child from Parent
meth init(A)
Parent, init(A)
d :='H'
end
end
end
functor
import
%OS
export
grandParent:GrandParent
define
class GrandParent
attr
a
b
c
d
meth init(A)
a := A
b := 78
%self.c=OS.rand
end
meth get(Feature $)
@Feature
end
%% Call this with an unbound variable.
%% Returns whether this object runs on a remote site.
%% WARNING: this is a hack that exploits implementation details;
%% do not use in real code
meth isRemote(Unbound $)
{Value.toVirtualString Unbound 1000 1000}
== "_<dist:pxy>"
end
end
end
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users