ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
808
808
EMPFEHLEN
-
Hallo zusammen,
ich habe folgendes Problem. Tritt beim Ausführen der Methode indiziereImage(..) eine Exception auf wird kein Rollback durchgeführt. Langsam fällt mir nichts mehr ein, was ich noch ausprobieren könnte um die Transaktion samt Rollback Richtig ans laufen zu bekommen. :( Ich finde den Fehler einfach nicht.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
package de.beko.imagemanager.service.impl; import java.io.File; import java.sql.SQLException; import javax.management.RuntimeErrorException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.transaction.interceptor.TransactionAspectSupport; import de.beko.imagemanager.ctrl.interfaces.IDirectoryScanner; import de.beko.imagemanager.dao.interfaces.IImageDAO; import de.beko.imagemanager.model.impl.ImageImpl; import de.beko.imagemanager.model.interfaces.IImage; import de.beko.imagemanager.model.interfaces.ITag; import de.beko.imagemanager.service.interfaces.IImageService; public class ImageServiceImpl implements IImageService { private final static Logger _log = LoggerFactory.getLogger(ImageServiceImpl.class); public ImageServiceImpl(){} public IImageDAO getImageDAO() { return _imageDAO; } public void setImageDAO(IImageDAO imageDAO) { _imageDAO = imageDAO; } private void addTag(ITag tag){ _log.debug("addTag( tag:{} )", tag); long tagId = _imageDAO.getTagId(tag.getName()); if(tagId == -1){ _imageDAO.addTag(tag.getName()); }else{ _log.debug("Tag: {} existiert bereits", tag.getName()); } } @Override public void indiziereImage(IImage image) { _log.info("indiziereImage( image:{} )", image.getFile().getAbsolutePath()); File file = image.getFile(); _log.debug("addImage( file:{} )", file.getAbsolutePath()); try{ long id = _imageDAO.getImageId(file.getAbsolutePath()); _log.debug("Image existierts bereits: ID {}. Insert wird übersprungen", id); }catch(EmptyResultDataAccessException e){ _imageDAO.addImage(file); } long imageId = _imageDAO.getImageId(image.getFile().getAbsolutePath()); _imageDAO.clearTagsForImage(image.getId()); long tagId; for(ITag tag : image.getTags()){ addTag(tag); tagId = _imageDAO.getTagId(tag.getName()); _imageDAO.addImageTag(imageId, tagId); } testTransaction(); } public void testTransaction(){ throw new RuntimeException(); } }
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:aop = "http://www.springframework.org/schema/aop" xmlns:tx = "http://www.springframework.org/schema/tx" xmlns:context = "http://www.springframework.org/schema/context" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <bean id="directoryScanner" class="de.beko.imagemanager.ctrl.impl.DirectoryScanerImpl"> <property name="fileFilter" ref="fileFilter"/> <property name="fileEvents"> <list> <ref bean="imageFileIndizierenEvent"/> </list> </property> </bean> <bean id="imageFileIndizierenEvent" class="de.beko.imagemanager.ctrl.impl.ImageServiceBasedImageFileIndizierenEvent"> <property name="imageService" ref="imageService"/> </bean> <bean id="fileFilter" class="de.beko.imagemanager.ctrl.impl.ExtensionBasedFileFilter"> <property name="acceptedExtensions" value="jpg,jpeg"/> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource"> <property name="driverClassName" value="org.sqlite.JDBC"/> <property name="url" value="jdbc:sqlite:I:/Programmieren/Projekte/ImageManager/ImageManager/config/dev/ImageViewer.s3db"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="imageDAO" class="de.beko.imagemanager.dao.impl.ImageDAOImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"/> </bean> <bean id="imageService" class="de.beko.imagemanager.service.impl.ImageServiceImpl"> <property name="imageDAO" ref="imageDAO"/> <property name="directoryScanner" ref="directoryScanner"/> </bean> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="get*" read-only="true" rollback-for="java.lang.Exception"/> <tx:method name="*" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="indiziereImageServiceOperation" expression="execution(* de.beko.imagemanager.service.impl.ImageServiceImpl.indiziere*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="indiziereImageServiceOperation"/> </aop:config> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> </beans>
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
20:13:16.382 [main] DEBUG de.beko.imagemanager.ImageManagerMain - Starte Anwendung 20:13:16.413 [main] INFO org.springframework.context.support.FileSystemXmlApplicationContext - Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@3782da3d: startup date [Wed Apr 13 20:13:16 CEST 2011]; root of context hierarchy 20:13:16.460 [main] INFO org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from file [I:\Programmieren\Projekte\ImageManager\ImageManager\config\dev\imagemanager_service.xml] 20:13:16.694 [main] INFO org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@6d372656: defining beans [directoryScanner,imageFileIndizierenEvent,fileFilter,dataSource,jdbcTemplate,imageDAO,imageService,txAdvice,org.springframework.aop.config.internalAutoProxyCreator,indiziereImageServiceOperation,org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0,txManager]; root of factory hierarchy 20:13:16.865 [main] INFO org.springframework.jdbc.datasource.SingleConnectionDataSource - Loaded JDBC driver: org.sqlite.JDBC 20:13:16.928 [main] DEBUG de.beko.imagemanager.ImageManagerMain - Clear Tables 20:13:17.536 [main] INFO org.springframework.jdbc.datasource.SingleConnectionDataSource - Established shared JDBC Connection: org.sqlite.Conn@4c650892 20:13:17.552 [main] DEBUG de.beko.imagemanager.service.impl.ImageServiceImpl - indiziereImage( image:C:\Temp\TestDockland_20110308_0008.2.jpg ) 20:13:17.552 [main] INFO de.beko.imagemanager.service.impl.ImageServiceImpl - indiziereImage( image:C:\Temp\TestDockland_20110308_0008.2.jpg ) 20:13:17.552 [main] DEBUG de.beko.imagemanager.service.impl.ImageServiceImpl - addImage( file:C:\Temp\TestDockland_20110308_0008.2.jpg ) 20:13:17.552 [main] DEBUG de.beko.imagemanager.dao.impl.ImageDAOImpl - getImageId( C:\Temp\TestDockland_20110308_0008.2.jpg ) 20:13:17.568 [main] DEBUG de.beko.imagemanager.dao.impl.ImageDAOImpl - SELECT id FROM image WHERE full_filename = C:\Temp\TestDockland_20110308_0008.2.jpg 20:13:17.600 [main] DEBUG de.beko.imagemanager.dao.impl.ImageDAOImpl - addImage( file:C:\Temp\TestDockland_20110308_0008.2.jpg ) 20:13:17.600 [main] DEBUG de.beko.imagemanager.dao.impl.ImageDAOImpl - INSERT INTO IMAGE (full_filename, last_modified) values (C:\Temp\TestDockland_20110308_0008.2.jpg, 0) 20:13:17.600 [main] DEBUG de.beko.imagemanager.dao.impl.ImageDAOImpl - getImageId( C:\Temp\TestDockland_20110308_0008.2.jpg ) 20:13:17.600 [main] DEBUG de.beko.imagemanager.dao.impl.ImageDAOImpl - SELECT id FROM image WHERE full_filename = C:\Temp\TestDockland_20110308_0008.2.jpg 20:13:17.615 [main] DEBUG de.beko.imagemanager.dao.impl.ImageDAOImpl - clearTags() 20:13:17.615 [main] DEBUG de.beko.imagemanager.dao.impl.ImageDAOImpl - DELETE FROM image_tags WHERE image_id = -1 20:13:17.615 [main] DEBUG de.beko.imagemanager.dao.impl.ImageDAOImpl - DELETE FROM image_tags WHERE image_id = ? Exception in thread "main" java.lang.RuntimeException at de.beko.imagemanager.service.impl.ImageServiceImpl.testTransaction(ImageServiceImpl.java:113) at de.beko.imagemanager.service.impl.ImageServiceImpl.indiziereImage(ImageServiceImpl.java:107) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy0.indiziereImage(Unknown Source) at de.beko.imagemanager.ImageManagerMain.main(ImageManagerMain.java:69)
-
15.06.11 02:11 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
hmmm... wenn du get* Methoden mit read-only=true deklarierst... was möchtest du denn noch im Roll-Back machen? Btw. hast du für inidiziereImage(...) überhaupt Rollback konfiguriert?
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Spring Transaction
Von chrissi78 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 25.09.09, 19:27 -
Hibernate, Spring --> kein Rollback
Von yogitobi im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 24.03.09, 17:58 -
Hibernate - Transaction Problem
Von y0dA im Forum JavaAntworten: 3Letzter Beitrag: 07.11.07, 08:42 -
problem mit mysql-"start transaction"-syntax mit php
Von Bubblez im Forum PHPAntworten: 1Letzter Beitrag: 22.08.05, 20:29 -
EJB Container Transaction macht keine Rollback !
Von GartenUmgraben im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 10.06.05, 15:29





Zitieren

Login





