blob: f26d77057ea9c75b3025f5fc07e5778c4aaa41c9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <CMS_Session.h>
#include <Config.h>
#include <types/CMS_Types.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <memory>
////////////////////////////////////////////////////////////////////////////////
cms_status createDefaultSession(CMS_Connection* connection, CMS_Session** session) {
cms_status result = CMS_SUCCESS;
std::auto_ptr<CMS_Session> wrapper( new CMS_Session );
try{
if (connection == NULL) {
result = CMS_ERROR;
} else {
wrapper->session = connection->connection->createSession();
*session = wrapper.release();
}
} catch(...) {
result = CMS_ERROR;
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
cms_status createSession(CMS_Connection* connection, CMS_Session** session, ACKNOWLEDGMENT_MODE ackMode) {
cms_status result = CMS_SUCCESS;
std::auto_ptr<CMS_Session> wrapper( new CMS_Session );
try{
if (connection == NULL) {
result = CMS_ERROR;
} else {
cms::Session::AcknowledgeMode cmsAckType = cms::Session::AUTO_ACKNOWLEDGE;
switch(ackMode) {
case AUTO_ACKNOWLEDGE:
break;
case DUPS_OK_ACKNOWLEDGE:
cmsAckType = cms::Session::DUPS_OK_ACKNOWLEDGE;
break;
case CLIENT_ACKNOWLEDGE:
cmsAckType = cms::Session::CLIENT_ACKNOWLEDGE;
break;
case SESSION_TRANSACTED:
cmsAckType = cms::Session::SESSION_TRANSACTED;
break;
case INDIVIDUAL_ACKNOWLEDGE:
cmsAckType = cms::Session::INDIVIDUAL_ACKNOWLEDGE;
break;
default:
return CMS_UNKNOWN_ACKTYPE;
}
wrapper->session = connection->connection->createSession(cmsAckType);
*session = wrapper.release();
}
} catch(...) {
result = CMS_ERROR;
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
cms_status destroySession(CMS_Session* session) {
cms_status result = CMS_SUCCESS;
if(session != NULL) {
try{
delete session->session;
delete session;
} catch(...) {
result = CMS_ERROR;
}
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
cms_status closeSession(CMS_Session* session) {
cms_status result = CMS_SUCCESS;
if(session != NULL) {
try{
session->session->close();
} catch(...) {
result = CMS_ERROR;
}
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
cms_status commitSession(CMS_Session* session) {
cms_status result = CMS_SUCCESS;
if(session != NULL) {
try{
session->session->commit();
} catch(...) {
result = CMS_ERROR;
}
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
cms_status rollbackSession(CMS_Session* session) {
cms_status result = CMS_SUCCESS;
if(session != NULL) {
try{
session->session->rollback();
} catch(...) {
result = CMS_ERROR;
}
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
cms_status recoverSession(CMS_Session* session) {
cms_status result = CMS_SUCCESS;
if(session != NULL) {
try{
session->session->recover();
} catch(...) {
result = CMS_ERROR;
}
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
cms_status getSessionAcknowledgeMode(CMS_Session* session, int* mode) {
cms_status result = CMS_SUCCESS;
if(session != NULL && mode != NULL) {
try{
*mode = (int) session->session->getAcknowledgeMode();
} catch(...) {
result = CMS_ERROR;
}
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
cms_status isSessionTransacted(CMS_Session* session, int* transacted) {
cms_status result = CMS_SUCCESS;
if(session != NULL && result != NULL) {
try{
*transacted = (int) session->session->isTransacted();
} catch(...) {
result = CMS_ERROR;
}
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
cms_status unsubscribeSessionDurableConsumer(CMS_Session* session, const char* subscription) {
cms_status result = CMS_SUCCESS;
if(session != NULL && subscription != NULL) {
try{
session->session->unsubscribe(subscription);
} catch(...) {
result = CMS_ERROR;
}
}
return result;
}