1

例外がスローされたくないときに例外がスローされるという問題があります。ここに私の2つのクラスがあります:

public List<ErrorResponse> validate()
{
    List<ErrorResponse> errors = new ArrayList<ErrorResponse>();

    try
    {
        Users user = userManager.findByCompany(job.getCompanyId().getId());
    }
    catch (Exception e)
    {
        ErrorCodes err = ErrorCodes.CODE101;
        errors.add(new ErrorResponse(err.getCode(), err.getMessage()));
    }
}


public Users findByCompany(Integer companyId) 
        throws UserNotFoundException, UsernameNotProvidedException
{
    if (username == null)
    {
        throw new UserUsernameNotProvidedException();
    }

    TypedQuery<Users> query = em.createNamedQuery("Users.findByCompany", Users.class);
    query.setParameter("companyId", companyId);
    try
    {
        Users result = query.getSingleResult();
        return result;
    }
    catch (NoResultException e)
    {
        throw new UserNotFoundException();
    }
    catch (NonUniqueResultException e)
    {
        throw new UserNotFoundException();
    }
    catch (Exception e)
    {
        throw new UserNotFoundException();
    }
}

わかりました-validate()メソッドは(別のクラスで)findByCompany()メソッドを呼び出します。スローされる例外は、findByCompany() メソッドのランタイム 'NonResultException' (正しい) です。これは同じメソッドで CAUGHT され、アプリケーション例外 'UserNotFoundException' がスローされます。これは、validate() メソッドに伝播され、「catch(Exception e)」でキャッチされるはずです。ただし、代わりに、validate() の「catch(Exception e)」が代わりに「EJBTransactionRolledBackException」をキャッチしています。これは私が望むものではありません。結果が見つからない場合、アプリケーションは続行する必要があります。

確かに、実行時例外をキャッチしてアプリケーション例外をスローすることで (また、validate() メソッドでそれをキャッチすることで)、ロールバックを回避する必要がありますか?

前もって感謝します。

4

1 に答える 1

2

RuntimeExceptionまたはRemoteExceptionで注釈が付けられていない例外@ApplicationExceptionは、システム例外と見なされるため、 でラップされますEJBException

チェックされた Exception をスローする (おそらくそうではない) か、例外クラスに注釈を付けることができます。

これはデプロイメント記述子 XML 内で構成することもできますが、詳細はわかりません。

于 2013-11-07T10:04:47.463 に答える