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>