Hi,
2 questions:
1) why do call yourself Sisyphus? Is it really all for meaningless, endless
:)
2) I'd like to call some perl from a running Java process. I'm using a
vendor api and framework to build custom code. The way it works is I have
to write some java (see below), then compile within Eclipse using a supplied
Ant xml, which turns my code into a Jar that is deployed onto the server.
The vendor's Java app reads a DB that indicates where the Jar is located
and the class and method to call under various situations.
I've written a Inline::Java callback in the past, but it was initiated via
Perl. That is, I launched a perl process, that then instantiated some Java
that in turn called back into the perl.
In reading the callback docs I can't seem to grok how to make it all happen
from Java and my Jar correctly.
Below is the code.
Any guidance would be hugely appreciated.
Thanks
Jay
// this is just some test code
// that doesn't really do anything but write to a file
package com.my.stuff;
import java.io.*;
import vendorapi.mpi.*;
import vendorapi.handler.*;
import java.util.Map;
import java.util.Date;
import java.text.SimpleDateFormat;
public class FileHandler extends HandlerExtBase
{
// Class-specific members used as keys in the handlerArgs to identify
// the pre and post-ixn filename(s)
private static final String ARG_PREFILENAME = "preFileName";
private static final String ARG_POSTFILENAME = "postFileName";
// Instance-specific members initialized during the overridden init()
method
private String preFileName = null;
private String postFileName = null;
public void init(Context ctx, String handlerArgs)
{
Map<?, ?> argsMap = parseArgs(handlerArgs);
String madHomeDir = System.getenv("MAD_HOMEDIR");
// Create the pre- and post- files in the MAD_HOMEDIR directory
if (argsMap.containsKey(ARG_PREFILENAME))
{
preFileName = madHomeDir + File.separator + "log" + File.separator +
(String)argsMap.get(ARG_PREFILENAME);
}
if (argsMap.containsKey(ARG_POSTFILENAME))
{
postFileName = madHomeDir + File.separator + "log" + File.separator +
(String)argsMap.get(ARG_POSTFILENAME);
}
}
protected void writeFile(String fileName, RowList rowList)
{
Date todaysDate = new java.util.Date();
SimpleDateFormat formatter = new SimpleDateFormat();
String formattedDate = formatter.format(todaysDate);
PrintWriter out = null;
try {
out = new PrintWriter(new BufferedWriter(new FileWriter("c:\\" +
formattedDate + ".txt")));
out.println(formattedDate);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
// I'd like to call Perl at this point and have Perl be
// able to access the RowList instance, so Perl could walk
// the list. As opposed to flattening the list in someway
// and shelling out and passing in the flattened list
//
//
public void preIxn(IService service) throws CallbackHandlerException
{
if (preFileName != null)
{
writeFile(preFileName, service.getInpMemRowList());
}
}
public void postIxn(IService service) throws CallbackHandlerException
{
if (postFileName != null)
{
writeFile(postFileName, service.getOutMemRowList());
}
}
}