On Mon, Nov 28, 2011 at 5:13 PM, Philippe de Rochambeau <[email protected]> wrote:
> Hello,
>
> I would like to create a Web service based on a class which calls C functions
> via JNI.
>
> The only problem is that the C functions are legacy and therefore not
> multi-threaded. In other words, if several people simultaneously call the
> service, they might cause the C code to crash.
>
> What is the best way to make the Axis2 service handle simultaneous calls
> without crashing or crashing the C code?
>
> Many thanks.
>wa
> p
>
Just invoke a thread in your service. A few lines of code like this
(untested) would work I think, if I understand correctly ... lots of
options also on how to setup queues, etc. One thing that comes to mind
is I do this type of thing with Spring controlled service beans, which
are loaded as singletons IIRC - that I know works. ymmv. Anyways, hope
this helps.
public class MyService {
private static final ThreadFactory factory = new ThreadFactory();
private ExecutorService executorService =
Executors.newSingleThreadExecutor(factory);
private AtomicBoolean isRunning = new AtomicBoolean();
public OMElement doMyJob(OMElement element) throws XMLStreamException {
execute();
}
public void execute() throws Exception {
try {
if (isRunning.compareAndSet(false, true)) {
// execute asynchronously and return immediately
executorService.execute(new Runnable() {
public void run() {
try {
// put code here
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
});
}
} finally {
isRunning.set(false);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]