var rectArr = [];
var canvasArr = [];
$(function () {
//초기 세팅
for (i = 0; i < $(".rect").length; i++) {
var rect = $($(".rect")[i])
var idx = rect.attr("idx");
var x = rect.offset().left;
var y = rect.offset().top;
var left = rect.css("left");
var top = rect.css("top");
var w = rect.width();
var h = rect.height();
rectArr[idx] = { x: x, y: y, left: left, top: top, w: w, h: h };
}
var width = $("#box").width();
var height = $("#box").height();
for (i = 0; i < height; i++) {
canvasArr[i] = new Array(width);
}
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
canvasArr[i][j] = 0;
}
}
});
$(".rect").draggable({
containment: "parent",
start: function (event, ui) {
},
stop: function (event, ui) {
var idx = $(this).attr("idx");
var left = $(this).css("left");
var top = $(this).css("top");
var x = $(this).offset().left;
var y = $(this).offset().top;
var w = $(this).width();
var h = $(this).height();
var thisObj = { x: x, y: y, w: w, h: h, idx: idx };
if (overLapChecker(".rect", thisObj)) {
//통과
rectArr[idx] = { x: x, y: y, left: left, top: top, w: w, h: h };
} else {
//겹침 - 초기화
var obj = rectArr[idx];
$(".rect[idx=" + idx + "]").css("top", obj.top);
$(".rect[idx=" + idx + "]").css("left", obj.left);
}
}
}).resizable({
containment: "parent",
start: function (event, ui) {
},
stop: function (event, ui) {
var idx = $(this).attr("idx");
var left = $(this).css("left");
var top = $(this).css("top");
var x = $(this).offset().left;
var y = $(this).offset().top;
var w = $(this).width();
var h = $(this).height();
var thisObj = { x: x, y: y, w: w, h: h, idx: idx };
if (overLapChecker(".rect", thisObj)) {
//통과
rectArr[idx] = { x: x, y: y, left: left, top: top, w: w, h: h };
} else {
//겹침 - 초기화
var obj = rectArr[idx];
$(".rect[idx=" + idx + "]").css("top", obj.top);
$(".rect[idx=" + idx + "]").css("left", obj.left);
$(".rect[idx=" + idx + "]").css("width", obj.w);
$(".rect[idx=" + idx + "]").css("height", obj.h);
}
}
})
function overLapChecker(className, thisObj) {
var len = $(className).length;
if (len > 0) {
var thisMapArr = JSON.parse(JSON.stringify(canvasArr)); //빈 배열을 복사한다.
var x = thisObj.x;
var y = thisObj.y;
var w = thisObj.w;
var h = thisObj.h;
for (i = y; i < y + h; i++) {
for (j = x; j < x + w; j++) {
thisMapArr[i][j] = thisMapArr[i][j] + 1;
}
}
for (z = 0; z < len; z++) {
var idx = $($(className)[z]).attr("idx");
if (idx == thisObj.idx) {
continue;
} else {
var checkerArr = JSON.parse(JSON.stringify(thisMapArr));
var x2 = $(".rect[idx=" + idx + "]").offset().left;
var y2 = $(".rect[idx=" + idx + "]").offset().top;
var w2 = $(".rect[idx=" + idx + "]").width();
var h2 = $(".rect[idx=" + idx + "]").height();
for (i = y2; i < y2 + h2; i++) {
for (j = x2; j < x2 + w2; j++) {
checkerArr[i][j] = checkerArr[i][j] + 1;
if (checkerArr[i][j] > 1) {
return false;
}
}
}
}
}
}
return true;
}
드래그, 리사이즈 이벤트 처리를 하고 각 도형의 위치를 특정 배열에 담아둡니다.
드래그 또는 리사이즈 이벤트가 멈추면 멈추는 동시에 위치를 체크합니다. 겹치는 동선이 존재하여 배열에(2)가 처리되면 원위치 시킵니다.
자바 소켓 프로그램 + 스케줄러로 구성된 프로세스를 실서버 운용중에 있었는데, 주말간 문제가 없었는지 확인해보니 주말사이에 스케줄러가 동작할때마다 에러를 뿜어내고 있었습니다.
[2020-07-18 11:00:00] ERROR (utils.SqlSessionUtils - selectList:92) - Exception
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.transaction.TransactionException: Error configuring AutoCommit. Your driver may not support getAutoCommit() or setAutoCommit(). Requested setting: false. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 86,387,538 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at kr.or.kisa.ktoaInterlock.utils.SqlSessionUtils.selectList(SqlSessionUtils.java:90)
at kr.or.kisa.ktoaInterlock.dao.InterlockDao.selectYesterdayReportList(InterlockDao.java:95)
at kr.or.kisa.ktoaInterlock.scheduler.InterLockScheduler.execute(InterLockScheduler.java:40)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
와 같은 에러를 출력중이였는데...
DB는 mysql을 사용중이며 해당 스케줄러는 하루에 한번 돌도록 구성되어 있습니다.
에러 내용을 가지고 검색을 해보니, 너무 오랫동안 mysql을 사용하지 않고 있다가 갑자기 사용하려고 하면 발생하는 에러로 mysql에서 오랫동안 사용을 하지 않으니 강제로 종료해버리는 이슈라고 합니다.