Jak ponownie rzucić wyjątek w AspectJ wokół doradzać
Mam kilka metod, które zgłaszają wyjątek, i chcę użyć AspectJ wokół, aby obliczyć czas wykonania i jeśli zostanie zgłoszony jakiś wyjątek i zalogować się do dziennika błędów i kontynuować przepływ, ponownie rzucając wyjątek.
Próbowałem to osiągnąć, ale zaćmienie mówi „Nieobsługiwany typ wyjątku”.
Kodeks przeciwko komu należy użyć: -
<code>public interface Iface { public void reload() throws TException; public TUser getUserFromUserId(int userId, String serverId) throws ResumeNotFoundException, TException; public TUser getUserFromUsername(String username, String serverId) throws ResumeNotFoundException, TException; public TResume getPartialActiveProfileFromUserId(int userId, int sectionsBitField, String serverId) throws ResumeNotFoundException, UserNotFoundException; public TResume getPartialActiveProfileFromUsername(String username, int sectionsBitField, String serverId) throws ResumeNotFoundException, UserNotFoundException, TException; } </code>
Aspekt koduj: -
<code>public aspect AspectServerLog { public static final Logger ERR_LOG = LoggerFactory.getLogger("error"); Object around() : call (* com.abc.Iface.* (..)) { Object ret; Throwable ex = null; StopWatch watch = new Slf4JStopWatch(); try { ret = proceed(); }catch (UserNotFoundException e) { ex = e ; throw e ; } catch (ResumeNotFoundException e) { ex = e ; throw e ; } catch (Throwable e) { ex = e ; throw new RuntimeException(e); }finally{ watch.stop(thisJoinPoint.toShortString()); if(ex!=null){ StringBuilder mesg = new StringBuilder("Exception in "); mesg.append(thisJoinPoint.toShortString()).append('('); for(Object o : thisJoinPoint.getArgs()) { mesg.append(o).append(','); } mesg.append(')'); ERR_LOG.error(mesg.toString(), ex); numEx++; } } return ret; } } </code>
Pomóż, dlaczego ten aspekt nie działa.