You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@turbine.apache.org by Mitch Christensen <mi...@informatixinc.com> on 2002/11/18 17:44:08 UTC

Problem writing to TURBINE_USER.OBJECTDATA

Hey,

I'm currently saving user preferences (10 key/value pairs), and some
(~15-20) HashTables with about 7 key/val pairs each to user.setPerm().  This
was working fine, but suddenly stopped working.  I noticed the following
exception being thrown.

The datatype for the OBJECTDATA column is LONG RAW, which supposedly
supports up to 4gig of data.  I suspect that the '4537' number in the
exception may be my actual data size.  If so, this if far from what I would
consider "excessive" for storage via setPerm().

I really don't have time to crack the torque/village code right now, so any
pointers would be greatly appreciated.

Any ideas?

-Mitch


java.sql.SQLException: Data size bigger than max size for this type: 4537
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)
        at oracle.jdbc.ttc7.TTCItem.setArrayData(TTCItem.java:99)
        at
oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:1761)
        at
oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.j
ava:855)
        at
oracle.jdbc.driver.OraclePreparedStatement.setBytes(OraclePreparedStatement.
java:1812)
        at com.workingdogs.village.Value.setPreparedStatementValue(Unknown
Source)
        at com.workingdogs.village.Record.saveWithUpdate(Unknown Source)
        at com.workingdogs.village.Record.save(Unknown Source)
        at com.workingdogs.village.Record.save(Unknown Source)
        at
org.apache.torque.util.BasePeer.insertOrUpdateRecord(BasePeer.java:891)
        at org.apache.torque.util.BasePeer.doUpdate(BasePeer.java:1812)
        at org.apache.torque.util.BasePeer.doUpdate(BasePeer.java:1711)
        at
org.apache.turbine.om.security.peer.TurbineUserPeer.doUpdate(TurbineUserPeer
.java:482)
        at
org.apache.turbine.services.security.db.DBUserManager.store(DBUserManager.ja
va:267)
        at
org.apache.turbine.services.security.BaseSecurityService.saveUser(BaseSecuri
tyService.java:374)
        at
org.apache.turbine.services.security.TurbineSecurity.saveUser(TurbineSecurit
y.java:256)
        at
org.apache.turbine.om.security.TurbineUser.valueUnbound(TurbineUser.java:653
)
        at
jrun.servlet.session.JRunSession.setAttribute(JRunSession.java:278)
        at jrun.servlet.session.JRunSession.putValue(JRunSession.java:254)
        at
org.apache.turbine.services.rundata.DefaultTurbineRunData.save(DefaultTurbin
eRunData.java:1355)
        at
org.apache.turbine.modules.actions.LogoutUser.doPerform(LogoutUser.java:118)
        at org.apache.turbine.modules.Action.perform(Action.java:87)
        at
org.apache.turbine.modules.ActionLoader.exec(ActionLoader.java:122)
        at org.apache.turbine.Turbine.doGet(Turbine.java:509)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
        at
jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
        at
jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:241)
        at
jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:527)
        at jrun.servlet.http.WebService.invokeRunnable(WebService.java:172)
        at
jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:
348)
        at
jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:451
)
        at
jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:29
4)
        at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
rethrown as org.apache.torque.TorqueException: Data size bigger than max
size for this type: 4537



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


RE: Problem writing to TURBINE_USER.OBJECTDATA

Posted by Mitch Christensen <mi...@informatixinc.com>.
This seems accurate as my initial tests do indicate that that the '4537'
number *is* the size of my user data.  If I manipulate the amount data
stored in user.perm, I can reduce this number.  When it drops below 4,000,
everything works fine.

I hate to nit-pick, but shouldn't the 4k limit apply to varchar2 fields,
*not* long raw. :)

If this is what is happening, then this means is that user.perm in 2.2b3 is
useless for anything larger than 4k.  A significant (read "showstopper") bug
IMO.  I'm not sure if the bug is in Turbine proper, Village or Torque, as
I'm a bit fuzzy on where one ends and the other begins.

I will test this against 2.2rc1 as soon as I get a chance.  In the meantime,
if anyone can think of a work around *other* than extending TurbineUser, I
would greatly appreciate it.

Thanks for the response Quinton.

-Mitch

-----Original Message-----
From: Quinton McCombs [mailto:qmccombs@nequalsone.com]
Sent: Monday, November 18, 2002 9:00 AM
To: Turbine Users List
Subject: Re: Problem writing to TURBINE_USER.OBJECTDATA


If my memory serves me correctly, it is because Village uses the
setString( data ) method on the prepared statement.  The JDBC driver has
an upper limit of data that it is willing to accept using setString().

I ran into this situation myself.  The way that I worked around it was
to extend TurbineUser.  I created more columns in the database table and
stopped using OBJECTDATA.


On Mon, 2002-11-18 at 10:44, Mitch Christensen wrote:
> Hey,
>
> I'm currently saving user preferences (10 key/value pairs), and some
> (~15-20) HashTables with about 7 key/val pairs each to user.setPerm().
This
> was working fine, but suddenly stopped working.  I noticed the following
> exception being thrown.
>
> The datatype for the OBJECTDATA column is LONG RAW, which supposedly
> supports up to 4gig of data.  I suspect that the '4537' number in the
> exception may be my actual data size.  If so, this if far from what I
would
> consider "excessive" for storage via setPerm().
>
> I really don't have time to crack the torque/village code right now, so
any
> pointers would be greatly appreciated.
>
> Any ideas?
>
> -Mitch
>
>
> java.sql.SQLException: Data size bigger than max size for this type: 4537
>         at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
>         at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)
>         at oracle.jdbc.ttc7.TTCItem.setArrayData(TTCItem.java:99)
>         at
>
oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:1761)
>         at
>
oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.j
> ava:855)
>         at
>
oracle.jdbc.driver.OraclePreparedStatement.setBytes(OraclePreparedStatement.
> java:1812)
>         at com.workingdogs.village.Value.setPreparedStatementValue(Unknown
> Source)
>         at com.workingdogs.village.Record.saveWithUpdate(Unknown Source)
>         at com.workingdogs.village.Record.save(Unknown Source)
>         at com.workingdogs.village.Record.save(Unknown Source)
>         at
> org.apache.torque.util.BasePeer.insertOrUpdateRecord(BasePeer.java:891)
>         at org.apache.torque.util.BasePeer.doUpdate(BasePeer.java:1812)
>         at org.apache.torque.util.BasePeer.doUpdate(BasePeer.java:1711)
>         at
>
org.apache.turbine.om.security.peer.TurbineUserPeer.doUpdate(TurbineUserPeer
> .java:482)
>         at
>
org.apache.turbine.services.security.db.DBUserManager.store(DBUserManager.ja
> va:267)
>         at
>
org.apache.turbine.services.security.BaseSecurityService.saveUser(BaseSecuri
> tyService.java:374)
>         at
>
org.apache.turbine.services.security.TurbineSecurity.saveUser(TurbineSecurit
> y.java:256)
>         at
>
org.apache.turbine.om.security.TurbineUser.valueUnbound(TurbineUser.java:653
> )
>         at
> jrun.servlet.session.JRunSession.setAttribute(JRunSession.java:278)
>         at jrun.servlet.session.JRunSession.putValue(JRunSession.java:254)
>         at
>
org.apache.turbine.services.rundata.DefaultTurbineRunData.save(DefaultTurbin
> eRunData.java:1355)
>         at
>
org.apache.turbine.modules.actions.LogoutUser.doPerform(LogoutUser.java:118)
>         at org.apache.turbine.modules.Action.perform(Action.java:87)
>         at
> org.apache.turbine.modules.ActionLoader.exec(ActionLoader.java:122)
>         at org.apache.turbine.Turbine.doGet(Turbine.java:509)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>         at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
>         at
> jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
>         at
> jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:241)
>         at
> jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:527)
>         at
jrun.servlet.http.WebService.invokeRunnable(WebService.java:172)
>         at
>
jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:
> 348)
>         at
>
jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:451
> )
>         at
>
jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:29
> 4)
>         at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
> rethrown as org.apache.torque.TorqueException: Data size bigger than max
> size for this type: 4537
>
>
>
> --
> To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
> For additional commands, e-mail:
<ma...@jakarta.apache.org>
>Quinton McCombs<
Strategic Planner, NEqualsOne
 1800 International Park Drive
 Suite 205
 Birmingham, AL 35243
p: 205.324.8005 x121  800.466.1337
 f: 205.324.7008
e: qmccombs@NEqualsOne.com
 www.NEqualsOne.com



--
To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
For additional commands, e-mail:
<ma...@jakarta.apache.org>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


RE: Problem writing to TURBINE_USER.OBJECTDATA

Posted by Mitch Christensen <mi...@informatixinc.com>.
Just wanted to remind everyone before I completely move off of this issue,
that the reason for this bug is because Village is using non-streaming JDBC
calls for OBJECTDATA.

*****All data stored in Oracle (9i) via User.setPerm() will fail to persist
once the data size exceeds 4kbytes.*****

Any Oracle users out there using User.setPerm() beware.  This is one of
those "down the road" symptoms.

I made local change to the Village code to use streaming calls to overcome
the problem, and posted the solution to the Village and Turbine-User groups.

-Mitch

-----Original Message-----
From: Quinton McCombs [mailto:qmccombs@nequalsone.com]
Sent: Monday, November 18, 2002 9:00 AM
To: Turbine Users List
Subject: Re: Problem writing to TURBINE_USER.OBJECTDATA


If my memory serves me correctly, it is because Village uses the
setString( data ) method on the prepared statement.  The JDBC driver has
an upper limit of data that it is willing to accept using setString().

I ran into this situation myself.  The way that I worked around it was
to extend TurbineUser.  I created more columns in the database table and
stopped using OBJECTDATA.


On Mon, 2002-11-18 at 10:44, Mitch Christensen wrote:
> Hey,
>
> I'm currently saving user preferences (10 key/value pairs), and some
> (~15-20) HashTables with about 7 key/val pairs each to user.setPerm().
This
> was working fine, but suddenly stopped working.  I noticed the following
> exception being thrown.
>
> The datatype for the OBJECTDATA column is LONG RAW, which supposedly
> supports up to 4gig of data.  I suspect that the '4537' number in the
> exception may be my actual data size.  If so, this if far from what I
would
> consider "excessive" for storage via setPerm().
>
> I really don't have time to crack the torque/village code right now, so
any
> pointers would be greatly appreciated.
>
> Any ideas?
>
> -Mitch
>
>
> java.sql.SQLException: Data size bigger than max size for this type: 4537
>         at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
>         at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)
>         at oracle.jdbc.ttc7.TTCItem.setArrayData(TTCItem.java:99)
>         at
>
oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:1761)
>         at
>
oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.j
> ava:855)
>         at
>
oracle.jdbc.driver.OraclePreparedStatement.setBytes(OraclePreparedStatement.
> java:1812)
>         at com.workingdogs.village.Value.setPreparedStatementValue(Unknown
> Source)
>         at com.workingdogs.village.Record.saveWithUpdate(Unknown Source)
>         at com.workingdogs.village.Record.save(Unknown Source)
>         at com.workingdogs.village.Record.save(Unknown Source)
>         at
> org.apache.torque.util.BasePeer.insertOrUpdateRecord(BasePeer.java:891)
>         at org.apache.torque.util.BasePeer.doUpdate(BasePeer.java:1812)
>         at org.apache.torque.util.BasePeer.doUpdate(BasePeer.java:1711)
>         at
>
org.apache.turbine.om.security.peer.TurbineUserPeer.doUpdate(TurbineUserPeer
> .java:482)
>         at
>
org.apache.turbine.services.security.db.DBUserManager.store(DBUserManager.ja
> va:267)
>         at
>
org.apache.turbine.services.security.BaseSecurityService.saveUser(BaseSecuri
> tyService.java:374)
>         at
>
org.apache.turbine.services.security.TurbineSecurity.saveUser(TurbineSecurit
> y.java:256)
>         at
>
org.apache.turbine.om.security.TurbineUser.valueUnbound(TurbineUser.java:653
> )
>         at
> jrun.servlet.session.JRunSession.setAttribute(JRunSession.java:278)
>         at jrun.servlet.session.JRunSession.putValue(JRunSession.java:254)
>         at
>
org.apache.turbine.services.rundata.DefaultTurbineRunData.save(DefaultTurbin
> eRunData.java:1355)
>         at
>
org.apache.turbine.modules.actions.LogoutUser.doPerform(LogoutUser.java:118)
>         at org.apache.turbine.modules.Action.perform(Action.java:87)
>         at
> org.apache.turbine.modules.ActionLoader.exec(ActionLoader.java:122)
>         at org.apache.turbine.Turbine.doGet(Turbine.java:509)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>         at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
>         at
> jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
>         at
> jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:241)
>         at
> jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:527)
>         at
jrun.servlet.http.WebService.invokeRunnable(WebService.java:172)
>         at
>
jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:
> 348)
>         at
>
jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:451
> )
>         at
>
jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:29
> 4)
>         at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
> rethrown as org.apache.torque.TorqueException: Data size bigger than max
> size for this type: 4537
>
>
>
> --
> To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
> For additional commands, e-mail:
<ma...@jakarta.apache.org>
>Quinton McCombs<
Strategic Planner, NEqualsOne
 1800 International Park Drive
 Suite 205
 Birmingham, AL 35243
p: 205.324.8005 x121  800.466.1337
 f: 205.324.7008
e: qmccombs@NEqualsOne.com
 www.NEqualsOne.com



--
To unsubscribe, e-mail:
<ma...@jakarta.apache.org>
For additional commands, e-mail:
<ma...@jakarta.apache.org>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Problem writing to TURBINE_USER.OBJECTDATA

Posted by Quinton McCombs <qm...@nequalsone.com>.
If my memory serves me correctly, it is because Village uses the
setString( data ) method on the prepared statement.  The JDBC driver has
an upper limit of data that it is willing to accept using setString().  

I ran into this situation myself.  The way that I worked around it was
to extend TurbineUser.  I created more columns in the database table and
stopped using OBJECTDATA.  


On Mon, 2002-11-18 at 10:44, Mitch Christensen wrote:
> Hey,
> 
> I'm currently saving user preferences (10 key/value pairs), and some
> (~15-20) HashTables with about 7 key/val pairs each to user.setPerm().  This
> was working fine, but suddenly stopped working.  I noticed the following
> exception being thrown.
> 
> The datatype for the OBJECTDATA column is LONG RAW, which supposedly
> supports up to 4gig of data.  I suspect that the '4537' number in the
> exception may be my actual data size.  If so, this if far from what I would
> consider "excessive" for storage via setPerm().
> 
> I really don't have time to crack the torque/village code right now, so any
> pointers would be greatly appreciated.
> 
> Any ideas?
> 
> -Mitch
> 
> 
> java.sql.SQLException: Data size bigger than max size for this type: 4537
>         at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
>         at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222)
>         at oracle.jdbc.ttc7.TTCItem.setArrayData(TTCItem.java:99)
>         at
> oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:1761)
>         at
> oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.j
> ava:855)
>         at
> oracle.jdbc.driver.OraclePreparedStatement.setBytes(OraclePreparedStatement.
> java:1812)
>         at com.workingdogs.village.Value.setPreparedStatementValue(Unknown
> Source)
>         at com.workingdogs.village.Record.saveWithUpdate(Unknown Source)
>         at com.workingdogs.village.Record.save(Unknown Source)
>         at com.workingdogs.village.Record.save(Unknown Source)
>         at
> org.apache.torque.util.BasePeer.insertOrUpdateRecord(BasePeer.java:891)
>         at org.apache.torque.util.BasePeer.doUpdate(BasePeer.java:1812)
>         at org.apache.torque.util.BasePeer.doUpdate(BasePeer.java:1711)
>         at
> org.apache.turbine.om.security.peer.TurbineUserPeer.doUpdate(TurbineUserPeer
> .java:482)
>         at
> org.apache.turbine.services.security.db.DBUserManager.store(DBUserManager.ja
> va:267)
>         at
> org.apache.turbine.services.security.BaseSecurityService.saveUser(BaseSecuri
> tyService.java:374)
>         at
> org.apache.turbine.services.security.TurbineSecurity.saveUser(TurbineSecurit
> y.java:256)
>         at
> org.apache.turbine.om.security.TurbineUser.valueUnbound(TurbineUser.java:653
> )
>         at
> jrun.servlet.session.JRunSession.setAttribute(JRunSession.java:278)
>         at jrun.servlet.session.JRunSession.putValue(JRunSession.java:254)
>         at
> org.apache.turbine.services.rundata.DefaultTurbineRunData.save(DefaultTurbin
> eRunData.java:1355)
>         at
> org.apache.turbine.modules.actions.LogoutUser.doPerform(LogoutUser.java:118)
>         at org.apache.turbine.modules.Action.perform(Action.java:87)
>         at
> org.apache.turbine.modules.ActionLoader.exec(ActionLoader.java:122)
>         at org.apache.turbine.Turbine.doGet(Turbine.java:509)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>         at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
>         at
> jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
>         at
> jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:241)
>         at
> jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:527)
>         at jrun.servlet.http.WebService.invokeRunnable(WebService.java:172)
>         at
> jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:
> 348)
>         at
> jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:451
> )
>         at
> jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:29
> 4)
>         at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
> rethrown as org.apache.torque.TorqueException: Data size bigger than max
> size for this type: 4537
> 
> 
> 
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
>Quinton McCombs<
Strategic Planner, NEqualsOne
 1800 International Park Drive
 Suite 205 
 Birmingham, AL 35243
p: 205.324.8005 x121  800.466.1337
 f: 205.324.7008
e: qmccombs@NEqualsOne.com
 www.NEqualsOne.com



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>