danch wrote: > EJBException is actually a runtime exception that you use to complain to > the container when something _really_ wacky happens that you want to > call a system error. The EJB spec defines a business exception (AKA > Application Exception) as a different category of exception, with > different behavior. > > To throw a business exception, define separate classes for them, > extending RemoteException, then replace your 'throws EJBException' > declaration with your newly defined exception.
Hi, sorry to interfere, but let me help out with a "not". The above has to be "_not_ extending RemoteException". See the spec (Enterprise JavaBeans 2.0, Final Release, 18.1.1): "An application exception class must be a subclass (direct or indirect) of java.lang.Exception. An application exception class must not be defined as a subclass of the java.lang.RuntimeException or of the java.rmi.RemoteException." -Olaf > the biggest difference in the container's behavior (aside from passing > the proper exception back to the client) is that when you throw an > EJBException, the container marks your transaction Rollback-only, while > it _doesn't_ for application exceptions. If you want your transaction > rolled back, you'll need to call setRollbackOnly yourself (on the > session context). > > -danch > > Bill Pfeiffer wrote: > > > I am having a problem with JBoss 2.4.4 and Tomcat 4.0.1. When I > > encounter a business logic problem (or sql problem, etc) and want to > > send it back to the client, I create and throw an EJBException. The > > problem I am encounter is that I actually recieve, on the client > > (Tomcat) end, an UndeclaredThrowableException which contains no info on > > the original error. > > > > > > > > Probably related is the fact that I get these warnings when deploying my > > beans: > > > > > > > > ------------------------------------------------------ > > > > [ERROR,ContainerFactory] > > Bean : EBSecurityUser > > Method : public abstract String getPassword() throws RemoteException, > > EJBExcepti > > on > > Section: 9.2.7 > > Warning: The exceptions thrown by methods in the remote interface must > > be valid > > types for RMI/IIOP > > > > > > > > [ERROR,ContainerFactory] > > Bean : SBWebSessMgr > > Method : public abstract SBWebSessMgr create() throws CreateException, > > EJBExcept > > ion, RemoteException > > Section: 6.10.6 > > Warning: The method return values in the home interface must be of valid > > types f > > or RMI/IIOP. > > > > > > > > [ERROR,ContainerFactory] > > Bean : SBEspeedUtility > > Method : public abstract SBCaseLockHome getSbCaseLockHome() throws > > RemoteExcepti > > on > > Section: 6.10.5 > > Warning: The method return values in the remote interface must be of > > valid types > > for RMI/IIOP. > > > > --------------------------------------- > > > > > > > > > > > > It appears the I am not returning throwing valid types for RMI/IIOP. > > Any ideas what would cause this? What constitutes a valid RMI/IIOP > > type or what would cause my objects not be considered valid RMI/IIOP types? > > > > > > > > Thanks for any assistance, > > > > > > > > Bill Pfeiffer > > > > _______________________________________________ > JBoss-user mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/jboss-user _______________________________________________ JBoss-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-user