Initial Import: Database transaction handling.

Initial Import: Error handling using ewf error library.
Added a CMS_ERROR_FILTER as part of registered filters of CMS_SERVICE
This commit is contained in:
jvelilla
2014-10-09 10:01:49 -03:00
parent 36dc48125c
commit 8d79447cf8
20 changed files with 302 additions and 167 deletions

View File

@@ -17,6 +17,7 @@ feature {NONE} -- Initialization
make (a_layout: CMS_LAYOUT)
do
create error_handler.make
layout := a_layout
create configuration.make (layout)
initialize
@@ -28,7 +29,6 @@ feature {NONE} -- Initialization
create modules.make (3)
build_api_service
build_mailer
initialize_modules
end
@@ -61,7 +61,6 @@ feature {NONE} -- Initialization
-- m.enable
-- modules.extend (m)
create {NODE_MODULE} m.make (Current)
m.enable
modules.extend (m)
@@ -89,15 +88,44 @@ feature -- Access
build_api_service
local
l_database: DATABASE_CONNECTION
l_retry: BOOLEAN
l_message: STRING
do
to_implement ("Refactor database setup")
if attached (create {JSON_CONFIGURATION}).new_database_configuration (layout.application_config_path) as l_database_config then
create {DATABASE_CONNECTION_MYSQL} l_database.login_with_connection_string (l_database_config.connection_string)
create api_service.make (create {CMS_STORAGE_MYSQL}.make (l_database))
if not l_retry then
to_implement ("Refactor database setup")
if attached (create {JSON_CONFIGURATION}).new_database_configuration (layout.application_config_path) as l_database_config then
create {DATABASE_CONNECTION_MYSQL} l_database.login_with_connection_string (l_database_config.connection_string)
create api_service.make (create {CMS_STORAGE_MYSQL}.make (l_database))
else
create {DATABASE_CONNECTION_NULL} l_database.make_common
create api_service.make (create {CMS_STORAGE_NULL})
end
else
to_implement ("Workaround code, persistence layer does not implement yet this kind of error handling.")
-- error hanling.
create {DATABASE_CONNECTION_NULL} l_database.make_common
create api_service.make (create {CMS_STORAGE_NULL})
create l_message.make (1024)
if attached ((create {EXCEPTION_MANAGER}).last_exception) as l_exception then
if attached l_exception.description as l_description then
l_message.append (l_description.as_string_32)
l_message.append ("%N%N")
elseif attached l_exception.trace as l_trace then
l_message.append (l_trace)
l_message.append ("%N%N")
else
l_message.append (l_exception.out)
l_message.append ("%N%N")
end
else
l_message.append ("The application crash without available information")
l_message.append ("%N%N")
end
error_handler.add_custom_error (0, " Database Connection ", l_message)
end
rescue
l_retry := True
retry
end
build_auth_engine

View File

@@ -32,6 +32,12 @@ feature -- Access
deferred
end
feature -- Status Report
error_handler: ERROR_HANDLER
-- Error handler.
feature -- Access: Site
site_id: READABLE_STRING_8

View File

@@ -165,9 +165,15 @@ feature -- Filters
do
log.write_debug (generator + ".create_filter")
l_filter := Void
-- Maintenance
create {WSF_MAINTENANCE_FILTER} f
f.set_next (l_filter)
l_filter := f
-- Error Filter
create {CMS_ERROR_FILTER} f.make (setup)
f.set_next (l_filter)
l_filter := f
-- Include filters from modules

View File

@@ -0,0 +1,33 @@
note
description: "Summary description for {CMS_ERROR_FILTER}."
date: "$Date$"
revision: "$Revision$"
class
CMS_ERROR_FILTER
inherit
WSF_URI_TEMPLATE_HANDLER
CMS_HANDLER
WSF_FILTER
create
make
feature -- Basic operations
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
-- Execute the filter
do
if not setup.error_handler.has_error then
log.write_information (generator + ".execute")
execute_next (req, res)
else
log.write_critical (generator + ".execute" + setup.error_handler.as_string_representation )
(create {ERROR_500_CMS_RESPONSE}.make (req, res, setup, "master2/error")).execute
setup.error_handler.reset
end
end
end