`
kyvin
  • 浏览: 32725 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

框架移植后出现上传失败的问题

阅读更多
最近我从原先的webwork+hibernate框架中转到现在的webwork+hibernate+spring框架,当处理上传的时候我采用了原先的方法的来处理上传,
vm文件
<form action="souupload.action" method="post" enctype="multipart/form-data" name="uploadsource">
  文件名:<input name="fileName" type="text" class="btn_grey">
  <input type="hidden" name="id" value="$!req.getSession().getAttribute("customer").id">
  <input name="EDITFILE" type="file"  class="btn_grey">
  <input type="submit" name="Submit" value="上传文件" class="btn_grey">
  <input type="button" value=" 退 出 " class="btn_grey" onclick="javaScript:window.location.href='index.action';" >
</form>

上传Action中的代码如下:
FileUploadAction
	private int fileId=-1;
    private int id;
    private String fileName;
	private EricFileAware ericfileAware;
	
	public String execute()throws Exception{
		
		try {
			HttpServletRequest req = ServletActionContext.getRequest();
			MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) req;
			File doc = null;
			try {
				File[] docs = wrapper.getFiles("EDITFILE");
				System.out.println(docs.length);
				if (docs != null && docs.length > 0) {
					doc = docs[0];
					FileInputStream in = new FileInputStream(doc);
					Blob blob = Hibernate.createBlob(in);
					int fileSize = (int) doc.length();

					cn.kyvin.shop.webshop.object.EricFile ericFile=new cn.kyvin.shop.webshop.object.EricFile();
					if(this.fileId>0){
						
					}else{
						ericFile.setFileName(this.fileName);
						ericFile.setFileSize(new Integer(fileSize));
						ericFile.setFileData(blob);
						this.ericfileAware.insertFile(ericFile);
					}
				}
			} finally {
				doc.delete();
			}
			this.addActionMessage("^o^EricZone资源上传成功^o^");
			return SUCCESS;
		} catch (Exception e) {
			return INPUT;
		}

	}

FileAware接口中方法如下:
...
	public EricFile insertFile(EricFile file) throws ServicesException;

Fileimpl实现类中代码如下:
该实现类扩展了一下 HibernateDaoSupport 这个类中的方法

	public EricFile insertFile(EricFile file) throws ServicesException {
		try {
			Session session =this.getSession();
			Transaction tx = null;
			byte[] buffer = new byte[1];
			buffer[0] = 1;
			try {
				tx = session.beginTransaction();
				Blob blob = file.getFileData();
				file.setFileData(Hibernate.createBlob(buffer));
				session.save(file);
				session.flush();
				session.refresh(file, LockMode.UPGRADE);
				BLOB blobTemp = (BLOB) file.getFileData();
				OutputStream out = blobTemp.getBinaryOutputStream();
				InputStream in = blob.getBinaryStream();
				byte[] data = new byte[(int) in.available()];
				in.read(data);
				out.write(data);
				out.flush();
				in.close();
				out.close();
				session.flush();
				tx.commit();
			} catch (Exception he) {
				if (tx != null)
					tx.rollback();
			} finally {
				session.close();
			}
		} catch (HibernateException he) {
		}
		return file;
	}

通过这些程序我上传到oracle数据库中的时候会出现这个错误,当然hbm.xml文件肯定配置没问题
错误提示:
09:15:30,156 ERROR [http-8562-Processor23] SessionImpl:2400 - Could not synchronize database state with session
09:15:30,203 ERROR [http-8562-Processor23] JDBCTransaction:108 - Could not toggle autocommit
net.sf.hibernate.HibernateException: Session is closed

出现这样的问题该如何解决 我也想过通过this.getSessionFactory.openSession来打开session,可是一点用都没有
分享到:
评论
4 楼 kyvin 2007-03-26  
我是这样配的 看来真的得看看spring了 对你的配置有些许不懂
	<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>


	<bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="insert*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="delete*">PROPAGATION_REQUIRED</prop>
				<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
			</props>
		</property>
	</bean>	

同时我有尝试过把那段去掉 但是依旧出现类似的错误:
Session is closed; nested exception is net.sf.hibernate.HibernateException: Session is closed
net.sf.hibernate.HibernateException: Session is closed

我先尝试用你的试试^o^
3 楼 andyandyandy 2007-03-26  
我看你代码中有
tx = session.beginTransaction();

如果用spring配的事务,这些应该就不用了啊!

<tx:annotation-driven/>

	<aop:aspectj-autoproxy/>

	<aop:config proxy-target-class="true">
		<aop:advisor pointcut="execution(* org.service.*Manager.*(..))" advice-ref="txAdvice"/>
	</aop:config>

	<tx:advice id="txAdvice">
		<tx:attributes>
			<tx:method name="get*" read-only="true"/>
			<tx:method name="find*" read-only="true"/>
			<tx:method name="*"/>
		</tx:attributes>
	</tx:advice>

2 楼 kyvin 2007-03-26  
刚使用spring不久,我好像已经把事务都已经交给了spring来处理,在配置文件中有做配置,刚修改了下 但是总是在运行到 session.flush();
session.refresh(file, LockMode.UPGRADE);的时候会出现事务回滚掉 能贴出你想法的代码吗 谢谢了
1 楼 andyandyandy 2007-03-26  
把事务处理交给spring来做试试

相关推荐

    SSM框架图片上传与显示

    7. **安全考虑**: 除了基本的文件上传功能,还需要考虑安全问题,如文件类型检查(只允许上传图片)、文件大小限制(防止大文件占用过多服务器资源)以及防止恶意文件上传。 8. **异常处理**: 在处理文件上传和...

    文件上传js和jar文件

    FastDFS是一个开源的、高性能的、轻量级的分布式文件系统,它对文件进行管理,包括文件存储、文件同步、文件访问(文件上传、文件下载)等功能,解决了大容量存储和负载均衡的问题。fdfsclient.jar包含了与FastDFS...

    RT-Thread1.2.0.rar_STM32 RT-Thread_STM32 SPI TF卡_STM32的SDIO例程_s

    晟睿STM32F103ZET6开发板跑RT Thread,内核为1.2.0,GUI为0.8版本,可以下载到板子上跑。 1、TFT根据RT Thread驱动框架编写,FSMC总线,可直接用。适合常用的9320、9325、...(网络问题不确定是否上传成功,再上传一次)

    把图片以数据的形式保存在数据库 上传图片

    本篇文章将深入探讨如何在S2SH(Struts2 + Spring + Hibernate)框架下实现这个功能,并涉及数据流的概念以及上传图片的相关技术。 首先,S2SH是一个经典的Java Web开发框架组合,由Struts2负责前端MVC(Model-View...

    各种ASP.NET JAVA网盘源码收集

    这种方式可以有效防止因网络问题导致的文件上传失败,并降低对单次上传请求的内存和带宽需求。 在提供的源码包中,如"Asp.net网络硬盘系统源码.rar"和"netdisk.zip"可能包含了完整的ASP.NET实现的网盘系统源代码,...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。 4、 系统的数据要求:1、数据录入和处理的准确性和实时性。2、数据的一致性与完整性。3、数据的共享与独立性。 2.2. 系统的可行性...

    ASP.NET源码——Excel导入SQLserver源码.zip

    7. **用户反馈**:在数据导入完成后,向用户显示结果,告知导入成功还是失败,以及可能遇到的问题。 学习这个源码可以帮助开发者掌握如何在ASP.NET中处理文件上传、读取Excel数据以及与SQL Server交互。对于需要...

    yapuyapupload

    9. **错误处理和日志记录**:完善的文件上传系统应该包含错误处理机制,当上传失败时,能给用户清晰的反馈,同时在后台记录详细的日志,方便开发者排查问题。 10. **合规性**:在某些行业,如医疗保健或金融,文件...

    java 分布式存储实例

    7. **学习挑战**: 由于“操作起来有点麻烦”,这意味着学习者需要投入更多时间和精力去理解系统的内部运作,这包括调试代码、阅读文档和解决问题,这对深化理解分布式存储有极大的帮助。 8. **新手教程**: 对于Java...

    dotnetcore实现metaweblog代理

    用.NET Core实现Metaweblog代理,意味着我们可以利用其强大的性能、灵活性和可移植性,构建一个适用于多种操作系统的代理服务。 1. **XML-RPC库**:在.NET Core项目中,`xml-rpc.net.2.0.0`库用于实现XML-RPC协议,...

    Upload-gg-drive

    3. **错误处理与重试机制**:在上传过程中,网络问题可能导致失败,因此项目可能包含健壮的错误处理和自动重试机制。 4. **文件分块上传**:对于大文件,可能采用了分块上传策略,以减少单次上传的数据量,提高上传...

    DLOG4J安装手册1

    - **会话失效处理**: 解决了因会话失效而导致的日记或评论提交失败的问题。 - **访问统计**: 改进了网站的访问统计方式,并增加了查看网站间的链接明细功能。 - **权限细化**: 新增密友角色,可以为密友指定允许查看...

    netCAsyncSocket_class.rar_foundation

    在.NET框架中,MFC(Microsoft Foundation Class Library)是一个强大的C++类库,它为Windows应用程序开发提供了丰富的功能。在MFC中,网络编程被简化,使得开发者可以更轻松地处理套接字通信,尤其是利用Windows的...

    linux c 语言编写的ftp服务器程序

    FTP(File Transfer Protocol)是一种基于TCP/IP协议的网络文件传输协议,用于在网络上进行文件的上传和下载。在Linux系统中,使用C语言编写FTP服务器程序能够深入理解网络编程的底层原理,同时也具备高度的灵活性...

    Grails基础教程.pdf

    开发者在进行Web应用开发时常常需要面对复杂的框架配置、繁琐的编码工作以及缓慢的开发周期等问题。 **1.2 Web 2.0时代** 进入Web 2.0时代后,互联网应用变得更加动态、交互性强。这一时期的典型特征包括社交媒体...

Global site tag (gtag.js) - Google Analytics