|
From: <php...@li...> - 2009-07-03 13:06:46
|
May be. But any exception crossing the php/java container must be declared.
Otherwise the behaviour is unspecified.
The problem is that the bridge may "inline" the method call to gain speed.
If you declare that a method doesn't throw an exception and the first method
invocation indeed runs okay, the method is "inlined" and doesn't generate a
round trip anymore.
The option prefer values disables this, making the comm. about 20 times
slower.
Ejb for example has a similar requirement for exceptions crossing the ejb
container (e.g. undeclared RuntimeExceptions immediately kill the current
transaction), I think JEE programmers will not run into this problem.
--Everybody else should read the JavaException API documentation, or they
will learn this the hard way. :)
Regards,
Jost Boekemeier
3. Jul 2009 2:08 nachm. schrieb am <
php...@li...>:
Ok, but then it is not working consistently. RuntimeException is thrown in
first case below, but not in third.
try { $val = $javaObjOrClass->throwIfTrue(true) } catch(Exception $ex)
{//catched nicely here } tr...
And consistent or not with other containers, I think this makes life much
harder on PHP side. To be safe one should do in some cases something like:
try {
$obj = $java->methodA($arg);
$rex = java_values($obj);
if ($rex instanceof Exception)
throw $rex;
$val = $obj->methodB();
...
} catch (Exception $ex) {
// handle exception
}
instead of:
try {
$val = $java->methodA($arg)->methodB();
...
} catch (Exception $ex) {
// handle exception
}
---
Juha
Undeclared exceptions are not handled. This is consistent with other JEE
containers. [Undeclared]...
|