Bonne question, Ant
Je sais que vous voulez lancer une exception de base de données, mais quand il se produit l'application, dans la plupart du temps, ne parvient pas à rétablir son état initial ou il ne sait pas comment s'en remettre. Il doit donc être traité comme une exception d'exécution. Quelques problèmes dans la base de données des exceptions comprennent
échec de la connexion de base de données
- requête est mal
tableau
- ou d'une colonne n'existe pas
Ci-dessus vous voyez l'application est pas être en mesure de rétablir l'état initial . Si vous pensez qu'il est possible de restaurer son état initial , vous devez utiliser une exception d'application. Le client recevra la même exception d'application générée par votre méthode métier. Si vous voulez être en mesure d'obtenir l'exception exacte lancée par votre méthode d'entreprise, vous avez deux choix:
- Utilisez un motif de délégué commercial pour accéder à votre EJB
Comme vous le savez, exception d'exécution est enveloppées par un EDBException, de sorte que vous shold utiliser quelque chose comme
supposons que vous avez cette session bean sans état
@Stateless
public class BeanImpl implements Bean {
public void doSomething() {
try {
// some code
} catch(SomeException e) {
throw new EJBException(e);
}
}
}
donc y OU envelopper votre grain de session par l'intermédiaire d'un délégué commercial
public class BeamBusinessDelegate implements Bean {
// your stateless session bean goes here
private Bean bean;
public BeamImpl() {
InitialContext i = new InitialContext();
bean = (Bean) i.lookup(<GLOBAL_JNDI_ADDRESS_OR_RELATIVE_ENVIRONMENT_NAMING_CONTEXT_ADDRESS>);
}
public void doSomething() {
try {
bean.doSomething()
} catch(EJBException e) {
throw e.getCause();
}
}
}
Ou vous pouvez étend EDBException selon vos besoins
public class DatabaseException extends EJBException {
}
Donc, dans votre méthode d'affaires
@Stateless
public class BeanImpl implements Bean {
public void doSomething() {
try {
// some code
} catch(SomeException e) {
throw new DatabaseException();
}
}
}
Cordialement,
J'ai le même problème, pouvez-vous modifier votre réponse avec un échantillon de code? –