Jay,

PerlNatives does not add new callback functionnality, it justy provodes a
different way to use callbacks.
But you should have all you need in Inline::Java 0.44.
Try using callback loops (see documentation).

Cheers,

Patrick
----- Original Message ----- 
From: "Jay Strauss" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Sunday, January 18, 2004 1:13 PM
Subject: Re: Inline::Java Request For Comments: PerlNatives


> Patrick,
>
> Do you think your new changes might help me with what I was trying to do?
>
> I'm not sure if you remember the whole mess but in Java I have to:
>
> 1) create a class which implements EWrapper (a vendor supplied interface),
>    within this class are methods like: tickPrice, tickSize...  I call this
>    class TWSAPI
>
> 2) then:
>    a) new an instance of TWSAPI
>    b) new a EClientSocket passing it my TWSAPI instance
>    c) call my EClientSocket.connect, which in turn creates an instance of
>       EReader (another vendor piece of code).  EReader starts a new
>   thread which runs continuously, sitting on a socket reading everything
>       coming from the socket, and makes calls to tickPrice, tickSize...
>
> 3) call methods on my EClientSocket to make trades and request
information,
>    such as, EClientSocket.reqMktData(args), EClientSocket.placeOrder
>
> In summary, I have one thread that is that is issuing requests like
> placeOrder,
> requestMktData, getTransactions... and another thread reading the socket
> making callbacks to my custom code to handle tickSize, tickPrice,
> orderExecuted...
>
> Both threads are independent of eachother and non-blocking
>
> Thanks
> Jay
>
> ----- Original Message -----
> From: "Patrick LeBoutillier" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Sunday, January 11, 2004 2:12 PM
> Subject: Inline::Java Request For Comments: PerlNatives
>
>
> > Hi all,
> >
> > First of all I would like to take this opportunity to wish a happy new
> > year to all Inline users and their families.
> >
> > Now on with business. In the last Inline::Java version (0.44),
significant
> > changes where brought (thanks in part to many users on this list) to the
> > way callbacks are handled within Inline::Java. But the way callbacks are
> > invoked, i.e.:
> >
> >     Object rv = CallPerl("my::package", "my_sub", new Object [] {"arg1",
> > "arg2"}) ;
> >
> > is still somewhat cumbersome. During the holidays I did a bit of
research
> > (and also looked a bit at JPL) and came up with a cleaner way to define
> > callbacks and invoke them: I call this "PerlNatives".
> >
> > Let's look at a realistic example with the way callbacks are invoked
> > currently:
> >
> >    use Inline Java => <<'END' ;
> >       import java.util.* ;
> >       import org.perl.inline.java.* ;
> >       import javax.swing.* ;
> >       import java.awt.event.* ;
> >
> >       class Button extends InlineJavaPerlCaller
> >                        implements ActionListener {
> >          public Button() throws InlineJavaException {
> >             JFrame frame = new JFrame("Button") ;
> >             frame.setSize(50,50) ;
> >             JButton button = new JButton("Click Me!") ;
> >             frame.getContentPane().add(button) ;
> >             button.addActionListener(this) ;
> >             frame.show() ;
> >          }
> >
> >          public void actionPerformed(ActionEvent e){
> >             try {
> >                CallPerl("main", "button_pressed", new Object [] {}) ;
> >             }
> >             catch (InlineJavaPerlException pe){ }
> >             catch (InlineJavaException pe) { pe.printStackTrace() ;}
> >          }
> >       }
> >    END
> >
> >    my $b = new Button() ;
> >
> >    sub button_pressed {
> >       print("click!\n") ; # prints click!
> >    }
> >
> >
> > With PerlNatives, you do it like this:
> >
> >    use Inline Java => <<'END' ;
> >       import java.util.* ;
> >       import org.perl.inline.java.* ;
> >       import javax.swing.* ;
> >       import java.awt.event.* ;
> >
> >       class Button extends InlineJavaPerlNatives
> >                        implements ActionListener {
> >          public Button() throws InlineJavaException {
> >             JFrame frame = new JFrame("Button") ;
> >             frame.setSize(50,50) ;
> >             JButton button = new JButton("Click Me!") ;
> >             frame.getContentPane().add(button) ;
> >             button.addActionListener(this) ;
> >             frame.show() ;
> >          }
> >
> >          public void actionPerformed(ActionEvent e){
> >             button_pressed() ;
> >          }
> >
> >          native public void button_pressed() ;
> >       }
> >    END
> >
> >    my $b = new Button() ;
> >
> >    sub Button::perl::button_pressed {
> >       my $this = shift ;
> >       print("click!\n") ; # prints click!
> >    }
> >
> >
> > So what has changed here?
> >
> > First of all, the Button class now extends InlineJavaPerlNatives instead
> > of InlineJavaPerlCaller. Basically all this does is tell Java that all
> > methods declared "native" in this class will be implemented (or more
> > specifically mapped) to a subroutine in Perl.
> >
> > Secondly, we defined a new native method in our class called
> > button_pressed. Since this method is in the class Button (which extends
> > InlineJavaPerlNatives), Inline::Java will know that this method is
mapped
> > to the Button::perl::button_pressed subroutine in Perl (the addition of
> > the ::perl subpackage is necessary or else you will get into a infinite
> > loop (remember that since Button.button_pressed is public, Inline::Java
> > has already mapped to Button::button_pressed!)).
> >
> > Thirdly, we simply call button_pressed as if it where a normal Java
> method.
> >
> > Of course there are a few limitations with PerlNatives:
> > - You can't have 2 native methods with the same name in a class
> > - Native methods can only return void or Object types (no primitive
> > types). This is somewhat anoying but can be easily worked around using
the
> > wrapper classes (Integer, Double, ...)
> > - (certainly others to be discovered later...)
> >
> > That's basically it. I still have some implementation details to iron
out
> > and some tiny portability issues, but I've got everything working pretty
> > well.
> >
> > Note: For those of you who are wondering why I'm so preoccupied with
> > callbacks, I just want to say that one day I would like people to use
> > Inline::Java to call PERL from JAVA. Callbacks (which in this case won't
> > be callbacks at all) will then become very important.
> >
> > Anyways, I just wanted to get some feedback on this before I got to
far...
> >
> > Thanks,
> >
> > Patrick
> >
> > ----------------------------------
> > | Patrick LeBoutillier
> > | [EMAIL PROTECTED]
> >
> > _________________________________________________________________
> > STOP MORE SPAM with the new MSN 8 and get 2 months FREE*
> >
>
http://join.msn.com/?page=dept/bcomm&pgmarket=en-ca&RU=http%3a%2f%2fjoin.msn
> .com%2f%3fpage%3dmisc%2fspecialoffers%26pgmarket%3den-ca
> >
> >
> >
>
>
>

Reply via email to