/* Copyright 2009 Ramnivas Laddad Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package ajia.transaction; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import org.springframework.transaction.interceptor.DefaultTransactionAttribute; public class TransactionAttributeWithRollbackRules extends DefaultTransactionAttribute { Collection<Class<? extends Throwable>> rollbackFor = new ArrayList<Class<? extends Throwable>>(); Collection<Class<? extends Throwable>> noRollbackFor = new ArrayList<Class<? extends Throwable>>(); public void addRollbackFor(Class<? extends Throwable>[] rollbackFor) { Collections.addAll(this.rollbackFor, rollbackFor); } public void addNoRollbackFor(Class<? extends Throwable>[] noRollbackFor) { Collections.addAll(this.noRollbackFor, noRollbackFor); } @Override public boolean rollbackOn(Throwable ex) { if (ex instanceof RuntimeException || ex instanceof Error) { for (Class<? extends Throwable> t : this.noRollbackFor) { if (t.isAssignableFrom(ex.getClass())) { return false; } } return true; } else { for (Class<? extends Throwable> t : this.rollbackFor) { if (t.isAssignableFrom(ex.getClass())) { return true; } } return false; } } }