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