Oracle Database exception crashes my Openfire 3.6.4

Hello all

I’m experiencing a problem that’s driving me crazy: a series of recurrent database exceptions are bringing down my Openfire server at least 3 times/day and I just can’t figure out how to fix it. My users are mad with this behaevior and asking me for a more “stable” IM solution…

My error logs are been filled with this message in such a way that all the 5 log files are rotated in a 2 hour basis (1MB max, each file), and the message tell me this:

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.jav a:970)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:11 90)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatem ent.java:3370)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatemen t.java:3454)
at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.ja va:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100)
at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57)
at oracle.jdbc.OraclePreparedStatement$$EnhancerByProxool$$4fcc970c.executeUpdate( )
at org.jivesoftware.database.ProfiledConnection$TimedPreparedStatement.executeUpda te(ProfiledConnection.java:806)
at org.jivesoftware.openfire.pubsub.PubSubPersistenceManager.createPublishedItem(P ubSubPersistenceManager.java:1024)
at org.jivesoftware.openfire.pubsub.PublishedItemTask.run(PublishedItemTask.java:7 2)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
2010.08.25 08:46:14 [org.jivesoftware.openfire.pubsub.PubSubPersistenceManager.createPublishedItem( PubSubPersistenceManager.java:1029)]
java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column

I’ve seen another complaint (unsolved) about the same problem in this forum http://community.igniterealtime.org/message/197719

My environment configuration is:

OS Debian GNU/Linux 5.0 (kernel 2.6.26 on an i386 Intel processor)

***3 GB of RAM (2,5GB to Java with startup option “-Xms2560m -Xms2560m” on /etc/default/openfire)


Openfire 3.6.4

Java (Sun) 1.6.0_12

AppServer Jetti-6.1.x

Oracle Database 10g Enterprise Edition (10.2.0.3.0-64bits)

Oracle JDBC Driver 10.2.0.4.0

***Integrated to Active Directory


Any help would be highly appreciated!

Hi,

http://fisheye.igniterealtime.org/browse/openfire/tags/openfire_3_6_4/src/java/o rg/jivesoftware/openfire/pubsub/PubSubPersistenceManager.java?r=HEAD is the java class.

I assume that item.getPayloadXML() returns a string which is longer than 4000 characters and thus you get this error.

The PublishedItemTask runs

entry = itemsToAdd.poll(); if (entry != null) {
      success = PubSubPersistenceManager.createPublishedItem(service, entry);
      if (!success) {
            itemsToAdd.add(entry);
      } }

so we have there a fine loop which makes sure that the exception does occur every few seconds and that the server uses one core processing this item over and over. Can you confirm also the high CPU usage? Maybe it’s not so high if you have a lot of IO waits.

LG

PS: I did create OF-392