Fixing transaction handling issues

revert-70aa11f8
prabathabey 9 years ago
parent aeed8b92a1
commit 892b9681f5

@ -0,0 +1,59 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. 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.
*
*/
package org.wso2.carbon.device.mgt.common;
public class IllegalTransactionStateException extends RuntimeException {
private static final long serialVersionUID = -3151279331929070297L;
private String errorMessage;
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public IllegalTransactionStateException(String msg, Exception nestedEx) {
super(msg, nestedEx);
setErrorMessage(msg);
}
public IllegalTransactionStateException(String message, Throwable cause) {
super(message, cause);
setErrorMessage(message);
}
public IllegalTransactionStateException(String msg) {
super(msg);
setErrorMessage(msg);
}
public IllegalTransactionStateException() {
super();
}
public IllegalTransactionStateException(Throwable cause) {
super(cause);
}
}

@ -45,6 +45,7 @@ import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceStub;
import org.wso2.carbon.identity.oauth.stub.dto.OAuthConsumerAppDTO; import org.wso2.carbon.identity.oauth.stub.dto.OAuthConsumerAppDTO;
import java.rmi.RemoteException; import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -173,6 +174,7 @@ public class ApplicationManagerProviderServiceImpl implements ApplicationManagem
@Override @Override
public void updateApplicationListInstalledInDevice( public void updateApplicationListInstalledInDevice(
DeviceIdentifier deviceIdentifier, List<Application> applications) throws ApplicationManagementException { DeviceIdentifier deviceIdentifier, List<Application> applications) throws ApplicationManagementException {
List<Application> installedAppList = getApplicationListForDevice(deviceIdentifier);
try { try {
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
DeviceManagementDAOFactory.beginTransaction(); DeviceManagementDAOFactory.beginTransaction();
@ -182,8 +184,6 @@ public class ApplicationManagerProviderServiceImpl implements ApplicationManagem
log.debug("Device:" + device.getId() + ":identifier:" + deviceIdentifier.getId()); log.debug("Device:" + device.getId() + ":identifier:" + deviceIdentifier.getId());
} }
List<Application> installedAppList = getApplicationListForDevice(deviceIdentifier);
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("num of apps installed:" + installedAppList.size()); log.debug("num of apps installed:" + installedAppList.size());
} }
@ -227,9 +227,13 @@ public class ApplicationManagerProviderServiceImpl implements ApplicationManagem
} }
applicationMappingDAO.removeApplicationMapping(device.getId(), appIdsToRemove, tenantId); applicationMappingDAO.removeApplicationMapping(device.getId(), appIdsToRemove, tenantId);
DeviceManagementDAOFactory.commitTransaction(); DeviceManagementDAOFactory.commitTransaction();
} catch (DeviceManagementDAOException | TransactionManagementException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction(); DeviceManagementDAOFactory.rollbackTransaction();
throw new ApplicationManagementException("Error occurred saving application list to the device", e); throw new ApplicationManagementException("Error occurred saving application list to the device", e);
} catch (TransactionManagementException e) {
throw new ApplicationManagementException("Error occurred while initializing transaction", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
} }
} }
@ -239,11 +243,16 @@ public class ApplicationManagerProviderServiceImpl implements ApplicationManagem
Device device; Device device;
try { try {
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId(); int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
DeviceManagementDAOFactory.openConnection();
device = deviceDAO.getDevice(deviceId, tenantId); device = deviceDAO.getDevice(deviceId, tenantId);
return applicationDAO.getInstalledApplications(device.getId()); return applicationDAO.getInstalledApplications(device.getId());
} catch (DeviceManagementDAOException e) { } catch (DeviceManagementDAOException e) {
throw new ApplicationManagementException("Error occured while fetching the Application List of '" + throw new ApplicationManagementException("Error occurred while fetching the Application List of '" +
deviceId.getType() + "' device carrying the identifier'" + deviceId.getId(), e); deviceId.getType() + "' device carrying the identifier'" + deviceId.getId(), e);
} catch (SQLException e) {
throw new ApplicationManagementException("Error occurred while opening a connection to the data source", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
} }
} }

@ -20,6 +20,7 @@ package org.wso2.carbon.device.mgt.core.dao;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.IllegalTransactionStateException;
import org.wso2.carbon.device.mgt.common.TransactionManagementException; import org.wso2.carbon.device.mgt.common.TransactionManagementException;
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig; import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition; import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
@ -113,8 +114,14 @@ public class DeviceManagementDAOFactory {
} }
public static void beginTransaction() throws TransactionManagementException { public static void beginTransaction() throws TransactionManagementException {
Connection conn = currentConnection.get();
if (conn != null) {
throw new IllegalTransactionStateException("A transaction is already active within the context of " +
"this particular thread. Therefore, calling 'beginTransaction/openConnection' while another " +
"transaction is already active is a sign of improper transaction handling");
}
try { try {
Connection conn = dataSource.getConnection(); conn = dataSource.getConnection();
conn.setAutoCommit(false); conn.setAutoCommit(false);
currentConnection.set(conn); currentConnection.set(conn);
} catch (SQLException e) { } catch (SQLException e) {
@ -123,58 +130,67 @@ public class DeviceManagementDAOFactory {
} }
public static void openConnection() throws SQLException { public static void openConnection() throws SQLException {
currentConnection.set(dataSource.getConnection()); Connection conn = currentConnection.get();
if (conn != null) {
throw new IllegalTransactionStateException("A transaction is already active within the context of " +
"this particular thread. Therefore, calling 'beginTransaction/openConnection' while another " +
"transaction is already active is a sign of improper transaction handling");
}
conn = dataSource.getConnection();
currentConnection.set(conn);
} }
public static Connection getConnection() throws SQLException { public static Connection getConnection() throws SQLException {
if (currentConnection.get() == null) { Connection conn = currentConnection.get();
currentConnection.set(dataSource.getConnection()); if (conn == null) {
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
"This might have ideally been caused by not properly initiating the transaction via " +
"'beginTransaction'/'openConnection' methods");
} }
return currentConnection.get(); return conn;
} }
public static void commitTransaction() { public static void commitTransaction() {
Connection conn = currentConnection.get();
if (conn == null) {
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
"This might have ideally been caused by not properly initiating the transaction via " +
"'beginTransaction'/'openConnection' methods");
}
try { try {
Connection conn = currentConnection.get(); conn.commit();
if (conn != null) {
conn.commit();
} else {
if (log.isDebugEnabled()) {
log.debug("Datasource connection associated with the current thread is null, hence commit " +
"has not been attempted");
}
}
} catch (SQLException e) { } catch (SQLException e) {
log.error("Error occurred while committing the transaction", e); log.error("Error occurred while committing the transaction", e);
} }
} }
public static void rollbackTransaction() { public static void rollbackTransaction() {
Connection conn = currentConnection.get();
if (conn == null) {
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
"This might have ideally been caused by not properly initiating the transaction via " +
"'beginTransaction'/'openConnection' methods");
}
try { try {
Connection conn = currentConnection.get(); conn.rollback();
if (conn != null) {
conn.rollback();
} else {
if (log.isDebugEnabled()) {
log.debug("Datasource connection associated with the current thread is null, hence rollback " +
"has not been attempted");
}
}
} catch (SQLException e) { } catch (SQLException e) {
log.warn("Error occurred while rollbacking the transaction", e); log.warn("Error occurred while roll-backing the transaction", e);
} }
} }
public static void closeConnection() { public static void closeConnection() {
Connection con = currentConnection.get(); Connection conn = currentConnection.get();
if (con != null) { if (conn == null) {
try { throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
con.close(); "This might have ideally been caused by not properly initiating the transaction via " +
} catch (SQLException e) { "'beginTransaction'/'openConnection' methods");
log.warn("Error occurred while close the connection"); }
} try {
currentConnection.remove(); conn.close();
} catch (SQLException e) {
log.warn("Error occurred while close the connection");
} }
currentConnection.remove();
} }

@ -26,7 +26,7 @@ public interface EnrolmentDAO {
int addEnrollment(int deviceId, EnrolmentInfo enrolmentInfo, int tenantId) throws DeviceManagementDAOException; int addEnrollment(int deviceId, EnrolmentInfo enrolmentInfo, int tenantId) throws DeviceManagementDAOException;
int updateEnrollment(int deviceId, EnrolmentInfo enrolmentInfo, int updateEnrollment(int deviceId, EnrolmentInfo enrolmentInfo,
int tenantId) throws DeviceManagementDAOException; int tenantId) throws DeviceManagementDAOException;
int removeEnrollment(int deviceId, String currentOwner, int tenantId) throws DeviceManagementDAOException; int removeEnrollment(int deviceId, String currentOwner, int tenantId) throws DeviceManagementDAOException;

@ -111,16 +111,16 @@ public class ApplicationMappingDAOImpl implements ApplicationMappingDAO {
"APPLICATION_ID = ? AND TENANT_ID = ?"; "APPLICATION_ID = ? AND TENANT_ID = ?";
stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
for(Integer appId:appIdList){ for (Integer appId : appIdList) {
stmt.setInt(1, deviceId); stmt.setInt(1, deviceId);
stmt.setInt(2, appId); stmt.setInt(2, appId);
stmt.setInt(3, tenantId); stmt.setInt(3, tenantId);
stmt.addBatch(); stmt.addBatch();
} }
stmt.executeBatch(); stmt.executeBatch();
} catch (SQLException e) { } catch (SQLException e) {
throw new DeviceManagementDAOException("Error occurred while adding device application mapping", e); throw new DeviceManagementDAOException("Error occurred while adding device application mapping", e);
}finally { } finally {
DeviceManagementDAOUtil.cleanupResources(stmt, null); DeviceManagementDAOUtil.cleanupResources(stmt, null);
} }
} }

@ -515,4 +515,5 @@ public class DeviceDAOImpl implements DeviceDAO {
} }
return devices; return devices;
} }
} }

@ -20,6 +20,7 @@ package org.wso2.carbon.device.mgt.core.operation.mgt.dao;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.IllegalTransactionStateException;
import org.wso2.carbon.device.mgt.common.TransactionManagementException; import org.wso2.carbon.device.mgt.common.TransactionManagementException;
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig; import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition; import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
@ -87,7 +88,9 @@ public class OperationManagementDAOFactory {
public static Connection getConnection() throws SQLException { public static Connection getConnection() throws SQLException {
if (currentConnection.get() == null) { if (currentConnection.get() == null) {
currentConnection.set(dataSource.getConnection()); throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
"This might have ideally caused by not properly initiating the transaction via " +
"'beginTransaction'/'openConnection' methods");
} }
return currentConnection.get(); return currentConnection.get();
} }

@ -156,9 +156,11 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
device.getDeviceIdentifier() + "', which belongs to " + "platform '" + device.getDeviceIdentifier() + "', which belongs to " + "platform '" +
device.getType() + " upon the user '" + device.getEnrolmentInfo().getOwner() + "'"); device.getType() + " upon the user '" + device.getEnrolmentInfo().getOwner() + "'");
} }
} catch (TransactionManagementException | DeviceManagementDAOException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction(); DeviceManagementDAOFactory.rollbackTransaction();
log.error("Error occurred while adding enrolment related metadata", e); throw new DeviceManagementException("Error occurred while adding enrolment related metadata", e);
} catch (TransactionManagementException e) {
throw new DeviceManagementException("Error occurred while initiating transaction", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -173,10 +175,12 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
int deviceId = deviceDAO.addDevice(type.getId(), device, tenantId); int deviceId = deviceDAO.addDevice(type.getId(), device, tenantId);
enrolmentId = enrolmentDAO.addEnrollment(deviceId, device.getEnrolmentInfo(), tenantId); enrolmentId = enrolmentDAO.addEnrollment(deviceId, device.getEnrolmentInfo(), tenantId);
DeviceManagementDAOFactory.commitTransaction(); DeviceManagementDAOFactory.commitTransaction();
} catch (DeviceManagementDAOException | TransactionManagementException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction(); DeviceManagementDAOFactory.rollbackTransaction();
log.error("Error occurred while adding metadata of '" + device.getType() + "' device carrying " + throw new DeviceManagementException("Error occurred while adding metadata of '" + device.getType() +
"the identifier '" + device.getDeviceIdentifier() + "'", e); "' device carrying the identifier '" + device.getDeviceIdentifier() + "'", e);
} catch (TransactionManagementException e) {
throw new DeviceManagementException("Error occurred while initiating transaction", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -214,10 +218,12 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
enrolmentDAO.updateEnrollment(deviceId, device.getEnrolmentInfo(), tenantId); enrolmentDAO.updateEnrollment(deviceId, device.getEnrolmentInfo(), tenantId);
DeviceManagementDAOFactory.commitTransaction(); DeviceManagementDAOFactory.commitTransaction();
} catch (DeviceManagementDAOException | TransactionManagementException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction(); DeviceManagementDAOFactory.rollbackTransaction();
throw new DeviceManagementException("Error occurred while modifying the device " + throw new DeviceManagementException("Error occurred while modifying the device " +
"'" + device.getId() + "'", e); "'" + device.getId() + "'", e);
} catch (TransactionManagementException e) {
throw new DeviceManagementException("Error occurred while initiating transaction", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -247,10 +253,12 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
deviceDAO.updateDevice(deviceType.getId(), device, tenantId); deviceDAO.updateDevice(deviceType.getId(), device, tenantId);
DeviceManagementDAOFactory.commitTransaction(); DeviceManagementDAOFactory.commitTransaction();
} catch (DeviceManagementDAOException | TransactionManagementException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction(); DeviceManagementDAOFactory.rollbackTransaction();
throw new DeviceManagementException("Error occurred while dis-enrolling '" + deviceId.getType() + throw new DeviceManagementException("Error occurred while dis-enrolling '" + deviceId.getType() +
"' device with the identifier '" + deviceId.getId() + "'", e); "' device with the identifier '" + deviceId.getId() + "'", e);
} catch (TransactionManagementException e) {
throw new DeviceManagementException("Error occurred while initiating transaction", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -302,14 +310,16 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
List<Device> allDevices; List<Device> allDevices;
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.openConnection();
allDevices = deviceDAO.getDevices(this.getTenantId()); allDevices = deviceDAO.getDevices(this.getTenantId());
} catch (DeviceManagementDAOException | SQLException e) { } catch (DeviceManagementDAOException e) {
throw new DeviceManagementException("Error occurred while retrieving device list pertaining to " + throw new DeviceManagementException("Error occurred while retrieving device list pertaining to " +
"the current tenant", e); "the current tenant", e);
} catch (SQLException e) {
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
for (Device device : allDevices) { for (Device device : allDevices) {
DeviceManager deviceManager = this.getDeviceManager(device.getType()); DeviceManager deviceManager = this.getDeviceManager(device.getType());
if (deviceManager == null) { if (deviceManager == null) {
@ -338,9 +348,11 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.openConnection();
allDevices = deviceDAO.getDevices(deviceType, this.getTenantId()); allDevices = deviceDAO.getDevices(deviceType, this.getTenantId());
} catch (DeviceManagementDAOException | SQLException e) { } catch (DeviceManagementDAOException e) {
throw new DeviceManagementException("Error occurred while retrieving all devices of type '" + throw new DeviceManagementException("Error occurred while retrieving all devices of type '" +
deviceType + "' that are being managed within the scope of current tenant", e); deviceType + "' that are being managed within the scope of current tenant", e);
} catch (SQLException e) {
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -415,7 +427,6 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
.getProperty("line.separator")).append(messageFooter3.trim()); .getProperty("line.separator")).append(messageFooter3.trim());
} catch (IOException e) { } catch (IOException e) {
log.error("IO error in processing enrol email message " + emailMessageProperties);
throw new DeviceManagementException("Error replacing tags in email template '" + throw new DeviceManagementException("Error replacing tags in email template '" +
emailMessageProperties.getSubject() + "'", e); emailMessageProperties.getSubject() + "'", e);
} }
@ -479,7 +490,6 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
messageBuilder.append(System.getProperty("line.separator")).append(messageFooter3.trim()); messageBuilder.append(System.getProperty("line.separator")).append(messageFooter3.trim());
} catch (IOException e) { } catch (IOException e) {
log.error("IO error in processing enrol email message " + emailMessageProperties);
throw new DeviceManagementException("Error replacing tags in email template '" + throw new DeviceManagementException("Error replacing tags in email template '" +
emailMessageProperties.getSubject() + "'", e); emailMessageProperties.getSubject() + "'", e);
} }
@ -492,10 +502,13 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
public Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException { public Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
Device device; Device device;
try { try {
DeviceManagementDAOFactory.openConnection();
device = deviceDAO.getDevice(deviceId, this.getTenantId()); device = deviceDAO.getDevice(deviceId, this.getTenantId());
} catch (DeviceManagementDAOException e) { } catch (DeviceManagementDAOException e) {
throw new DeviceManagementException("Error occurred while obtaining the device for id " + throw new DeviceManagementException("Error occurred while obtaining the device for id " +
"'" + deviceId.getId() + "'", e); "'" + deviceId.getId() + "'", e);
} catch (SQLException e) {
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -570,9 +583,11 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
DeviceManagementDAOFactory.commitTransaction(); DeviceManagementDAOFactory.commitTransaction();
return success; return success;
} catch (DeviceManagementDAOException | TransactionManagementException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction(); DeviceManagementDAOFactory.rollbackTransaction();
throw new DeviceManagementException("Error occurred while setting enrollment status", e); throw new DeviceManagementException("Error occurred while setting enrollment status", e);
} catch (TransactionManagementException e) {
throw new DeviceManagementException("Error occurred while initiating transaction", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -619,8 +634,8 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
} }
@Override @Override
public int addOperation(Operation operation, List<DeviceIdentifier> devices) throws public int addOperation(Operation operation,
OperationManagementException { List<DeviceIdentifier> devices) throws OperationManagementException {
return DeviceManagementDataHolder.getInstance().getOperationManager().addOperation(operation, devices); return DeviceManagementDataHolder.getInstance().getOperationManager().addOperation(operation, devices);
} }
@ -651,8 +666,8 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
} }
@Override @Override
public Operation getOperationByDeviceAndOperationId(DeviceIdentifier deviceId, int operationId) public Operation getOperationByDeviceAndOperationId(DeviceIdentifier deviceId,
throws OperationManagementException { int operationId) throws OperationManagementException {
return DeviceManagementDataHolder.getInstance().getOperationManager().getOperationByDeviceAndOperationId( return DeviceManagementDataHolder.getInstance().getOperationManager().getOperationByDeviceAndOperationId(
deviceId, operationId); deviceId, operationId);
} }
@ -677,9 +692,11 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.openConnection();
userDevices = deviceDAO.getDevicesOfUser(username, this.getTenantId()); userDevices = deviceDAO.getDevicesOfUser(username, this.getTenantId());
} catch (DeviceManagementDAOException | SQLException e) { } catch (DeviceManagementDAOException e) {
throw new DeviceManagementException("Error occurred while retrieving the list of devices that " + throw new DeviceManagementException("Error occurred while retrieving the list of devices that " +
"belong to the user '" + username + "'", e); "belong to the user '" + username + "'", e);
} catch (SQLException e) {
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -750,8 +767,10 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.openConnection();
return deviceDAO.getDeviceCount(this.getTenantId()); return deviceDAO.getDeviceCount(this.getTenantId());
} catch (DeviceManagementDAOException | SQLException e) { } catch (DeviceManagementDAOException e) {
throw new DeviceManagementException("Error occurred while retrieving the device count", e); throw new DeviceManagementException("Error occurred while retrieving the device count", e);
} catch (SQLException e) {
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -764,9 +783,11 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.openConnection();
allDevices = deviceDAO.getDevicesByName(deviceName, this.getTenantId()); allDevices = deviceDAO.getDevicesByName(deviceName, this.getTenantId());
} catch (DeviceManagementDAOException | SQLException e) { } catch (DeviceManagementDAOException e) {
throw new DeviceManagementException("Error occurred while fetching the list of devices that matches to '" throw new DeviceManagementException("Error occurred while fetching the list of devices that matches to '"
+ deviceName + "'", e); + deviceName + "'", e);
} catch (SQLException e) {
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -788,14 +809,22 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
@Override @Override
public void updateDeviceEnrolmentInfo(Device device, EnrolmentInfo.Status status) throws DeviceManagementException { public void updateDeviceEnrolmentInfo(Device device, EnrolmentInfo.Status status) throws DeviceManagementException {
try { try {
DeviceManagementDAOFactory.beginTransaction();
DeviceType deviceType = deviceTypeDAO.getDeviceType(device.getType()); DeviceType deviceType = deviceTypeDAO.getDeviceType(device.getType());
device.getEnrolmentInfo().setDateOfLastUpdate(new Date().getTime()); device.getEnrolmentInfo().setDateOfLastUpdate(new Date().getTime());
device.getEnrolmentInfo().setStatus(status); device.getEnrolmentInfo().setStatus(status);
deviceDAO.updateDevice(deviceType.getId(), device, this.getTenantId()); deviceDAO.updateDevice(deviceType.getId(), device, this.getTenantId());
} catch (DeviceManagementDAOException deviceDaoEx) {
String errorMsg = "Error occured update device enrolment status : " + device.getId(); DeviceManagementDAOFactory.commitTransaction();
log.error(errorMsg, deviceDaoEx); } catch (DeviceManagementDAOException e) {
throw new DeviceManagementException(errorMsg, deviceDaoEx); DeviceManagementDAOFactory.rollbackTransaction();
throw new DeviceManagementException("Error occurred update device enrolment status : '" +
device.getId() + "'", e);
} catch (TransactionManagementException e) {
throw new DeviceManagementException("Error occurred while initiating transaction", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
} }
} }
@ -826,12 +855,13 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.openConnection();
allDevices = deviceDAO.getDevicesByStatus(status, this.getTenantId()); allDevices = deviceDAO.getDevicesByStatus(status, this.getTenantId());
} catch (DeviceManagementDAOException | SQLException e) { } catch (DeviceManagementDAOException e) {
throw new DeviceManagementException( throw new DeviceManagementException(
"Error occurred while fetching the list of devices that matches to status: '" + status + "'", e); "Error occurred while fetching the list of devices that matches to status: '" + status + "'", e);
} catch (SQLException e) {
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
for (Device device : allDevices) { for (Device device : allDevices) {

@ -42,7 +42,8 @@ public class ApplicationManagementProviderServiceTest {
@BeforeClass @BeforeClass
public void init() { public void init() {
deviceManagementPluginRepository = new DeviceManagementPluginRepository(); deviceManagementPluginRepository = new DeviceManagementPluginRepository();
TestDeviceManagementService testDeviceManagementService = new TestDeviceManagementService(TestDataHolder.TEST_DEVICE_TYPE); TestDeviceManagementService testDeviceManagementService =
new TestDeviceManagementService(TestDataHolder.TEST_DEVICE_TYPE);
try { try {
deviceManagementPluginRepository.addDeviceManagementProvider(testDeviceManagementService); deviceManagementPluginRepository.addDeviceManagementProvider(testDeviceManagementService);
} catch (DeviceManagementException e) { } catch (DeviceManagementException e) {
@ -53,11 +54,11 @@ public class ApplicationManagementProviderServiceTest {
} }
@Test @Test
public void updateApplicationTest(){ public void updateApplicationTest() {
List<Application> applications = new ArrayList<Application>(); List<Application> applications = new ArrayList<>();
Application application1 = TestDataHolder.generateApplicationDummyData("org.wso2.app1"); Application application1 = TestDataHolder.generateApplicationDummyData("org.wso2.app1");
Application application2 = TestDataHolder.generateApplicationDummyData("org.wso2.app2"); Application application2 = TestDataHolder.generateApplicationDummyData("org.wso2.app2");
Application application3 = TestDataHolder.generateApplicationDummyData("org.wso2.app3"); Application application3 = TestDataHolder.generateApplicationDummyData("org.wso2.app3");
Application application4 = TestDataHolder.generateApplicationDummyData("org.wso2.app4"); Application application4 = TestDataHolder.generateApplicationDummyData("org.wso2.app4");
@ -67,34 +68,43 @@ public class ApplicationManagementProviderServiceTest {
applications.add(application3); applications.add(application3);
applications.add(application4); applications.add(application4);
Device device = TestDataHolder.initialTestDevice; Device device = TestDataHolder.initialTestDevice;
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(TestDataHolder.initialDeviceIdentifier); if (device == null) {
deviceIdentifier.setType(device.getType()); throw new IllegalStateException("Device information is not available");
}
DeviceIdentifier deviceId = new DeviceIdentifier();
String deviceIdentifier = TestDataHolder.initialDeviceIdentifier;
if (deviceIdentifier == null) {
throw new IllegalStateException("Device identifier is not available");
}
deviceId.setId(deviceIdentifier);
deviceId.setType(device.getType());
AppManagementConfig appManagementConfig = new AppManagementConfig(); AppManagementConfig appManagementConfig = new AppManagementConfig();
appMgtProvider = new ApplicationManagerProviderServiceImpl(deviceManagementPluginRepository); appMgtProvider = new ApplicationManagerProviderServiceImpl(deviceManagementPluginRepository);
try { try {
appMgtProvider.updateApplicationListInstalledInDevice(deviceIdentifier, applications); appMgtProvider.updateApplicationListInstalledInDevice(deviceId, applications);
} catch (ApplicationManagementException appMgtEx){ } catch (ApplicationManagementException appMgtEx) {
String msg = "Error occurred while updating app list '" + TestDataHolder.TEST_DEVICE_TYPE + "'"; String msg = "Error occurred while updating app list '" + TestDataHolder.TEST_DEVICE_TYPE + "'";
log.error(msg, appMgtEx); log.error(msg, appMgtEx);
Assert.fail(msg, appMgtEx); Assert.fail(msg, appMgtEx);
} }
Application application5 = TestDataHolder.generateApplicationDummyData("org.wso2.app5"); Application application5 = TestDataHolder.generateApplicationDummyData("org.wso2.app5");
applications = new ArrayList<Application>(); applications = new ArrayList<>();
applications.add(application4); applications.add(application4);
applications.add(application3); applications.add(application3);
applications.add(application5); applications.add(application5);
try { try {
appMgtProvider.updateApplicationListInstalledInDevice(deviceIdentifier, applications); appMgtProvider.updateApplicationListInstalledInDevice(deviceId, applications);
List<Application> installedApps = appMgtProvider.getApplicationListForDevice(deviceIdentifier); List<Application> installedApps = appMgtProvider.getApplicationListForDevice(deviceId);
log.info("Number of installed applications:"+installedApps.size()); log.info("Number of installed applications:" + installedApps.size());
Assert.assertEquals(installedApps.size(),3,"Num of installed applications should be two"); Assert.assertEquals(installedApps.size(), 3, "Num of installed applications should be two");
} catch (ApplicationManagementException appMgtEx){ } catch (ApplicationManagementException appMgtEx) {
String msg = "Error occurred while updating app list '" + TestDataHolder.TEST_DEVICE_TYPE + "'"; String msg = "Error occurred while updating app list '" + TestDataHolder.TEST_DEVICE_TYPE + "'";
log.error(msg, appMgtEx); log.error(msg, appMgtEx);
Assert.fail(msg, appMgtEx); Assert.fail(msg, appMgtEx);

@ -72,7 +72,7 @@ public abstract class BaseDeviceManagementTest {
return new org.apache.tomcat.jdbc.pool.DataSource(properties); return new org.apache.tomcat.jdbc.pool.DataSource(properties);
} }
private void initializeCarbonContext(){ private void initializeCarbonContext() {
if (System.getProperty("carbon.home") == null) { if (System.getProperty("carbon.home") == null) {
File file = new File("src/test/resources/carbon-home"); File file = new File("src/test/resources/carbon-home");
@ -129,11 +129,12 @@ public abstract class BaseDeviceManagementTest {
conn = getDataSource().getConnection(); conn = getDataSource().getConnection();
conn.setAutoCommit(false); conn.setAutoCommit(false);
this.cleanupEnrolmentData(conn); //TODO:FIX ME
this.cleanApplicationMappingData(conn); // this.cleanupEnrolmentData(conn);
this.cleanApplicationData(conn); // this.cleanApplicationMappingData(conn);
this.cleanupDeviceData(conn); // this.cleanApplicationData(conn);
this.cleanupDeviceTypeData(conn); // this.cleanupDeviceData(conn);
// this.cleanupDeviceTypeData(conn);
conn.commit(); conn.commit();
} catch (SQLException e) { } catch (SQLException e) {
@ -158,64 +159,34 @@ public abstract class BaseDeviceManagementTest {
} }
} }
private void cleanApplicationMappingData(Connection conn) throws SQLException{ private void cleanApplicationMappingData(Connection conn) throws SQLException {
PreparedStatement stmt = null; try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_DEVICE_APPLICATION_MAPPING")) {
try {
stmt = conn.prepareStatement("DELETE FROM DM_DEVICE_APPLICATION_MAPPING");
stmt.execute(); stmt.execute();
} finally {
if (stmt != null) {
stmt.close();
}
} }
} }
private void cleanApplicationData(Connection conn) throws SQLException{ private void cleanApplicationData(Connection conn) throws SQLException {
PreparedStatement stmt = null; try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_APPLICATION")) {
try {
stmt = conn.prepareStatement("DELETE FROM DM_APPLICATION");
stmt.execute(); stmt.execute();
} finally {
if (stmt != null) {
stmt.close();
}
} }
} }
private void cleanupEnrolmentData(Connection conn) throws SQLException { private void cleanupEnrolmentData(Connection conn) throws SQLException {
PreparedStatement stmt = null; try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_ENROLMENT")) {
try {
stmt = conn.prepareStatement("DELETE FROM DM_ENROLMENT");
stmt.execute(); stmt.execute();
} finally {
if (stmt != null) {
stmt.close();
}
} }
} }
private void cleanupDeviceData(Connection conn) throws SQLException { private void cleanupDeviceData(Connection conn) throws SQLException {
PreparedStatement stmt = null; try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_DEVICE")) {
try {
stmt = conn.prepareStatement("DELETE FROM DM_DEVICE");
stmt.execute(); stmt.execute();
} finally {
if (stmt != null) {
stmt.close();
}
} }
} }
private void cleanupDeviceTypeData(Connection conn) throws SQLException { private void cleanupDeviceTypeData(Connection conn) throws SQLException {
PreparedStatement stmt = null; try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM DM_DEVICE_TYPE")) {
try {
stmt = conn.prepareStatement("DELETE FROM DM_DEVICE_TYPE");
stmt.execute(); stmt.execute();
} finally {
if (stmt != null) {
stmt.close();
}
} }
} }

@ -26,6 +26,7 @@ import org.testng.annotations.Test;
import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.EnrolmentInfo.Status; import org.wso2.carbon.device.mgt.common.EnrolmentInfo.Status;
import org.wso2.carbon.device.mgt.common.TransactionManagementException;
import org.wso2.carbon.device.mgt.core.TestUtils; import org.wso2.carbon.device.mgt.core.TestUtils;
import org.wso2.carbon.device.mgt.core.common.BaseDeviceManagementTest; import org.wso2.carbon.device.mgt.core.common.BaseDeviceManagementTest;
import org.wso2.carbon.device.mgt.core.common.TestDataHolder; import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
@ -50,12 +51,18 @@ public class DevicePersistTests extends BaseDeviceManagementTest {
public void testAddDeviceTypeTest() { public void testAddDeviceTypeTest() {
DeviceType deviceType = TestDataHolder.generateDeviceTypeData(TestDataHolder.TEST_DEVICE_TYPE); DeviceType deviceType = TestDataHolder.generateDeviceTypeData(TestDataHolder.TEST_DEVICE_TYPE);
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.beginTransaction();
deviceTypeDAO.addDeviceType(deviceType); deviceTypeDAO.addDeviceType(deviceType);
} catch (DeviceManagementDAOException | SQLException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction();
String msg = "Error occurred while adding device type '" + deviceType.getName() + "'"; String msg = "Error occurred while adding device type '" + deviceType.getName() + "'";
log.error(msg, e); log.error(msg, e);
Assert.fail(msg, e); Assert.fail(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while initiating transaction to persist device type '" +
deviceType.getName() + "'";
log.error(msg, e);
Assert.fail(msg, e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -75,21 +82,26 @@ public class DevicePersistTests extends BaseDeviceManagementTest {
@Test(dependsOnMethods = {"testAddDeviceTypeTest"}) @Test(dependsOnMethods = {"testAddDeviceTypeTest"})
public void testAddDeviceTest() { public void testAddDeviceTest() {
int tenantId = TestDataHolder.SUPER_TENANT_ID; int tenantId = TestDataHolder.SUPER_TENANT_ID;
Device device = TestDataHolder.generateDummyDeviceData(TestDataHolder.TEST_DEVICE_TYPE); Device device = TestDataHolder.generateDummyDeviceData(TestDataHolder.TEST_DEVICE_TYPE);
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.beginTransaction();
int deviceId = deviceDAO.addDevice(TestDataHolder.initialTestDeviceType.getId(), device, tenantId); int deviceId = deviceDAO.addDevice(TestDataHolder.initialTestDeviceType.getId(), device, tenantId);
device.setId(deviceId); device.setId(deviceId);
deviceDAO.addEnrollment(device, tenantId); deviceDAO.addEnrollment(device, tenantId);
DeviceManagementDAOFactory.commitTransaction();
TestDataHolder.initialTestDevice = device; TestDataHolder.initialTestDevice = device;
} catch (DeviceManagementDAOException | SQLException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction();
String msg = "Error occurred while adding '" + device.getType() + "' device with the identifier '" + String msg = "Error occurred while adding '" + device.getType() + "' device with the identifier '" +
device.getDeviceIdentifier() + "'"; device.getDeviceIdentifier() + "'";
log.error(msg, e); log.error(msg, e);
Assert.fail(msg, e); Assert.fail(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while initiating transaction";
log.error(msg, e);
Assert.fail(msg, e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }
@ -164,14 +176,19 @@ public class DevicePersistTests extends BaseDeviceManagementTest {
Device device = TestDataHolder.initialTestDevice; Device device = TestDataHolder.initialTestDevice;
try { try {
DeviceManagementDAOFactory.openConnection(); DeviceManagementDAOFactory.beginTransaction();
DeviceIdentifier deviceId = new DeviceIdentifier(device.getDeviceIdentifier(), device.getType()); DeviceIdentifier deviceId = new DeviceIdentifier(device.getDeviceIdentifier(), device.getType());
deviceDAO.setEnrolmentStatus(deviceId, device.getEnrolmentInfo().getOwner(), Status.ACTIVE, deviceDAO.setEnrolmentStatus(deviceId, device.getEnrolmentInfo().getOwner(), Status.ACTIVE,
TestDataHolder.SUPER_TENANT_ID); TestDataHolder.SUPER_TENANT_ID);
} catch (DeviceManagementDAOException | SQLException e) { } catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction();
String msg = "Error occurred while setting enrolment status"; String msg = "Error occurred while setting enrolment status";
log.error(msg, e); log.error(msg, e);
Assert.fail(msg, e); Assert.fail(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while initiating transaction";
log.error(msg, e);
Assert.fail(msg, e);
} finally { } finally {
DeviceManagementDAOFactory.closeConnection(); DeviceManagementDAOFactory.closeConnection();
} }

@ -37,4 +37,4 @@
<class name="org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderServiceTest"/> <class name="org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderServiceTest"/>
</classes> </classes>
</test> </test>
</suite> </suite>

@ -20,6 +20,7 @@ package org.wso2.carbon.policy.mgt.core.dao;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.IllegalTransactionStateException;
import org.wso2.carbon.policy.mgt.core.config.datasource.DataSourceConfig; import org.wso2.carbon.policy.mgt.core.config.datasource.DataSourceConfig;
import org.wso2.carbon.policy.mgt.core.config.datasource.JNDILookupDefinition; import org.wso2.carbon.policy.mgt.core.config.datasource.JNDILookupDefinition;
import org.wso2.carbon.policy.mgt.core.dao.impl.FeatureDAOImpl; import org.wso2.carbon.policy.mgt.core.dao.impl.FeatureDAOImpl;
@ -38,7 +39,7 @@ public class PolicyManagementDAOFactory {
private static DataSource dataSource; private static DataSource dataSource;
private static final Log log = LogFactory.getLog(PolicyManagementDAOFactory.class); private static final Log log = LogFactory.getLog(PolicyManagementDAOFactory.class);
private static ThreadLocal<Connection> currentConnection = new ThreadLocal<Connection>(); private static ThreadLocal<Connection> currentConnection = new ThreadLocal<>();
public static void init(DataSourceConfig config) { public static void init(DataSourceConfig config) {
dataSource = resolveDataSource(config); dataSource = resolveDataSource(config);
@ -48,13 +49,6 @@ public class PolicyManagementDAOFactory {
dataSource = dtSource; dataSource = dtSource;
} }
public static DataSource getDataSource() {
if (dataSource != null) {
return dataSource;
}
throw new RuntimeException("Data source is not yet configured.");
}
public static PolicyDAO getPolicyDAO() { public static PolicyDAO getPolicyDAO() {
return new PolicyDAOImpl(); return new PolicyDAOImpl();
} }
@ -81,7 +75,7 @@ public class PolicyManagementDAOFactory {
DataSource dataSource = null; DataSource dataSource = null;
if (config == null) { if (config == null) {
throw new RuntimeException("Device Management Repository data source configuration is null and thus," + throw new RuntimeException("Device Management Repository data source configuration is null and thus," +
" is not initialized"); " is not initialized");
} }
JNDILookupDefinition jndiConfig = config.getJndiLookupDefinition(); JNDILookupDefinition jndiConfig = config.getJndiLookupDefinition();
if (jndiConfig != null) { if (jndiConfig != null) {
@ -91,7 +85,7 @@ public class PolicyManagementDAOFactory {
List<JNDILookupDefinition.JNDIProperty> jndiPropertyList = List<JNDILookupDefinition.JNDIProperty> jndiPropertyList =
jndiConfig.getJndiProperties(); jndiConfig.getJndiProperties();
if (jndiPropertyList != null) { if (jndiPropertyList != null) {
Hashtable<Object, Object> jndiProperties = new Hashtable<Object, Object>(); Hashtable<Object, Object> jndiProperties = new Hashtable<>();
for (JNDILookupDefinition.JNDIProperty prop : jndiPropertyList) { for (JNDILookupDefinition.JNDIProperty prop : jndiPropertyList) {
jndiProperties.put(prop.getName(), prop.getValue()); jndiProperties.put(prop.getName(), prop.getValue());
} }
@ -104,8 +98,14 @@ public class PolicyManagementDAOFactory {
} }
public static void beginTransaction() throws PolicyManagerDAOException { public static void beginTransaction() throws PolicyManagerDAOException {
Connection conn = currentConnection.get();
if (conn != null) {
throw new IllegalTransactionStateException("A transaction is already active within the context of " +
"this particular thread. Therefore, calling 'beginTransaction/openConnection' while another " +
"transaction is already active is a sign of improper transaction handling");
}
try { try {
Connection conn = dataSource.getConnection(); conn = dataSource.getConnection();
conn.setAutoCommit(false); conn.setAutoCommit(false);
currentConnection.set(conn); currentConnection.set(conn);
} catch (SQLException e) { } catch (SQLException e) {
@ -113,63 +113,68 @@ public class PolicyManagementDAOFactory {
} }
} }
public static Connection getConnection() throws PolicyManagerDAOException { public static Connection getConnection() {
if (currentConnection.get() == null) { Connection conn = currentConnection.get();
try { if (conn == null) {
Connection conn = dataSource.getConnection(); throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
conn.setAutoCommit(false); "This might have ideally been caused by not properly initiating the transaction via " +
currentConnection.set(conn); "'beginTransaction'/'openConnection' methods");
} catch (SQLException e) {
throw new PolicyManagerDAOException("Error occurred while retrieving data source connection", e);
}
} }
return currentConnection.get(); return conn;
} }
public static void closeConnection() { public static void closeConnection() {
Connection con = currentConnection.get(); Connection conn = currentConnection.get();
if (conn == null) {
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
"This might have ideally been caused by not properly initiating the transaction via " +
"'beginTransaction'/'openConnection' methods");
}
try { try {
con.close(); conn.close();
} catch (SQLException e) { } catch (SQLException e) {
log.warn("Error occurred while close the connection", e); log.warn("Error occurred while close the connection", e);
} }
currentConnection.remove(); currentConnection.remove();
} }
public static void commitTransaction() throws PolicyManagerDAOException { public static void commitTransaction() {
Connection conn = currentConnection.get();
if (conn == null) {
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
"This might have ideally been caused by not properly initiating the transaction via " +
"'beginTransaction'/'openConnection' methods");
}
try { try {
Connection conn = currentConnection.get(); conn.commit();
if (conn != null) {
conn.commit();
} else {
if (log.isDebugEnabled()) {
log.debug("Datasource connection associated with the current thread is null, hence commit " +
"has not been attempted");
}
}
} catch (SQLException e) { } catch (SQLException e) {
throw new PolicyManagerDAOException("Error occurred while committing the transaction", e); log.error("Error occurred while committing the transaction", e);
} }
} }
public static void rollbackTransaction() { public static void rollbackTransaction() {
Connection conn = currentConnection.get();
if (conn == null) {
throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
"This might have ideally been caused by not properly initiating the transaction via " +
"'beginTransaction'/'openConnection' methods");
}
try { try {
Connection conn = currentConnection.get(); conn.rollback();
if (conn != null) {
conn.rollback();
} else {
if (log.isDebugEnabled()) {
log.debug("Datasource connection associated with the current thread is null, hence rollback " +
"has not been attempted");
}
}
} catch (SQLException e) { } catch (SQLException e) {
log.warn("Error occurred while roll-backing the transaction", e); log.warn("Error occurred while roll-backing the transaction", e);
} }
} }
public static void openConnection() throws SQLException { public static void openConnection() throws SQLException {
currentConnection.set(dataSource.getConnection()); Connection conn = currentConnection.get();
if (conn != null) {
throw new IllegalTransactionStateException("A transaction is already active within the context of " +
"this particular thread. Therefore, calling 'beginTransaction/openConnection' while another " +
"transaction is already active is a sign of improper transaction handling");
}
conn = dataSource.getConnection();
currentConnection.set(conn);
} }
} }

@ -471,13 +471,7 @@ public class FeatureDAOImpl implements FeatureDAO {
} }
private Connection getConnection() throws FeatureManagerDAOException { private Connection getConnection() throws FeatureManagerDAOException {
return PolicyManagementDAOFactory.getConnection();
try {
return PolicyManagementDAOFactory.getConnection();
} catch (PolicyManagerDAOException e) {
throw new FeatureManagerDAOException("Error occurred while obtaining a connection from the policy " +
"management metadata repository config.datasource", e);
}
} }
} }

@ -382,12 +382,7 @@ public class MonitoringDAOImpl implements MonitoringDAO {
} }
private Connection getConnection() throws MonitoringDAOException { private Connection getConnection() throws MonitoringDAOException {
try { return PolicyManagementDAOFactory.getConnection();
return PolicyManagementDAOFactory.getConnection();
} catch (PolicyManagerDAOException e) {
throw new MonitoringDAOException("Error occurred while obtaining a connection from the policy " +
"management metadata repository config.datasource", e);
}
} }
} }

@ -1082,7 +1082,7 @@ public class PolicyDAOImpl implements PolicyDAO {
stmt.setInt(2, tenantId); stmt.setInt(2, tenantId);
resultSet = stmt.executeQuery(); resultSet = stmt.executeQuery();
while (resultSet.next()) { if (resultSet.next()) {
return resultSet.getInt("POLICY_ID"); return resultSet.getInt("POLICY_ID");
} }
} catch (SQLException e) { } catch (SQLException e) {

@ -28,7 +28,6 @@ import org.wso2.carbon.policy.mgt.core.dao.PolicyManagerDAOException;
import org.wso2.carbon.policy.mgt.core.dao.ProfileDAO; import org.wso2.carbon.policy.mgt.core.dao.ProfileDAO;
import org.wso2.carbon.policy.mgt.core.dao.ProfileManagerDAOException; import org.wso2.carbon.policy.mgt.core.dao.ProfileManagerDAOException;
import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil; import org.wso2.carbon.policy.mgt.core.dao.util.PolicyManagementDAOUtil;
import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@ -221,7 +220,7 @@ public class ProfileDAOImpl implements ProfileDAO {
Connection conn; Connection conn;
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet resultSet = null; ResultSet resultSet = null;
List<Profile> profileList = new ArrayList<Profile>(); List<Profile> profileList = new ArrayList<>();
try { try {
//TODO : Fix with TenantID. //TODO : Fix with TenantID.
@ -259,12 +258,10 @@ public class ProfileDAOImpl implements ProfileDAO {
@Override @Override
public List<Profile> getProfilesOfDeviceType(DeviceType deviceType) throws ProfileManagerDAOException { public List<Profile> getProfilesOfDeviceType(DeviceType deviceType) throws ProfileManagerDAOException {
Connection conn; Connection conn;
PreparedStatement stmt = null; PreparedStatement stmt = null;
ResultSet resultSet = null; ResultSet resultSet = null;
List<Profile> profileList = new ArrayList<Profile>(); List<Profile> profileList = new ArrayList<>();
try { try {
conn = this.getConnection(); conn = this.getConnection();
String query = "SELECT * FROM DM_PROFILE WHERE DEVICE_TYPE_ID = ?"; String query = "SELECT * FROM DM_PROFILE WHERE DEVICE_TYPE_ID = ?";
@ -283,7 +280,6 @@ public class ProfileDAOImpl implements ProfileDAO {
profileList.add(profile); profileList.add(profile);
} }
} catch (SQLException e) { } catch (SQLException e) {
String msg = "Error occurred while reading the profile list from the database."; String msg = "Error occurred while reading the profile list from the database.";
log.error(msg, e); log.error(msg, e);
@ -296,12 +292,7 @@ public class ProfileDAOImpl implements ProfileDAO {
private Connection getConnection() throws ProfileManagerDAOException { private Connection getConnection() throws ProfileManagerDAOException {
try { return PolicyManagementDAOFactory.getConnection();
return PolicyManagementDAOFactory.getConnection();
} catch (PolicyManagerDAOException e) {
throw new ProfileManagerDAOException("Error occurred while obtaining a connection from the policy " +
"management metadata repository config.datasource", e);
}
} }
} }

@ -21,39 +21,35 @@ package org.wso2.carbon.policy.mgt.core.mgt.impl;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
import org.wso2.carbon.device.mgt.core.dao.DeviceDAO; import org.wso2.carbon.device.mgt.core.dao.DeviceDAO;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation; import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
import org.wso2.carbon.policy.mgt.common.Policy;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException; import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.common.ProfileFeature;
import org.wso2.carbon.policy.mgt.common.monitor.ComplianceData; import org.wso2.carbon.policy.mgt.common.monitor.ComplianceData;
import org.wso2.carbon.policy.mgt.common.monitor.ComplianceDecisionPoint; import org.wso2.carbon.policy.mgt.common.monitor.ComplianceDecisionPoint;
import org.wso2.carbon.policy.mgt.common.monitor.ComplianceFeature; import org.wso2.carbon.policy.mgt.common.monitor.ComplianceFeature;
import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException; import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException;
import org.wso2.carbon.policy.mgt.common.Policy;
import org.wso2.carbon.policy.mgt.common.ProfileFeature;
import org.wso2.carbon.policy.mgt.common.spi.PolicyMonitoringService; import org.wso2.carbon.policy.mgt.common.spi.PolicyMonitoringService;
import org.wso2.carbon.policy.mgt.core.dao.MonitoringDAO; import org.wso2.carbon.policy.mgt.core.dao.*;
import org.wso2.carbon.policy.mgt.core.dao.MonitoringDAOException;
import org.wso2.carbon.policy.mgt.core.dao.PolicyDAO;
import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory;
import org.wso2.carbon.policy.mgt.core.dao.PolicyManagerDAOException;
import org.wso2.carbon.policy.mgt.core.impl.ComplianceDecisionPointImpl; import org.wso2.carbon.policy.mgt.core.impl.ComplianceDecisionPointImpl;
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder; import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
import org.wso2.carbon.policy.mgt.core.mgt.MonitoringManager; import org.wso2.carbon.policy.mgt.core.mgt.MonitoringManager;
import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager; import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MonitoringManagerImpl implements MonitoringManager { public class MonitoringManagerImpl implements MonitoringManager {

@ -278,18 +278,21 @@ public class PolicyManagerImpl implements PolicyManager {
} }
@Override @Override
public Policy addPolicyToDevice(List<DeviceIdentifier> deviceIdentifierList, public Policy addPolicyToDevice(List<DeviceIdentifier> deviceIds, Policy policy) throws PolicyManagementException {
Policy policy) throws PolicyManagementException { List<Device> deviceList = new ArrayList<>();
DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl();
for (DeviceIdentifier deviceIdentifier : deviceIds) {
try {
deviceList.add(service.getDevice(deviceIdentifier));
} catch (DeviceManagementException e) {
throw new PolicyManagementException("Error occurred while adding the policy to device list", e);
}
}
try { try {
PolicyManagementDAOFactory.beginTransaction(); PolicyManagementDAOFactory.beginTransaction();
if (policy.getId() == 0) { if (policy.getId() == 0) {
policyDAO.addPolicy(policy); policyDAO.addPolicy(policy);
} }
List<Device> deviceList = new ArrayList<>();
DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl();
for (DeviceIdentifier deviceIdentifier : deviceIdentifierList) {
deviceList.add(service.getDevice(deviceIdentifier));
}
policy = policyDAO.addPolicyToDevice(deviceList, policy); policy = policyDAO.addPolicyToDevice(deviceList, policy);
PolicyManagementDAOFactory.commitTransaction(); PolicyManagementDAOFactory.commitTransaction();
@ -308,9 +311,6 @@ public class PolicyManagerImpl implements PolicyManager {
PolicyManagementDAOFactory.rollbackTransaction(); PolicyManagementDAOFactory.rollbackTransaction();
throw new PolicyManagementException("Error occurred while adding the policy (" throw new PolicyManagementException("Error occurred while adding the policy ("
+ policy.getId() + " - " + policy.getPolicyName() + ")", e); + policy.getId() + " - " + policy.getPolicyName() + ")", e);
} catch (DeviceManagementException e) {
PolicyManagementDAOFactory.rollbackTransaction();
throw new PolicyManagementException("Error occurred while adding the policy to device list", e);
} finally { } finally {
PolicyManagementDAOFactory.closeConnection(); PolicyManagementDAOFactory.closeConnection();
} }
@ -614,25 +614,33 @@ public class PolicyManagerImpl implements PolicyManager {
public List<Device> getPolicyAppliedDevicesIds(int policyId) throws PolicyManagementException { public List<Device> getPolicyAppliedDevicesIds(int policyId) throws PolicyManagementException {
List<Device> deviceList = new ArrayList<>(); List<Device> deviceList = new ArrayList<>();
List<Integer> deviceIds; List<Integer> deviceIds;
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
try { try {
PolicyManagementDAOFactory.openConnection(); PolicyManagementDAOFactory.openConnection();
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
deviceIds = policyDAO.getPolicyAppliedDevicesIds(policyId); deviceIds = policyDAO.getPolicyAppliedDevicesIds(policyId);
for (int deviceId : deviceIds) {
//TODO FIX ME
deviceList.add(deviceDAO.getDevice(new DeviceIdentifier(Integer.toString(deviceId), ""), tenantId));
}
} catch (PolicyManagerDAOException e) { } catch (PolicyManagerDAOException e) {
throw new PolicyManagementException("Error occurred while getting the device ids related to policy id (" + throw new PolicyManagementException("Error occurred while getting the device ids related to policy id (" +
policyId + ")", e); policyId + ")", e);
} catch (DeviceManagementDAOException e) {
throw new PolicyManagementException("Error occurred while getting the devices related to policy id (" +
policyId + ")", e);
} catch (SQLException e) { } catch (SQLException e) {
throw new PolicyManagementException("Error occurred while opening a connection to the data source", e); throw new PolicyManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
PolicyManagementDAOFactory.closeConnection(); PolicyManagementDAOFactory.closeConnection();
} }
try {
DeviceManagementDAOFactory.openConnection();
for (int deviceId : deviceIds) {
//TODO FIX ME
deviceList.add(deviceDAO.getDevice(new DeviceIdentifier(Integer.toString(deviceId), ""), tenantId));
}
} catch (SQLException e) {
throw new PolicyManagementException("Error occurred while opening a connection to the data source", e);
} catch (DeviceManagementDAOException e) {
throw new PolicyManagementException("Error occurred while retrieving device metadata", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
}
return deviceList; return deviceList;
} }
@ -680,7 +688,7 @@ public class PolicyManagerImpl implements PolicyManager {
Policy policySaved = policyDAO.getAppliedPolicy(deviceId); Policy policySaved = policyDAO.getAppliedPolicy(deviceId);
if (policySaved != null && policySaved.getId() != 0) { if (policySaved != null && policySaved.getId() != 0) {
if (policy.getId() != policySaved.getId()){ if (policy.getId() != policySaved.getId()) {
policyDAO.updateEffectivePolicyToDevice(deviceId, policy); policyDAO.updateEffectivePolicyToDevice(deviceId, policy);
} }
} else { } else {

@ -143,41 +143,58 @@ public class ProfileManagerImpl implements ProfileManager {
public Profile getProfile(int profileId) throws ProfileManagementException { public Profile getProfile(int profileId) throws ProfileManagementException {
Profile profile; Profile profile;
List<ProfileFeature> featureList; List<ProfileFeature> featureList;
DeviceType deviceType; DeviceType deviceType = null;
try { try {
PolicyManagementDAOFactory.openConnection(); PolicyManagementDAOFactory.openConnection();
profile = profileDAO.getProfiles(profileId); profile = profileDAO.getProfiles(profileId);
featureList = featureDAO.getFeaturesForProfile(profileId); featureList = featureDAO.getFeaturesForProfile(profileId);
deviceType = deviceTypeDAO.getDeviceType(profile.getDeviceType().getId());
profile.setProfileFeaturesList(featureList); profile.setProfileFeaturesList(featureList);
profile.setDeviceType(deviceType); profile.setDeviceType(deviceType);
} catch (ProfileManagerDAOException e) { } catch (ProfileManagerDAOException e) {
throw new ProfileManagementException("Error occurred while getting profile id (" + profileId + ")", e); throw new ProfileManagementException("Error occurred while getting profile id (" + profileId + ")", e);
} catch (FeatureManagerDAOException e) { } catch (FeatureManagerDAOException e) {
throw new ProfileManagementException("Error occurred while getting features related profile id (" + throw new ProfileManagementException("Error occurred while getting features related profile id (" +
profileId + ")", e); profileId + ")", e);
} catch (DeviceManagementDAOException e) {
throw new ProfileManagementException("Error occurred while getting device type related profile id (" +
profileId + ")", e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ProfileManagementException("Error occurred while opening a connection to the data source", e); throw new ProfileManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
PolicyManagementDAOFactory.closeConnection(); PolicyManagementDAOFactory.closeConnection();
} }
try {
DeviceManagementDAOFactory.openConnection();
deviceType = deviceTypeDAO.getDeviceType(profile.getDeviceType().getId());
profile.setDeviceType(deviceType);
} catch (SQLException e) {
throw new ProfileManagementException("Error occurred while opening a connection to the data source", e);
} catch (DeviceManagementDAOException e) {
throw new ProfileManagementException("Error occurred while getting device type related profile id (" +
profileId + ")", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
}
return profile; return profile;
} }
@Override @Override
public List<Profile> getAllProfiles() throws ProfileManagementException { public List<Profile> getAllProfiles() throws ProfileManagementException {
List<Profile> profileList; List<Profile> profileList;
List<DeviceType> deviceTypes;
try {
DeviceManagementDAOFactory.openConnection();
deviceTypes = deviceTypeDAO.getDeviceTypes();
} catch (SQLException e) {
throw new ProfileManagementException("Error occurred while opening a connection to the data source", e);
} catch (DeviceManagementDAOException e) {
throw new ProfileManagementException("Error occurred while getting device types related to profiles", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
}
try { try {
PolicyManagementDAOFactory.openConnection(); PolicyManagementDAOFactory.openConnection();
profileList = profileDAO.getAllProfiles(); profileList = profileDAO.getAllProfiles();
List<ProfileFeature> featureList = featureDAO.getAllProfileFeatures(); List<ProfileFeature> featureList = featureDAO.getAllProfileFeatures();
List<DeviceType> deviceTypes = deviceTypeDAO.getDeviceTypes();
for (Profile profile : profileList) { for (Profile profile : profileList) {
List<ProfileFeature> list = new ArrayList<ProfileFeature>(); List<ProfileFeature> list = new ArrayList<ProfileFeature>();
@ -198,8 +215,6 @@ public class ProfileManagerImpl implements ProfileManager {
throw new ProfileManagementException("Error occurred while getting profiles", e); throw new ProfileManagementException("Error occurred while getting profiles", e);
} catch (FeatureManagerDAOException e) { } catch (FeatureManagerDAOException e) {
throw new ProfileManagementException("Error occurred while getting features related to profiles", e); throw new ProfileManagementException("Error occurred while getting features related to profiles", e);
} catch (DeviceManagementDAOException e) {
throw new ProfileManagementException("Error occurred while getting device types related to profiles", e);
} catch (SQLException e) { } catch (SQLException e) {
throw new ProfileManagementException("Error occurred while opening a connection to the data source", e); throw new ProfileManagementException("Error occurred while opening a connection to the data source", e);
} finally { } finally {
@ -212,9 +227,19 @@ public class ProfileManagerImpl implements ProfileManager {
public List<Profile> getProfilesOfDeviceType(String deviceTypeName) throws ProfileManagementException { public List<Profile> getProfilesOfDeviceType(String deviceTypeName) throws ProfileManagementException {
List<Profile> profileList; List<Profile> profileList;
List<ProfileFeature> featureList; List<ProfileFeature> featureList;
DeviceType deviceType;
try {
DeviceManagementDAOFactory.openConnection();
deviceType = deviceTypeDAO.getDeviceType(deviceTypeName);
} catch (SQLException e) {
throw new ProfileManagementException("Error occurred while opening a connection to the data source", e);
} catch (DeviceManagementDAOException e) {
throw new ProfileManagementException("Error occurred while getting device types", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
}
try { try {
PolicyManagementDAOFactory.openConnection(); PolicyManagementDAOFactory.openConnection();
DeviceType deviceType = deviceTypeDAO.getDeviceType(deviceTypeName);
profileList = profileDAO.getProfilesOfDeviceType(deviceType); profileList = profileDAO.getProfilesOfDeviceType(deviceType);
featureList = featureDAO.getAllProfileFeatures(); featureList = featureDAO.getAllProfileFeatures();
@ -226,12 +251,9 @@ public class ProfileManagerImpl implements ProfileManager {
} }
} }
profile.setProfileFeaturesList(profileFeatureList); profile.setProfileFeaturesList(profileFeatureList);
} }
} catch (ProfileManagerDAOException e) { } catch (ProfileManagerDAOException e) {
throw new ProfileManagementException("Error occurred while getting profiles", e); throw new ProfileManagementException("Error occurred while getting profiles", e);
} catch (DeviceManagementDAOException e) {
throw new ProfileManagementException("Error occurred while getting device types", e);
} catch (FeatureManagerDAOException e) { } catch (FeatureManagerDAOException e) {
throw new ProfileManagementException("Error occurred while getting profile features types", e); throw new ProfileManagementException("Error occurred while getting profile features types", e);
} catch (SQLException e) { } catch (SQLException e) {

@ -29,7 +29,6 @@ import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl; import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementAdminService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
import org.wso2.carbon.policy.mgt.common.Policy; import org.wso2.carbon.policy.mgt.common.Policy;
@ -43,7 +42,6 @@ import org.wso2.carbon.policy.mgt.core.mgt.PolicyManager;
import org.wso2.carbon.policy.mgt.core.mgt.impl.MonitoringManagerImpl; import org.wso2.carbon.policy.mgt.core.mgt.impl.MonitoringManagerImpl;
import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl; import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl;
import org.wso2.carbon.policy.mgt.core.services.PolicyMonitoringServiceTest; import org.wso2.carbon.policy.mgt.core.services.PolicyMonitoringServiceTest;
import org.wso2.carbon.policy.mgt.core.task.MonitoringTask;
import java.util.List; import java.util.List;
@ -53,11 +51,12 @@ public class MonitoringTestCase extends BasePolicyManagementDAOTest {
private static final String ANDROID = "android"; private static final String ANDROID = "android";
DeviceIdentifier identifier = new DeviceIdentifier(); private DeviceIdentifier identifier = new DeviceIdentifier();
@BeforeClass @BeforeClass
@Override @Override
public void init() throws Exception { public void init() throws Exception {
} }
@Test @Test
@ -77,7 +76,6 @@ public class MonitoringTestCase extends BasePolicyManagementDAOTest {
log.debug(device.getDeviceIdentifier() + " ----- D"); log.debug(device.getDeviceIdentifier() + " ----- D");
} }
identifier.setType(ANDROID); identifier.setType(ANDROID);
identifier.setId(devices.get(0).getDeviceIdentifier()); identifier.setId(devices.get(0).getDeviceIdentifier());

@ -21,15 +21,16 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.*;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.Feature; import org.wso2.carbon.device.mgt.common.Feature;
import org.wso2.carbon.device.mgt.core.dao.*; import org.wso2.carbon.device.mgt.core.dao.*;
import org.wso2.carbon.device.mgt.core.dto.DeviceType; import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
import org.wso2.carbon.policy.mgt.common.*; import org.wso2.carbon.policy.mgt.common.*;
import org.wso2.carbon.policy.mgt.common.FeatureManagementException;
import org.wso2.carbon.policy.mgt.core.dao.PolicyManagementDAOFactory;
import org.wso2.carbon.policy.mgt.core.dao.PolicyManagerDAOException;
import org.wso2.carbon.policy.mgt.core.impl.PolicyAdministratorPointImpl; import org.wso2.carbon.policy.mgt.core.impl.PolicyAdministratorPointImpl;
import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder; import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
import org.wso2.carbon.policy.mgt.core.mgt.FeatureManager; import org.wso2.carbon.policy.mgt.core.mgt.FeatureManager;
@ -40,6 +41,7 @@ import org.wso2.carbon.policy.mgt.core.mgt.impl.PolicyManagerImpl;
import org.wso2.carbon.policy.mgt.core.mgt.impl.ProfileManagerImpl; import org.wso2.carbon.policy.mgt.core.mgt.impl.ProfileManagerImpl;
import org.wso2.carbon.policy.mgt.core.util.*; import org.wso2.carbon.policy.mgt.core.util.*;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
@ -64,8 +66,19 @@ public class PolicyDAOTestCase extends BasePolicyManagementDAOTest {
@Test @Test
public void addDeviceType() throws DeviceManagementDAOException { public void addDeviceType() throws DeviceManagementDAOException {
DeviceTypeDAO deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO(); try {
deviceTypeDAO.addDeviceType(DeviceTypeCreator.getDeviceType()); DeviceManagementDAOFactory.beginTransaction();
DeviceTypeDAO deviceTypeDAO = DeviceManagementDAOFactory.getDeviceTypeDAO();
deviceTypeDAO.addDeviceType(DeviceTypeCreator.getDeviceType());
} catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction();
throw new DeviceManagementDAOException("Error occurred while adding dummy device type", e);
} catch (TransactionManagementException e) {
throw new DeviceManagementDAOException("Error occurred while initiating a transaction to add dummy " +
"device type", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
}
} }
@ -74,23 +87,43 @@ public class PolicyDAOTestCase extends BasePolicyManagementDAOTest {
DeviceDAO deviceDAO = DeviceManagementDAOFactory.getDeviceDAO(); DeviceDAO deviceDAO = DeviceManagementDAOFactory.getDeviceDAO();
EnrolmentDAO enrolmentDAO = DeviceManagementDAOFactory.getEnrollmentDAO(); EnrolmentDAO enrolmentDAO = DeviceManagementDAOFactory.getEnrollmentDAO();
DeviceType type = DeviceTypeCreator.getDeviceType(); DeviceType type = DeviceTypeCreator.getDeviceType();
devices = DeviceCreator.getDeviceList(type); devices = DeviceCreator.getDeviceList(type);
for (Device device : devices) {
int id = deviceDAO.addDevice(type.getId(), device, -1234);
enrolmentDAO.addEnrollment(id, device.getEnrolmentInfo(), -1234);
}
List<Device> devices = deviceDAO.getDevices(-1234);
log.debug("--- Printing device taken by calling the device dao layer by tenant id."); try {
for (Device device : devices) { DeviceManagementDAOFactory.beginTransaction();
log.debug(device.getDeviceIdentifier()); for (Device device : devices) {
int id = deviceDAO.addDevice(type.getId(), device, -1234);
enrolmentDAO.addEnrollment(id, device.getEnrolmentInfo(), -1234);
}
} catch (DeviceManagementDAOException e) {
DeviceManagementDAOFactory.rollbackTransaction();
throw new DeviceManagementException("Error occurred while adding dummy device info", e);
} catch (TransactionManagementException e) {
throw new DeviceManagementException("Error occurred while initiating a transaction to add dummy " +
"device info", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
} }
log.debug("--- Printing device taken by calling the device dao layer by tenant id and device type."); log.debug("--- Printing device taken by calling the device dao layer by tenant id and device type.");
List<Device> devices2 = deviceDAO.getDevices("android", -1234); List<Device> devices2 = null;
try {
DeviceManagementDAOFactory.openConnection();
List<Device> devices = deviceDAO.getDevices(-1234);
log.debug("--- Printing device taken by calling the device dao layer by tenant id.");
for (Device device : devices) {
log.debug(device.getDeviceIdentifier());
}
devices2 = deviceDAO.getDevices("android", -1234);
} catch (SQLException e) {
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
} finally {
DeviceManagementDAOFactory.closeConnection();
}
for (Device device : devices2) { for (Device device : devices2) {
log.debug(device.getDeviceIdentifier()); log.debug(device.getDeviceIdentifier());

Loading…
Cancel
Save