use of org.dbflute.hook.CallbackContext in project lastaflute by lastaflute.
the class SimpleAsyncManager method createRunnable.
// ===================================================================================
// Create Runnable
// ===============
protected Runnable createRunnable(ConcurrentAsyncCall call, String keyword) {
// in caller thread
final Map<String, Object> threadCacheMap = inheritThreadCacheContext(call);
final AccessContext accessContext = inheritAccessContext(call);
final CallbackContext callbackContext = inheritCallbackContext(call);
final Map<String, Object> variousContextMap = findCallerVariousContextMap();
return () -> {
// in new thread
prepareThreadCacheContext(call, threadCacheMap);
preparePreparedAccessContext(call, accessContext);
prepareCallbackContext(call, callbackContext);
final Object variousPreparedObj = prepareVariousContext(call, variousContextMap);
final long before = showRunning(keyword);
Throwable cause = null;
try {
call.callback();
} catch (Throwable e) {
handleAsyncCallbackException(call, before, e);
cause = e;
} finally {
// should be before clearing because of using them
showFinishing(keyword, before, cause);
clearVariousContext(call, variousContextMap, variousPreparedObj);
clearCallbackContext(call);
clearPreparedAccessContext(call);
clearThreadCacheContext(call);
}
};
}
use of org.dbflute.hook.CallbackContext in project lastaflute by lastaflute.
the class SimpleAsyncManager method extractSqlCounter.
// ===================================================================================
// SQL Counter
// ===========
protected OptionalThing<ExecutedSqlCounter> extractSqlCounter() {
final CallbackContext context = CallbackContext.getCallbackContextOnThread();
if (context == null) {
return OptionalThing.empty();
}
final SqlStringFilter filter = context.getSqlStringFilter();
if (filter == null || !(filter instanceof ExecutedSqlCounter)) {
return OptionalThing.empty();
}
return OptionalThing.of(((ExecutedSqlCounter) filter));
}
use of org.dbflute.hook.CallbackContext in project lastaflute by lastaflute.
the class SimpleAsyncManager method doInheritCallbackContext.
protected CallbackContext doInheritCallbackContext(ConcurrentAsyncCall call) {
// null allowed
final CallbackContext src = CallbackContext.getCallbackContextOnThread();
if (src == null) {
return null;
}
final CallbackContext dest = newCallbackContext();
final ConcurrentAsyncOption option = call.option();
final ConcurrentAsyncOption defaultOption = defaultConcurrentAsyncOption;
if (isInherit(option.getBehaviorCommandHookType(), defaultOption.getBehaviorCommandHookType())) {
final BehaviorCommandHook hook = src.getBehaviorCommandHook();
if (hook != null) {
dest.setBehaviorCommandHook(hook);
}
}
if (isInherit(option.getSqlFireHookType(), defaultOption.getSqlFireHookType())) {
final SqlFireHook hook = src.getSqlFireHook();
if (hook != null) {
dest.setSqlFireHook(hook);
}
} else {
// as default
dest.setSqlFireHook(createDefaultSqlFireHook(call));
}
if (isInherit(option.getSqlLogHandlerType(), defaultOption.getSqlLogHandlerType())) {
final SqlLogHandler handler = src.getSqlLogHandler();
if (handler != null) {
dest.setSqlLogHandler(handler);
}
}
if (isInherit(option.getSqlResultHandlerType(), defaultOption.getSqlResultHandlerType())) {
final SqlResultHandler handler = src.getSqlResultHandler();
if (handler != null) {
dest.setSqlResultHandler(handler);
}
} else {
dest.setSqlResultHandler(createDefaultSqlResultHandler(call));
}
if (isInherit(option.getSqlStringFilterType(), defaultOption.getSqlStringFilterType())) {
final SqlStringFilter filter = src.getSqlStringFilter();
if (filter != null) {
dest.setSqlStringFilter(filter);
}
} else {
// as default
dest.setSqlStringFilter(createDefaultSqlStringFilter(call));
}
return dest;
}
use of org.dbflute.hook.CallbackContext in project dbflute-core by dbflute.
the class TnAbstractBasicSqlHandlerTest method test_logSql_whitebox_sqlResultHandlerOnly.
public void test_logSql_whitebox_sqlResultHandlerOnly() {
// ## Arrange ##
final List<String> markList = new ArrayList<String>();
TnAbstractBasicSqlHandler handler = new TnAbstractBasicSqlHandler(null, null, "select ...") {
@Override
protected String buildDisplaySql(String sql, Object[] args) {
markList.add("buildDisplaySql");
return "select ...";
}
@Override
protected void logDisplaySql(String displaySql) {
throw new IllegalStateException("log should not be called!");
}
@Override
protected void log(String msg) {
throw new IllegalStateException("log should not be called!");
}
@Override
protected void saveResultSqlLogInfo(SqlLogInfo sqlLogInfo) {
markList.add("saveResultSqlLogInfo");
super.saveResultSqlLogInfo(sqlLogInfo);
}
@Override
protected boolean isLogEnabled() {
return false;
}
@Override
protected void assertObjectNotNull(String variableName, Object value) {
// for no check of constructor
}
};
// ## Act ##
try {
CallbackContext callbackContext = new CallbackContext();
callbackContext.setSqlResultHandler(new SqlResultHandler() {
public void handle(SqlResultInfo sqlResultInfo) {
throw new IllegalStateException("handle should not be called!");
}
});
CallbackContext.setCallbackContextOnThread(callbackContext);
handler.logSql(null, null);
assertEquals("select ...", InternalMapContext.getResultSqlLogInfo().getDisplaySql());
} finally {
CallbackContext.clearCallbackContextOnThread();
InternalMapContext.clearInternalMapContextOnThread();
}
// ## Assert ##
assertEquals(2, markList.size());
assertEquals("saveResultSqlLogInfo", markList.get(0));
assertEquals("buildDisplaySql", markList.get(1));
}
use of org.dbflute.hook.CallbackContext in project dbflute-core by dbflute.
the class TnAbstractBasicSqlHandlerTest method test_logSql_whitebox_sqlLogHandlerOnly.
public void test_logSql_whitebox_sqlLogHandlerOnly() {
// ## Arrange ##
final List<String> markList = new ArrayList<String>();
final Object[] args = new Object[] {};
final Class<?>[] argsTypes = new Class<?>[] {};
TnAbstractBasicSqlHandler handler = new TnAbstractBasicSqlHandler(null, null, "select ...") {
@Override
protected String buildDisplaySql(String sql, Object[] args) {
markList.add("buildDisplaySql");
return "select ...";
}
@Override
protected void logDisplaySql(String displaySql) {
throw new IllegalStateException("log should not be called!");
}
@Override
protected void log(String msg) {
throw new IllegalStateException("log should not be called!");
}
@Override
protected void saveResultSqlLogInfo(SqlLogInfo sqlLogInfo) {
throw new IllegalStateException("log should not be called!");
}
@Override
protected boolean isLogEnabled() {
return false;
}
@Override
protected void assertObjectNotNull(String variableName, Object value) {
// for no check of constructor
}
};
// ## Act ##
try {
CallbackContext callbackContext = new CallbackContext();
callbackContext.setSqlLogHandler(new SqlLogHandler() {
public void handle(SqlLogInfo info) {
markList.add("handle");
assertEquals("select ...", info.getDisplaySql());
assertEquals(newArrayList(args), newArrayList(info.getBindArgs()));
assertEquals(newArrayList(argsTypes), newArrayList(info.getBindArgTypes()));
}
});
CallbackContext.setCallbackContextOnThread(callbackContext);
handler.logSql(args, argsTypes);
assertNull(InternalMapContext.getResultSqlLogInfo());
} finally {
CallbackContext.clearCallbackContextOnThread();
InternalMapContext.clearInternalMapContextOnThread();
}
// ## Assert ##
assertEquals(2, markList.size());
assertEquals("handle", markList.get(0));
assertEquals("buildDisplaySql", markList.get(1));
}
Aggregations