Venkat, on IRC we were talking about how to introspect JRuby components,
after playing about with this i think you can call
getMetaClass().getMethods() on the IRubyObject rubyInstance. That gives a
map of the methods and it looks like that includeds a method name ending in
"=" for the attr_writer ones.  For example if in your script you have
attr_writer :foo then the method map will contain a method with key "foo=".

  ...ant

On 9/11/06, Venkata Krishnan <[EMAIL PROTECTED]> wrote:

Hi,

This time around I am stuck with passing java object instances to ruby.  I
need this to enable service reference calls from Ruby.   I want to be able
to pass to ruby an instance of a Java proxy to an external service (say
StockQuote).  Then from ruby I want to make service method calls over this
proxy.

I have tried setting the java object to a ruby global variable, after
converting the java object to a ruby object ofcourse.  But this does not
work as it seems like I must instantiate the object from within the ruby
context.

Is there any other way to do this?

- Thanks

- Venkat

On 9/8/06, Venkata Krishnan <[EMAIL PROTECTED]> wrote:
>
> Hi Simon, Jean-Sebastien and Ant,
>
> Thanks.  I see it working now :-).   The leads that each of you gave is
> all that is to it.
>
> Ant, I will put in a patch with this update soon.  Thanks for taking the
> pains and trying it yourself.
>
> - Venkat
>
> On 9/8/06, ant elder <[EMAIL PROTECTED]> wrote:
> >
> > After playing around with this I think what Simon and Jean-Sebastien
> > have
> > already said is correct, its the ".new" that does it. Right now the
> > createInstance method is:
> >
> >     public RubyScriptInstance createScriptInstance() {
> >         return new RubyScriptInstance(rubyEngine.evalScript
> > (getScript()),
> > responseClasses);
> >     }
> >
> > Assuming you add a class attribute to the scdl and store that value in
a
> > className field in RubyScript then I think the following should work:
> >
> >     public RubyScriptInstance createScriptInstance() {
> >         IRubyObject  rubyInstance = rubyEngine.evalScript
(getScript());
> >         if (className != null) {
> >             rubyInstance = rubyEngine.evalScript (className + ".new");
> >         }
> >         return new RubyScriptInstance(rubyInstance , responseClasses);
> >     }
> >
> >    ...ant
> >
> >
> >
> > On 9/8/06, Jean-Sebastien Delfino < [EMAIL PROTECTED]> wrote:
> > >
> > > Venkata Krishnan wrote:
> > > > Hi
> > > >
> > > > The current implementation of Ruby in Java works only for scripts
> > that
> > > > have
> > > > global methods.  I am interested getting this work for methods
> > inside
> > > > classes.. But then I am not able to figure out a way of doing
this.
> > > >
> > > > Can somebody help me with clues on the following... maybe even if
> > the
> > > C++
> > > > guys are able to provide me some hints conceptually I can map it
to
> > the
> > > > JRuby stuff.  Here is what I do...
> > > >
> > > > 1) I load the script into the Ruby engine and get a RubyObject out
> > of it
> > > > 2) call the invoke method on the Ruby object to invoke the Ruby
> > > functions
> > > >    - in this invoke method there is no way I am able to specify
the
> > > > RubyClass whos method I should invoke.  All that it takes is the
> > > > method name
> > > > as a string.  I tried using <ruby classname>.<ruby methodname> for
> > the
> > > > method argument but failed.
> > > >
> > > > So how do I specify the class?
> > > >
> > > > Thanks
> > > >
> > > > - Venkat
> > > >
> > > > On 9/8/06, Simon Laws < [EMAIL PROTECTED]> wrote:
> > > >>
> > > >> On 9/8/06, ant elder < [EMAIL PROTECTED]> wrote:
> > > >> >
> > > >> > Yes we should be able to do the same type of thing with Java.
Is
> > > >> the PHP
> > > >> > SDO
> > > >> > API the same as the C++ API or is it simplified?
> > > >> >
> > > >> > I think for most if not all the Java based scripting languages
we
> > can
> > > >> just
> > > >> > expose the Java SDO API to the scripting language (at one point
> > we
> > > >> had a
> > > >> > JavaScript version of the Big Bank sample account module that
did
> >
> > > >> this),
> > > >> > but
> > > >> > there are probably ways to use the dynamic nature of the script
> > > >> languages
> > > >> > to
> > > >> > come up with a simplify SDO API.
> > > >> >
> > > >> >    ...ant
> > > >> >
> > > >> > On 9/7/06, Simon Laws <[EMAIL PROTECTED]> wrote:
> > > >> > >
> > > >> > > > In PHP we have an implementation of SDO that is fully based
> > on
> > > the
> > > >> C++
> > > >> > > SDO
> > > >> > > > implementation. I'm not sure if it will be instructive in
the
> >
> > > java
> > > >> > space
> > > >> > > but
> > > >> > > > we have pretty much just wrapped the C++ SDO interfaces and
> > > >> exposed
> > > >> > them
> > > >> > > as
> > > >> > > > native PHP objects. I guess you would have to do a similar
> > > >> thing in
> > > >> > Ruby
> > > >> > > or
> > > >> > > > any other extension for that matter. The solution will
depend
> >
> > > >> on how
> > > >> > you
> > > >> > > > construct extensions to your scripting language. In PHP it
> > just
> > > so
> > > >> > > happens
> > > >> > > > you have to do it in C/C++ but I would hope you can do it
in
> > Java
> > > >> for
> > > >> > > JVM
> > > >> > > > based environments.
> > > >> > > >
> > > >> > >
> > > >> > >
> > > >> > > S
> > > >> > >
> > > >> > >
> > > >> >
> > > >> > The SDO API in PHP is fairly similar to the C++ SDO but is
> > simplified
> > > >> and
> > > >> in particular it tries to take avantage of the features of PHP so
> > > >> that it
> > > >> is
> > > >> comfortable to use for the PHP programmer. For example, a typical
> > > >> user of
> > > >> the XML DAS might do
> > > >>
> > > >> $xmldas->addTypes(" company.xsd ");
> > > >> $document = $xmldas->loadFile("company.xml");
> > > >> $company = $document->getRootDataObject();
> > > >> $company_name = $company->name;     // property access style
> > > >> $company_name = $company['name'];   // associative array access
> > style
> > > >> $company_name = $company[0];        // index array access style
> > > >>
> > > >> The trick is make the experience as natural for the script
> > developer
> > > >> as possible so we have, for example,  provided all the normal PHP
> > > >> object access styles.
> > > >>
> > > >> Also our user space implementation of the relational DAS is quite
> > > >> different from the current java implementation.
> > > >>
> > > >> Regards
> > > >>
> > > >> Simon
> > > >>
> > > >>
> > > >
> > > Venkat,
> > >
> > > I'm not sure how you do with thiw JRuby, but you should call the
> > target
> > > method on an instance of the Ruby component implementation class,
not
> > on
> > > the class itself. So do something like:
> > > 1. invoke " Calculator.new" and get an object representing your Ruby
> > object
> > > 2. get an object representing the "add" method
> > > 3. invoke that method on the Ruby instance
> > >
> > > --
> > > Jean-Sebastien
> > >
> > >
> > >
---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
> >
>


Reply via email to