public synchronized void destroy(MessageRef reference) throws JMSException {
final String messageId = reference.getMessageId();
if (_references.remove(messageId) != null) {
if (reference.isPersistent()) {
try {
DatabaseService service = DatabaseService.getInstance();
Connection connection = service.getConnection();
PersistenceAdapter adapter = service.getAdapter();
adapter.removeMessage(connection, messageId);
} catch (Exception exception) {
_log.error("Failed to remove message", exception);
throw new JMSException("Failed to remove message: "
+ exception.getMessage());