Package org.fbsql.servlet
Class DbRequestProcessor
- java.lang.Object
-
- org.fbsql.servlet.DbRequestProcessor
-
- All Implemented Interfaces:
java.lang.Runnable
public class DbRequestProcessor extends java.lang.Object implements java.lang.Runnable
DbRequestProcessor contains the processing logic that the @link(DbServlet) performs as it receives each servlet request from the container.
-
-
Field Summary
Fields Modifier and Type Field Description private javax.servlet.AsyncContext
asyncContext
private ConnectionPoolManager
connectionPoolManager
private boolean
debug
private java.util.Map<java.lang.String,ParseStmtDeclareStatement.StmtDeclareStatement>
declaredStatementsMap
private static java.lang.String
EXEC_TYPE_QUERY
Execute type: query WARNING! This constant used also in JavaScript partprivate static java.lang.String
EXEC_TYPE_UPDATE
Execute type: update WARNING! This constant used also in JavaScript partprivate static java.lang.String
FBSQL_REMOTE_ROLE
private static java.lang.String
FBSQL_REMOTE_SESSION_CREATION_TIME
private static java.lang.String
FBSQL_REMOTE_SESSION_ID
private static java.lang.String
FBSQL_REMOTE_SESSION_LAST_ACCESSED_TIME
private static java.lang.String
FBSQL_REMOTE_USER
private static java.lang.String
FBSQL_REMOTE_USER_INFO
private static java.lang.String
FUN_REMOTE_ROLE
private static java.lang.String
FUN_REMOTE_SESSION_CREATION_TIME
private static java.lang.String
FUN_REMOTE_SESSION_ID
private static java.lang.String
FUN_REMOTE_SESSION_LAST_ACCESSED_TIME
private static java.lang.String
FUN_REMOTE_USER
private static java.lang.String
FUN_REMOTE_USER_INFO
private static java.lang.String
FUT_GET_COOKIE
private static java.lang.String
FUT_GET_HTTP_HEADER_AS_CHAR
private static java.lang.String
FUT_GET_HTTP_HEADER_AS_DATE
private static java.lang.String
FUT_GET_HTTP_HEADER_AS_INTEGER
private static java.lang.String
FUT_GET_HTTP_SESSION_ATTRIBUTE_AS_CHAR
private static java.lang.String
FUT_GET_HTTP_SESSION_ATTRIBUTE_AS_INTEGER
private static java.lang.String
FUT_IN_ROLE
private java.lang.String
instanceDirectory
private java.lang.String
instanceName
private java.util.Map<java.lang.String,java.util.Map<java.lang.String,org.mozilla.javascript.Function>>
mapFunctions
private java.util.Map<StaticStatement,ReadyResult>
mapJson
private java.util.Map<java.lang.String,org.mozilla.javascript.Scriptable>
mapScopes
private java.util.Queue<javax.servlet.AsyncContext>
ongoingRequests
private ParseNativeStmt
parseNativeStmt
private java.util.Map<java.lang.String,NonNativeProcedure>
proceduresMap
private DbServlet.SharedCoder
sharedCoder
private static java.lang.String
SQL_FALSE
SQL FALSE constantprivate static java.lang.String
SQL_NULL
SQL NULL constantprivate static java.lang.String
SQL_QUOTE_CHAR
SQL quote characterprivate static java.lang.String
SQL_TRUE
SQL TRUE constantprivate ParseStmtConnectTo.StmtConnectTo
stmtConnectTo
-
Constructor Summary
Constructors Constructor Description DbRequestProcessor(java.lang.String instanceName, java.lang.String instanceDirectory, ParseStmtConnectTo.StmtConnectTo stmtConnectTo, javax.servlet.AsyncContext asyncCtx, boolean debug, ConnectionPoolManager connectionPoolManager, java.util.Map<java.lang.String,ParseStmtDeclareStatement.StmtDeclareStatement> declaredStatementsMap, java.util.Map<java.lang.String,NonNativeProcedure> proceduresMap, java.util.Map<java.lang.String,org.mozilla.javascript.Scriptable> mapScopes, java.util.Map<java.lang.String,java.util.Map<java.lang.String,org.mozilla.javascript.Function>> mapFunctions, java.util.Map<StaticStatement,ReadyResult> mapJson, java.util.Queue<javax.servlet.AsyncContext> ongoingRequests, ParseNativeStmt parseNativeStmt, DbServlet.SharedCoder sharedCoder)
Constructs DbRequestProcessor object
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static java.lang.String
generateExecutionResultJson(long timestamp, java.lang.String updateResultJson)
Generate Execution Result JSON-formatted stringprivate static java.lang.String
generateStatementInfoJson(java.lang.String instanceName, java.lang.String statementId, java.lang.String unprocessedNamedPreparedStatement, java.lang.String paramArrayJson)
Generate Statement Info JSON-formatted stringprivate static java.lang.String
generateUserInfoJson(javax.servlet.http.HttpServletRequest request, java.lang.String clientInfoJson, java.lang.CharSequence sessionInfoJson)
Generate User Info JSON-formatted stringprivate static java.lang.String
getClientInfo(javax.servlet.http.HttpServletRequest request, java.util.Base64.Decoder decoder)
private static java.io.BufferedReader
getCustomDataReader(javax.servlet.http.HttpServletRequest request, java.util.Base64.Decoder decoder)
void
run()
Implementation of Runnable.run() method Overview of request processor logic - Parse request body - Check SQL statement against white list (list of allowed SQL statements) - Execute SQL statement if allowedprivate static java.lang.String
simpleExecuteUpdateResultJson(int rowCount)
Utility method generates ExecuteUpdate result JSON
-
-
-
Field Detail
-
SQL_NULL
private static final java.lang.String SQL_NULL
SQL NULL constant- See Also:
- Constant Field Values
-
SQL_FALSE
private static final java.lang.String SQL_FALSE
SQL FALSE constant- See Also:
- Constant Field Values
-
SQL_TRUE
private static final java.lang.String SQL_TRUE
SQL TRUE constant- See Also:
- Constant Field Values
-
SQL_QUOTE_CHAR
private static final java.lang.String SQL_QUOTE_CHAR
SQL quote character- See Also:
- Constant Field Values
-
EXEC_TYPE_QUERY
private static final java.lang.String EXEC_TYPE_QUERY
Execute type: query WARNING! This constant used also in JavaScript part- See Also:
- Constant Field Values
-
EXEC_TYPE_UPDATE
private static final java.lang.String EXEC_TYPE_UPDATE
Execute type: update WARNING! This constant used also in JavaScript part- See Also:
- Constant Field Values
-
FUT_IN_ROLE
private static final java.lang.String FUT_IN_ROLE
- See Also:
- Constant Field Values
-
FUT_GET_COOKIE
private static final java.lang.String FUT_GET_COOKIE
- See Also:
- Constant Field Values
-
FUT_GET_HTTP_SESSION_ATTRIBUTE_AS_CHAR
private static final java.lang.String FUT_GET_HTTP_SESSION_ATTRIBUTE_AS_CHAR
- See Also:
- Constant Field Values
-
FUT_GET_HTTP_SESSION_ATTRIBUTE_AS_INTEGER
private static final java.lang.String FUT_GET_HTTP_SESSION_ATTRIBUTE_AS_INTEGER
- See Also:
- Constant Field Values
-
FUT_GET_HTTP_HEADER_AS_CHAR
private static final java.lang.String FUT_GET_HTTP_HEADER_AS_CHAR
- See Also:
- Constant Field Values
-
FUT_GET_HTTP_HEADER_AS_DATE
private static final java.lang.String FUT_GET_HTTP_HEADER_AS_DATE
- See Also:
- Constant Field Values
-
FUT_GET_HTTP_HEADER_AS_INTEGER
private static final java.lang.String FUT_GET_HTTP_HEADER_AS_INTEGER
- See Also:
- Constant Field Values
-
FUN_REMOTE_USER
private static final java.lang.String FUN_REMOTE_USER
- See Also:
- Constant Field Values
-
FUN_REMOTE_ROLE
private static final java.lang.String FUN_REMOTE_ROLE
- See Also:
- Constant Field Values
-
FUN_REMOTE_SESSION_ID
private static final java.lang.String FUN_REMOTE_SESSION_ID
- See Also:
- Constant Field Values
-
FUN_REMOTE_SESSION_CREATION_TIME
private static final java.lang.String FUN_REMOTE_SESSION_CREATION_TIME
- See Also:
- Constant Field Values
-
FUN_REMOTE_SESSION_LAST_ACCESSED_TIME
private static final java.lang.String FUN_REMOTE_SESSION_LAST_ACCESSED_TIME
- See Also:
- Constant Field Values
-
FUN_REMOTE_USER_INFO
private static final java.lang.String FUN_REMOTE_USER_INFO
- See Also:
- Constant Field Values
-
FBSQL_REMOTE_USER
private static final java.lang.String FBSQL_REMOTE_USER
- See Also:
- Constant Field Values
-
FBSQL_REMOTE_ROLE
private static final java.lang.String FBSQL_REMOTE_ROLE
- See Also:
- Constant Field Values
-
FBSQL_REMOTE_SESSION_ID
private static final java.lang.String FBSQL_REMOTE_SESSION_ID
- See Also:
- Constant Field Values
-
FBSQL_REMOTE_SESSION_CREATION_TIME
private static final java.lang.String FBSQL_REMOTE_SESSION_CREATION_TIME
- See Also:
- Constant Field Values
-
FBSQL_REMOTE_SESSION_LAST_ACCESSED_TIME
private static final java.lang.String FBSQL_REMOTE_SESSION_LAST_ACCESSED_TIME
- See Also:
- Constant Field Values
-
FBSQL_REMOTE_USER_INFO
private static final java.lang.String FBSQL_REMOTE_USER_INFO
- See Also:
- Constant Field Values
-
instanceName
private java.lang.String instanceName
-
instanceDirectory
private java.lang.String instanceDirectory
-
stmtConnectTo
private ParseStmtConnectTo.StmtConnectTo stmtConnectTo
-
asyncContext
private javax.servlet.AsyncContext asyncContext
-
debug
private boolean debug
-
connectionPoolManager
private ConnectionPoolManager connectionPoolManager
-
declaredStatementsMap
private java.util.Map<java.lang.String,ParseStmtDeclareStatement.StmtDeclareStatement> declaredStatementsMap
-
proceduresMap
private java.util.Map<java.lang.String,NonNativeProcedure> proceduresMap
-
mapScopes
private java.util.Map<java.lang.String,org.mozilla.javascript.Scriptable> mapScopes
-
mapFunctions
private java.util.Map<java.lang.String,java.util.Map<java.lang.String,org.mozilla.javascript.Function>> mapFunctions
-
mapJson
private java.util.Map<StaticStatement,ReadyResult> mapJson
-
ongoingRequests
private java.util.Queue<javax.servlet.AsyncContext> ongoingRequests
-
sharedCoder
private DbServlet.SharedCoder sharedCoder
-
parseNativeStmt
private ParseNativeStmt parseNativeStmt
-
-
Constructor Detail
-
DbRequestProcessor
public DbRequestProcessor(java.lang.String instanceName, java.lang.String instanceDirectory, ParseStmtConnectTo.StmtConnectTo stmtConnectTo, javax.servlet.AsyncContext asyncCtx, boolean debug, ConnectionPoolManager connectionPoolManager, java.util.Map<java.lang.String,ParseStmtDeclareStatement.StmtDeclareStatement> declaredStatementsMap, java.util.Map<java.lang.String,NonNativeProcedure> proceduresMap, java.util.Map<java.lang.String,org.mozilla.javascript.Scriptable> mapScopes, java.util.Map<java.lang.String,java.util.Map<java.lang.String,org.mozilla.javascript.Function>> mapFunctions, java.util.Map<StaticStatement,ReadyResult> mapJson, java.util.Queue<javax.servlet.AsyncContext> ongoingRequests, ParseNativeStmt parseNativeStmt, DbServlet.SharedCoder sharedCoder)
Constructs DbRequestProcessor object- Parameters:
instanceName
-stmtConnectTo
-asyncCtx
-debug
-connectionPoolManager
-declaredStatementsMap
-proceduresMap
-mapScopes
-mapFunctions
-mapJson
-ongoingRequests
-sharedCoder
-
-
-
Method Detail
-
run
public void run()
Implementation of Runnable.run() method Overview of request processor logic - Parse request body - Check SQL statement against white list (list of allowed SQL statements) - Execute SQL statement if allowed- Specified by:
run
in interfacejava.lang.Runnable
-
getClientInfo
private static java.lang.String getClientInfo(javax.servlet.http.HttpServletRequest request, java.util.Base64.Decoder decoder) throws java.io.IOException
- Throws:
java.io.IOException
-
getCustomDataReader
private static java.io.BufferedReader getCustomDataReader(javax.servlet.http.HttpServletRequest request, java.util.Base64.Decoder decoder) throws java.io.IOException
- Throws:
java.io.IOException
-
simpleExecuteUpdateResultJson
private static java.lang.String simpleExecuteUpdateResultJson(int rowCount)
Utility method generates ExecuteUpdate result JSON- Parameters:
rowCount
-- Returns:
-
generateUserInfoJson
private static java.lang.String generateUserInfoJson(javax.servlet.http.HttpServletRequest request, java.lang.String clientInfoJson, java.lang.CharSequence sessionInfoJson) throws java.io.IOException, java.text.ParseException
Generate User Info JSON-formatted string- Parameters:
request
-clientInfoJson
-- Returns:
- Throws:
java.io.IOException
java.text.ParseException
-
generateStatementInfoJson
private static java.lang.String generateStatementInfoJson(java.lang.String instanceName, java.lang.String statementId, java.lang.String unprocessedNamedPreparedStatement, java.lang.String paramArrayJson)
Generate Statement Info JSON-formatted string- Parameters:
instanceName
-statementId
-unprocessedNamedPreparedStatement
-paramArrayJson
-- Returns:
-
generateExecutionResultJson
private static java.lang.String generateExecutionResultJson(long timestamp, java.lang.String updateResultJson)
Generate Execution Result JSON-formatted string- Parameters:
timestamp
-updateResultJson
-- Returns:
-
-