Hi,
I am trying to call perl from Java using
Inline::Java::Callback but it does not seem to work.
The details are as follows:
There are some async java functions that I am trying
to wrap in Perl. The async java functions are like:
AsyncJavaFunction(Sting someArgs,StatusListener obj),
so that when the function (or associated action) is
completed, the server calls the ListenerObject with
the status of the function call.
I am trying to replicate the same in Perl, with the
StatusListener being replaced by a PerlObject. So the
user would do something like this in Perl:
package perlObject;
sub new{
my $class = shift;
bless {}, $class;
}
package main;
my $login = somePackage->new;
my $obj = perlObject->new;
my $req_id = $login->async_perl_func($some_args,
$obj);
.
.............................
sub async_perl_func {
my $self = shift;
my $some_args = shift;
my $callback = shift;
my $listener =
MyPackage::Utils::get_listener($callback);
$self->{obj}->AsyncJavaFunc($some_args,$listener)
}
----------------------------------------------------
MyPackage.Utils.pm
-----------------------------------------------------
package MyPackage::Utils;
use Inline (
Java => <<'END_OF_JAVA',
import org.perl.inline.java.*;
import org.perl.inline.java.InlineJavaException;
import org.perl.inline.java.InlineJavaPerlException;
class IdStatusListener extends InlineJavaPerlCaller
implements StatusListener {
InlineJavaPerlObject perlobj;
public IdStatusListener(InlineJavaPerlObject
PerlObj) throws InlineJavaException {
perlobj = PerlObj;
}
public void onStatus(String request_id, Status
status) {
try {
System.out.println("recd call from java");
//Always get this printout;
perlobj.InvokeMethod("MyPackage::Utils::on_state", new
Object[] {request_id, status}); #does not work
//CallPerlSub("MyPackage::Utils::on_state",
new Object[] {request_id,status}); #does not work
either!!!
}
catch (InlineJavaException e) {
e.printStackTrace();
}
catch (InlineJavaPerlException e) {
}
}
}
END_OF_JAVA
);
sub get_listener {
my $call_val = shift;
my $listener =
MyPackage::Utils::IdStatusListener->new($call_val);
return $listener;
}
sub on_state{
print "\n recd call in perl"; #never prints out!!!
}
-----------------------------------------------------
So this code does not even call a perl subroutine even
when a callback from the server is received in the
java code. I am not sure what I am missing in the
above code.
Is there a better, more elegant way to wrap up async
calls?
Thanks in advance,
Sharmi
____________________________________________________________________________________
Moody friends. Drama queens. Your life? Nope! - their life, your story. Play
Sims Stories at Yahoo! Games.
http://sims.yahoo.com/