Jerald Schoudt created TOMEE-233:
------------------------------------
Summary: Default JMS Persistence with hsql causes issue when
restarting server
Key: TOMEE-233
URL: https://issues.apache.org/jira/browse/TOMEE-233
Project: TomEE
Issue Type: Bug
Affects Versions: 1.0.0, 1.0.1, 1.1.0
Environment: Linux jschlt 3.0.0-21-generic-pae #35-Ubuntu SMP Fri May
25 18:17:24 UTC 2012 i686 i686 i386 GNU/Linux
java version "1.6.0_23"
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2)
OpenJDK Server VM (build 20.0-b11, mixed mode)
TomEE plus 1.0.0
Also occurs on 1.0.1 snapshot (06/07)
and 1.1.0 snapshot (06/12)
Reporter: Jerald Schoudt
I'm using tomee plus (I've tried 1.0.0 plus and 1.0.1 plus snashot from June 7)
and I'm seeing an issue.
I have a JMS queue in my application that I use to send/process textmessages
and if I shutdown/restart tomee while there are messages in the queue they get
persisted, but then when the server starts I get the following error and the
ActiveMQ JMS Broker fails to start.
WARNING: JDBC Failure: incompatible data type in conversion: from SQL type
OTHER to [B, value: instance of org.hsqldb.types.JavaObjectData
java.sql.SQLSyntaxErrorException: incompatible data type in conversion: from
SQL type OTHER to [B, value: instance of org.hsqldb.types.JavaObjectData
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.JDBCResultSet.getColumnInType(Unknown Source)
at org.hsqldb.jdbc.JDBCResultSet.getBytes(Unknown Source)
at
org.apache.commons.dbcp.DelegatingResultSet.getBytes(DelegatingResultSet.java:241)
at
org.apache.commons.dbcp.DelegatingResultSet.getBytes(DelegatingResultSet.java:241)
at
org.apache.activemq.store.jdbc.adapter.BytesJDBCAdapter.getBinaryData(BytesJDBCAdapter.java:38)
at
org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter.doGetMessageById(DefaultJDBCAdapter.java:194)
at
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.getLastMessageBrokerSequenceId(JDBCPersistenceAdapter.java:234)
at
org.apache.activemq.broker.region.DestinationFactoryImpl.getLastMessageBrokerSequenceId(DestinationFactoryImpl.java:145)
at
org.apache.activemq.broker.region.RegionBroker.<init>(RegionBroker.java:122)
at
org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:1833)
at
org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:1824)
at
org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:1781)
at
org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:766)
at
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.start(JDBCPersistenceAdapter.java:296)
at
org.apache.activemq.broker.BrokerService.start(BrokerService.java:493)
at
org.apache.openejb.resource.activemq.ActiveMQ5Factory$1.run(ActiveMQ5Factory.java:126)
Caused by: org.hsqldb.HsqlException: incompatible data type in conversion: from
SQL type OTHER to [B, value: instance of org.hsqldb.types.JavaObjectData
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
... 16 more
Here's some sample code to reproduce the problem. Put this class in an
otherwise empty web app:
package org.jschoudt.test;
import javax.annotation.Resource;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class ConfigListener implements ServletContextListener {
@Resource
ConnectionFactory cf;
@Resource(name = "somequeue")
Queue queue;
public ConfigListener() {}
public void contextInitialized(ServletContextEvent event) {
Connection conn = null;
Session session = null;
MessageProducer messageProducer = null;
try {
conn = cf.createConnection();
conn.start();
session = conn.createSession(false,
Session.AUTO_ACKNOWLEDGE);
messageProducer = session.createProducer(queue);
Message m = session.createTextMessage("{'foo':'bar'}");
messageProducer.send(m);
event.getServletContext().log("Message sent");
} catch (Exception e) {
event.getServletContext().log("Error sending message",
e);
} finally {
if (messageProducer != null) {
try {
messageProducer.close();
} catch (JMSException e) {
event.getServletContext().log(
"Error closing
messageProducer", e);
}
}
if (session != null) {
try {
session.close();
} catch (JMSException e) {
event.getServletContext().log("Error
closing session", e);
}
}
if (conn != null) {
try {
conn.close();
} catch (JMSException e) {
event.getServletContext()
.log("Error closing
connection", e);
}
}
}
}
public void contextDestroyed(ServletContextEvent event) {}
}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira