-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: "Out of Memory" storing Files using Tomcat and Pos
PostPosted: Tue Oct 12, 2004 6:07 pm 
Newbie

Joined: Wed Jun 02, 2004 12:50 pm
Posts: 3
Location: Central America
Hello,
I'm having problems storing files into a database. The main problem is that I have to upload the entire file to memory to pass it to the hibernate object.

I,m using a "bytea" colum in PostegreSQL to store the files.
So, I mapped that column using Binary.
When I generate the hibernate object, it expect a byte[] parameter.
When I convert the file to a byte[], all the file resides in memory and if there isn't enogut memory for it, Tomcat throws the "out of memory" error.
How can I do to store the file using hibernate without upload all the file in memory?

I'd appreciate some help.

Here is some information about my project:

Tomcat version: 5

Hibernate version: 2

Mapping documents:

<hibernate-mapping package="xxx.File">
<class name="File" table="file">
<id name="fileId" type="java.lang.Long" column="file_id">
<generator class="sequence">
<param name="sequence">sec_file</param>
</generator>
</id>
<property name="imagen" column="imagen" type="binary" not-null="true" />
</hibernate-mapping>

Code between sessionFactory.openSession() and session.close():
...
File imagen = new File(item.getImage());
FileInputStream is = new FileInputStream(imagen);
BufferedInputStream bstr = new BufferedInputStream(is);
int size = (int) imagen.length();
byte[] data = new byte[size];
bstr.read( data, 0, size );
bstr.close();
FileDAO fdao = new FileDAO(HibernateSession.CFG_BD); //MyFile Object Factory
MyFile mf= new MyFile(data);//Hinerit database logic from general DB Handler
long id = fdao.save(mf);
.....

Full stack trace of any exception that occurs:
java.lang.RuntimeException: java.lang.OutOfMemoryError
at mysite.model.MyFileModel.mnt(TemaModel.java:317)
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 mysite.model.MyFileModel.processPath(TemaModel.java:178)
at mysite.servlets.Controller.doGet(Controller.java:110)
at mysite.servlets.Controller.doPost(Controller.java:129)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at cr.go.ice.uentp.internetpublico.kioskadmin.filters.DBFilter.doFilter(DBFilter.java:60)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:233)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:587)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:184)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:567)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:833)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:732)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:619)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:688)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.OutOfMemoryError

Name and version of the database you are using:
PostgreSQL 7.4

_________________
Thank you!


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.