From 14194248ad667780976157cb1e6bf675079d71c6 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Fri, 17 Apr 2020 11:57:18 +0200 Subject: [PATCH] EDMI: Load Object Store Paths --- EDMI.File.Test/PathTest.vb | 2 +- EDMI.File/Path.vb | 25 +--- GUIs.Test.EDMIBenchmark/Form1.vb | 2 +- Modules.Database/MSSQLServer.vb | 24 +++- .../DigitalData.Services.EDMIService.xsd | 4 +- .../EDMIServiceReference/Reference.vb | 12 +- Modules.EDMIAPI/Document.vb | 6 +- Service.EDMIService/AppConfig.vb | 22 +-- Service.EDMIService/EDMIService.vb | 41 ++++-- Service.EDMIService/EDMIService.vbproj | 1 + Service.EDMIService/GlobalState.vb | 46 +++++++ Service.EDMIService/WindowsService.vb | 129 +++++++++--------- 12 files changed, 188 insertions(+), 126 deletions(-) create mode 100644 Service.EDMIService/GlobalState.vb diff --git a/EDMI.File.Test/PathTest.vb b/EDMI.File.Test/PathTest.vb index b27d01a6..397ff020 100644 --- a/EDMI.File.Test/PathTest.vb +++ b/EDMI.File.Test/PathTest.vb @@ -15,7 +15,7 @@ Imports DigitalData.Modules.EDMI Dim oDay = oNow.Day.ToString.PadLeft(2, "0") - Assert.AreEqual(oPath.GetActivePath("TestDocumentType"), $"{oTempPath}EDMI\Active\TestDocumentType\{oYear}\{oMonth}\{oDay}") + Assert.AreEqual(oPath.GetFullPath("TestDocumentType"), $"{oTempPath}EDMI\Active\TestDocumentType\{oYear}\{oMonth}\{oDay}") Assert.AreEqual(oPath.GetArchivePath("TestDocumentType"), $"{oTempPath}EDMI\Archive\TestDocumentType\{oYear}\{oMonth}\{oDay}") End Sub diff --git a/EDMI.File/Path.vb b/EDMI.File/Path.vb index ce701e4f..3b57e9d6 100644 --- a/EDMI.File/Path.vb +++ b/EDMI.File/Path.vb @@ -6,38 +6,21 @@ Public Class Path Private ReadOnly _Logger As Logger Private ReadOnly _BasePath As String - Public Const PATH_ACTIVE As String = "Active" - Public Const PATH_ARCHIVE As String = "Archive" - Public Const PATH_EDMI As String = "EDMI" - Public Sub New(LogConfig As LogConfig, DatastoreBasePath As String) _LogConfig = LogConfig _Logger = LogConfig.GetLogger() _BasePath = DatastoreBasePath End Sub - Public Function GetActivePath(DocumentType As String, Optional FileName As String = "") As String - Dim oParts = New List(Of String) From {_BasePath, PATH_EDMI, PATH_ACTIVE} - oParts.AddRange(Do_GetRelativePath(DocumentType, FileName)) - - Return IO.Path.Combine(oParts.ToArray()) - End Function - - Public Function GetActivePathFromRelativePath(RelativePath As String) As String - Dim oParts = New List(Of String) From {_BasePath, PATH_EDMI, PATH_ACTIVE} - oParts.Add(RelativePath) - Return IO.Path.Combine(oParts.ToArray) - End Function - - Public Function GetArchivePath(DocumentType As String, Optional FileName As String = "") As String - Dim oParts = New List(Of String) From {_BasePath, PATH_EDMI, PATH_ARCHIVE} + Public Function GetFullPath(DocumentType As String, Optional FileName As String = "") As String + Dim oParts = New List(Of String) From {_BasePath} oParts.AddRange(Do_GetRelativePath(DocumentType, FileName)) Return IO.Path.Combine(oParts.ToArray()) End Function - Public Function GetArchivePathFromRelativePath(RelativePath As String) As String - Dim oParts = New List(Of String) From {_BasePath, PATH_EDMI, PATH_ARCHIVE} + Public Function GetFullPathFromRelativePath(RelativePath As String) As String + Dim oParts = New List(Of String) From {_BasePath} oParts.Add(RelativePath) Return IO.Path.Combine(oParts.ToArray) End Function diff --git a/GUIs.Test.EDMIBenchmark/Form1.vb b/GUIs.Test.EDMIBenchmark/Form1.vb index c117e859..460d4294 100644 --- a/GUIs.Test.EDMIBenchmark/Form1.vb +++ b/GUIs.Test.EDMIBenchmark/Form1.vb @@ -57,7 +57,7 @@ Public Class Form1 Await oStream.ReadAsync(oContents, 0, oFileInfo.Length) End Using - Dim oResult As EDMIServiceReference.DocumentResult = Await _Channel.ImportFileAsync(oFileInfo.Name, oContents, Environment.UserName) + Dim oResult As EDMIServiceReference.DocumentResult = Await _Channel.ImportFileAsync(oFileInfo.Name, oContents, 1, "WichtigesDokument", 0) If oResult.OK Then AddLogMessage($"File [{oFileInfo.Name}] with Id [{oResult.Document.FileId}] imported!") Else diff --git a/Modules.Database/MSSQLServer.vb b/Modules.Database/MSSQLServer.vb index d335ce07..a27a4358 100644 --- a/Modules.Database/MSSQLServer.vb +++ b/Modules.Database/MSSQLServer.vb @@ -98,6 +98,8 @@ Public Class MSSQLServer Return Nothing End If + _Logger.Debug("Running Query: {0}", SqlCommand) + Using oConnection = GetSQLConnection() Using oSQLCOmmand = oConnection.CreateCommand() oSQLCOmmand.CommandText = SqlCommand @@ -137,6 +139,8 @@ Public Class MSSQLServer Return Nothing End If + _Logger.Debug("Running Query: {0}", SQLCommand) + Using oConnection = GetSQLConnection() Using oSQLCOmmand = oConnection.CreateCommand() oSQLCOmmand.CommandText = SQLCommand @@ -166,15 +170,17 @@ Public Class MSSQLServer Return GetScalarValue(ScalarSQL) End Function - Public Function GetScalarValue(SQLQuery As String, Timeout As Integer) As Object Implements IDatabase.GetScalarValue + Public Function GetScalarValue(SQLCommand As String, Timeout As Integer) As Object Implements IDatabase.GetScalarValue Try If TestCanConnect() = False Then Return Nothing End If + _Logger.Debug("Running Query: {0}", SQLCommand) + Using oConnection As SqlConnection = GetSQLConnection() Using oSQLCOmmand = oConnection.CreateCommand() - oSQLCOmmand.CommandText = SQLQuery + oSQLCOmmand.CommandText = SQLCommand oSQLCOmmand.CommandTimeout = Timeout Dim oResult As Object = oSQLCOmmand.ExecuteScalar() Return oResult @@ -182,7 +188,7 @@ Public Class MSSQLServer End Using Catch ex As Exception _Logger.Error(ex) - _Logger.Warn("SQLQuery: " & SQLQuery) + _Logger.Warn("SQLQuery: " & SQLCommand) Return Nothing End Try End Function @@ -197,6 +203,8 @@ Public Class MSSQLServer Return Nothing End If + _Logger.Debug("Running Query: {0}", SQLCommand) + If SQLCommand.CommandText.Contains(" ") Then SQLCommand.CommandType = CommandType.Text Else @@ -227,27 +235,29 @@ Public Class MSSQLServer ''' ''' Executes the passed sql-statement in asyncmode ''' - ''' the sql statement + ''' the sql statement ''' Optional Timeout ''' - Public Sub NewExecuteNonQueryAsync(executeStatement As String, Optional commandtimeout As Integer = 120) + Public Sub NewExecuteNonQueryAsync(SqlCommand As String, Optional commandtimeout As Integer = 120) If TestCanConnect() = False Then Exit Sub End If + _Logger.Debug("Running Query: {0}", SqlCommand) + Try Dim oCallback As New AsyncCallback(AddressOf NewExecuteNonQueryAsync_Callback) Using oConnection As SqlConnection = GetSQLConnection() Using oSQLCOmmand = oConnection.CreateCommand() - oSQLCOmmand.CommandText = executeStatement + oSQLCOmmand.CommandText = SqlCommand oSQLCOmmand.CommandTimeout = commandtimeout oSQLCOmmand.BeginExecuteNonQuery(oCallback, oSQLCOmmand) End Using End Using Catch ex As Exception _Logger.Error(ex) - _Logger.Warn("executeStatement: " & executeStatement) + _Logger.Warn("executeStatement: " & SqlCommand) End Try End Sub diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd index 97097dc5..cffaf1e9 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/DigitalData.Services.EDMIService.xsd @@ -174,7 +174,9 @@ - + + + diff --git a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb index 8a43f979..9f35c7e1 100644 --- a/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb +++ b/Modules.EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb @@ -594,10 +594,10 @@ Namespace EDMIServiceReference Function GetDocumentByContainerIdAsync(ByVal ContainerId As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentResultOld) _ - Function ImportFile(ByVal FileName As String, ByVal Contents() As Byte, ByVal AddedWho As String) As EDMIServiceReference.DocumentResult + Function ImportFile(ByVal FileName As String, ByVal Contents() As Byte, ByVal ObjectStoreId As Long, ByVal DocumentType As String, ByVal RetentionDays As Long) As EDMIServiceReference.DocumentResult _ - Function ImportFileAsync(ByVal FileName As String, ByVal Contents() As Byte, ByVal AddedWho As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentResult) + Function ImportFileAsync(ByVal FileName As String, ByVal Contents() As Byte, ByVal ObjectStoreId As Long, ByVal DocumentType As String, ByVal RetentionDays As Long) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentResult) 'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Wrappername (DocumentStreamRequest) von Nachricht "DocumentStreamRequest" nicht mit dem Standardwert (GetFileByObjectId) übereinstimmt. _ @@ -788,12 +788,12 @@ Namespace EDMIServiceReference Return MyBase.Channel.GetDocumentByContainerIdAsync(ContainerId) End Function - Public Function ImportFile(ByVal FileName As String, ByVal Contents() As Byte, ByVal AddedWho As String) As EDMIServiceReference.DocumentResult Implements EDMIServiceReference.IEDMIService.ImportFile - Return MyBase.Channel.ImportFile(FileName, Contents, AddedWho) + Public Function ImportFile(ByVal FileName As String, ByVal Contents() As Byte, ByVal ObjectStoreId As Long, ByVal DocumentType As String, ByVal RetentionDays As Long) As EDMIServiceReference.DocumentResult Implements EDMIServiceReference.IEDMIService.ImportFile + Return MyBase.Channel.ImportFile(FileName, Contents, ObjectStoreId, DocumentType, RetentionDays) End Function - Public Function ImportFileAsync(ByVal FileName As String, ByVal Contents() As Byte, ByVal AddedWho As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentResult) Implements EDMIServiceReference.IEDMIService.ImportFileAsync - Return MyBase.Channel.ImportFileAsync(FileName, Contents, AddedWho) + Public Function ImportFileAsync(ByVal FileName As String, ByVal Contents() As Byte, ByVal ObjectStoreId As Long, ByVal DocumentType As String, ByVal RetentionDays As Long) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentResult) Implements EDMIServiceReference.IEDMIService.ImportFileAsync + Return MyBase.Channel.ImportFileAsync(FileName, Contents, ObjectStoreId, DocumentType, RetentionDays) End Function _ diff --git a/Modules.EDMIAPI/Document.vb b/Modules.EDMIAPI/Document.vb index cec2d1d5..9ca378d1 100644 --- a/Modules.EDMIAPI/Document.vb +++ b/Modules.EDMIAPI/Document.vb @@ -53,12 +53,12 @@ Public Class Document ''' ''' The filename to import ''' A document object - Public Async Function ImportFileAsync(FilePath As String, Optional [ReadOnly] As Boolean = False, Optional RetentionPeriod As Integer = 0) As Task(Of DocumentResult) + Public Async Function ImportFileAsync(FilePath As String, Optional [ReadOnly] As Boolean = False, Optional RetentionDays As Integer = 0) As Task(Of DocumentResult) Try Using oStream As New FileStream(FilePath, FileMode.Open) Dim oContents As Byte() = {} Dim oBytesRead = Await oStream.ReadAsync(oContents, 0, oStream.Length) - Dim oResult = Await _channel.ImportFileAsync(FilePath, oContents, Environment.UserName) + Dim oResult = Await _channel.ImportFileAsync(FilePath, oContents, 1, "WichtigesDokument", RetentionDays) Return oResult End Using @@ -77,7 +77,7 @@ Public Class Document Try Dim oContents As Byte() = File.ReadAllBytes(FilePath) Dim oInfo As New FileInfo(FilePath) - Dim oDocObject = _channel.ImportFile(FilePath, oContents, Environment.UserName) + Dim oDocObject = _channel.ImportFile(FilePath, oContents, 1, "WichtigesDokument", 0) Return oDocObject Catch ex As Exception _logger.Error(ex) diff --git a/Service.EDMIService/AppConfig.vb b/Service.EDMIService/AppConfig.vb index e1212b52..4e02456f 100644 --- a/Service.EDMIService/AppConfig.vb +++ b/Service.EDMIService/AppConfig.vb @@ -1,16 +1,16 @@ Imports System.Configuration Public Class AppConfig - Public Shared FirebirdDataSource As String - Public Shared FirebirdDatabase As String - Public Shared FirebirdUser As String - Public Shared FirebirdPassword As String - Public Shared ContainerPath As String - Public Shared ContainerPassword As String - Public Shared DatastorePath As String - Public Shared MSSQLConnectionString As String + Public FirebirdDataSource As String + Public FirebirdDatabase As String + Public FirebirdUser As String + Public FirebirdPassword As String + Public ContainerPath As String + Public ContainerPassword As String + Public DatastorePath As String + Public MSSQLConnectionString As String - Public Shared Sub Load() + Public Sub New() With ConfigurationManager.AppSettings FirebirdDataSource = .Item("FIREBIRD_DATASOURCE") FirebirdDatabase = .Item("FIREBIRD_DATABASE_NAME") @@ -26,12 +26,12 @@ Public Class AppConfig End With End Sub - Public Shared Function IsFirebirdConfigured() As Boolean + Public Function IsFirebirdConfigured() As Boolean Dim oProps As New List(Of String) From {FirebirdDataSource, FirebirdDatabase, FirebirdUser, FirebirdPassword} Return Not oProps.Any(Function(Prop) String.IsNullOrWhiteSpace(Prop)) End Function - Public Shared Function IsMSSQLConfigured() As Boolean + Public Function IsMSSQLConfigured() As Boolean Return Not String.IsNullOrWhiteSpace(MSSQLConnectionString) End Function End Class diff --git a/Service.EDMIService/EDMIService.vb b/Service.EDMIService/EDMIService.vb index 3a4885fa..afb67df3 100644 --- a/Service.EDMIService/EDMIService.vb +++ b/Service.EDMIService/EDMIService.vb @@ -1,11 +1,9 @@ -Imports System.ServiceModel -Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Filesystem Imports DigitalData.Modules Imports System.IO -Imports System.ServiceModel.Description -Imports System.ServiceModel.Channels +Imports System.ServiceModel Imports System.Data.SqlClient @@ -17,8 +15,8 @@ Public Class EDMIService Public Shared Firebird As Firebird Public Shared AppConfig As AppConfig Public Shared Filesystem As Filesystem.File - Public Shared EDMIPath As EDMI.File.Path Public Shared EDMIArchive As EDMI.File.Archive + Public Shared GlobalState As GlobalState Private ReadOnly _logger As Logger @@ -34,7 +32,6 @@ Public Class EDMIService _username = oUsername _logger = LogConfig.GetLogger() - _logger.Debug("New Request by User [{0}]", _username) End Sub @@ -320,6 +317,16 @@ Public Class EDMIService ''' ''' Public Function ImportFile(FileName As String, Contents() As Byte, ObjectStoreId As Int64, DocumentType As String, Optional RetentionDays As Int64 = Nothing) As DocumentResult Implements IEDMIService.ImportFile + Dim oObjectStore = GlobalState.ObjectStores. + Where(Function(s) s.Id = ObjectStoreId). + FirstOrDefault() + + If oObjectStore Is Nothing Then + Return New DocumentResult($"Object Store with Id [{ObjectStoreId}] does not exist!") + End If + + Dim EDMIPath = New EDMI.File.Path(LogConfig, oObjectStore.Path) + ' TODO: ' - Get Object Store -> Object Catalog -> Catalog Path ' - If IS_ARCHIVE = True And RetentionDays <> Nothing: @@ -328,10 +335,9 @@ Public Class EDMIService ' and return ObjectStore Path from ObjectStoreId + RelativePath ' VWIDB_OBJECTSTORE - Dim oDocumentType As String = "DummyDocumentType" - Dim oRelativePath As String = EDMIPath.GetRelativePath(oDocumentType, FileName) - Dim oAbsolutePath As String = EDMIPath.GetActivePath(oDocumentType, FileName) - Dim oDirectoryPath = EDMIPath.GetActivePath(oDocumentType) + Dim oRelativePath As String = EDMIPath.GetRelativePath(DocumentType, FileName) + Dim oAbsolutePath As String = EDMIPath.GetFullPath(DocumentType, FileName) + Dim oDirectoryPath = EDMIPath.GetFullPath(DocumentType) Dim oDocument = New DocumentResult.DocumentObject With {.FileName = FileName} Try @@ -372,14 +378,23 @@ Public Class EDMIService Public Function GetFileByObjectId(Data As Messages.DocumentStreamRequest) As Messages.DocumentStreamResponse Implements IEDMIService.GetFileByObjectId Try - Dim oSQL As String = $"SELECT DocRelativePath FROM VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {Data.ObjectId}" - Dim oPath As String = MSSQL.GetScalarValue(oSQL) + Dim oSQL As String = $"SELECT ObjectStoreId FROM VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {Data.ObjectId}" + Dim oObjectStoreId = MSSQL.GetScalarValue(oSQL) + + Dim oObjectStore = GlobalState.ObjectStores. + Where(Function(s) s.Id = oObjectStoreId). + FirstOrDefault() + + Dim oSQL2 As String = $"SELECT DocRelativePath FROM VWIDB_DOC_DATA WHERE IDB_OBJ_ID = {Data.ObjectId}" + Dim oPath As String = MSSQL.GetScalarValue(oSQL2) + If IsNothing(oPath) Then Throw New FaultException($"Object [{Data.ObjectId}] does not exist in database!") End If - Dim oFullPath = EDMIPath.GetActivePathFromRelativePath(oPath) + Dim EDMIPath As New EDMI.File.Path(LogConfig, oObjectStore.Path) + Dim oFullPath = EDMIPath.GetFullPathFromRelativePath(oPath) _logger.Debug("GetFileByObjectId: Loading file [{0}]", oFullPath) diff --git a/Service.EDMIService/EDMIService.vbproj b/Service.EDMIService/EDMIService.vbproj index 316648f8..3cdbcc3a 100644 --- a/Service.EDMIService/EDMIService.vbproj +++ b/Service.EDMIService/EDMIService.vbproj @@ -104,6 +104,7 @@ + diff --git a/Service.EDMIService/GlobalState.vb b/Service.EDMIService/GlobalState.vb new file mode 100644 index 00000000..7614885b --- /dev/null +++ b/Service.EDMIService/GlobalState.vb @@ -0,0 +1,46 @@ +Imports DigitalData.Modules.Database +Imports DigitalData.Modules.Logging + +Public Class GlobalState + Private _LogConfig As LogConfig + Private _Logger As Logger + Private _MSSQL As MSSQLServer + Public Property ObjectStores As New List(Of ObjectStore) + + Public Sub New(LogConfig As LogConfig, MSSQL As MSSQLServer) + _LogConfig = LogConfig + _Logger = LogConfig.GetLogger() + _MSSQL = MSSQL + End Sub + + Public Sub LoadObjectStores() + _Logger.Debug("Loading Object Stores") + Try + Dim oSQL As String = "SELECT * FROM VWIDB_OBJECTSTORE" + Dim oDatatable As DataTable = _MSSQL.GetDatatable(oSQL) + + ObjectStores.Clear() + + For Each oRow As DataRow In oDatatable.Rows + Dim oStore As New ObjectStore() With { + .Id = oRow.Item("OST_ID"), + .IsArchive = oRow.Item("OS_IS_ARCHIVE"), + .Path = oRow.Item("IDB_PRAEFIX"), + .Title = oRow.Item("OS_TITLE") + } + _Logger.Debug("New Object Store [{0}]", oStore.Title) + ObjectStores.Add(oStore) + Next + Catch ex As Exception + _Logger.Error(ex) + Throw ex + End Try + End Sub + + Class ObjectStore + Public Id As Int64 + Public Title As String + Public IsArchive As Boolean + Public Path As String + End Class +End Class diff --git a/Service.EDMIService/WindowsService.vb b/Service.EDMIService/WindowsService.vb index 067b315e..566f707a 100644 --- a/Service.EDMIService/WindowsService.vb +++ b/Service.EDMIService/WindowsService.vb @@ -8,19 +8,18 @@ Imports System.ServiceModel.Description Public Class WindowsService Inherits ServiceBase - Private _serviceHost As ServiceHost = Nothing - Private _edmService As IEDMIService = Nothing + Private _ServiceHost As ServiceHost + Private _LogConfig As LogConfig + Private _Logger As Logger - Private _logConfig As LogConfig - Private _logger As Logger + Private _Firebird As Firebird + Private _MSSQL As MSSQLServer - Private _firebird As Firebird - Private _mssql As MSSQLServer - - Private _config As AppConfig + Private _Config As AppConfig Private _Path As EDMI.File.Path Private _Archive As EDMI.File.Archive - Private _filesystem As Filesystem.File + Private _Filesystem As Filesystem.File + Private _Global As GlobalState Public Sub New() ServiceName = SERVICE_NAME @@ -32,78 +31,84 @@ Public Class WindowsService Protected Overrides Sub OnStart(ByVal args As String()) Try - AppConfig.Load() - - _logConfig = New LogConfig(LogConfig.PathType.CustomPath, "E:\EDMService") With { + _Config = New AppConfig() + _LogConfig = New LogConfig(LogConfig.PathType.CustomPath, "E:\EDMService") With { .Debug = True } + _Logger = _LogConfig.GetLogger() + _Logger.Info("Service {0} is starting...", SERVICE_DISPLAY_NAME) + + MaybeStartFirebird() + MaybeStartMSSQL() + + _Logger.Debug("Initializing EDMI Functions") + + _Archive = New EDMI.File.Archive(_LogConfig) + _Filesystem = New Filesystem.File(_LogConfig) + _Global = New GlobalState(_LogConfig, _MSSQL) + + _Global.LoadObjectStores() + + _Logger.Info("EDMI Functions initialized.") - _logger = _logConfig.GetLogger() - - _logger.Info("Service {0} is starting...", SERVICE_DISPLAY_NAME) - - If AppConfig.IsFirebirdConfigured() Then - _logger.Debug("Connecting to Firebird...") - _firebird = New Firebird( - _logConfig, - AppConfig.FirebirdDataSource, - AppConfig.FirebirdDatabase, - AppConfig.FirebirdUser, - AppConfig.FirebirdPassword - ) - _logger.Info("Database connection established.") - Else - _logger.Info("Firebird is not configured, will not be used!") - End If - - If AppConfig.IsMSSQLConfigured() Then - _logger.Debug("Connecting to MSSQL...") - _mssql = New MSSQLServer(_logConfig, AppConfig.MSSQLConnectionString) - _logger.Info("Database connection established.") - Else - _logger.Info("MSSQL is not configured, will not be used!") - End If - - _logger.Debug("Initializing EDMI Functions") - - _Path = New EDMI.File.Path(_logConfig, AppConfig.DatastorePath) - _Archive = New EDMI.File.Archive(_logConfig) - _filesystem = New Filesystem.File(_logConfig) - - _logger.Info("EDMI Functions initialized.") - - EDMIService.MSSQL = _mssql - EDMIService.Firebird = _firebird - EDMIService.LogConfig = _logConfig - EDMIService.AppConfig = _config + EDMIService.MSSQL = _MSSQL + EDMIService.Firebird = _Firebird + EDMIService.LogConfig = _LogConfig + EDMIService.AppConfig = _Config EDMIService.EDMIArchive = _Archive - EDMIService.EDMIPath = _Path - EDMIService.Filesystem = _filesystem + EDMIService.Filesystem = _Filesystem + EDMIService.GlobalState = _Global - _logger.Debug("Starting WCF ServiceHost...") + _Logger.Debug("Starting WCF ServiceHost...") - _serviceHost = New ServiceHost(GetType(EDMIService)) - _serviceHost.Open() + _ServiceHost = New ServiceHost(GetType(EDMIService)) + _ServiceHost.Open() - _logger.Info("WCF ServiceHost started.") + _Logger.Info("WCF ServiceHost started.") - _logger.Info("Service {0} successfully started.", SERVICE_DISPLAY_NAME) + _Logger.Info("Service {0} successfully started.", SERVICE_DISPLAY_NAME) Catch ex As Exception - _logger.Error(ex, "Failed to start the service host!") + _Logger.Error(ex, "Failed to start the service host!") GracefullyStop() End Try End Sub + Private Sub MaybeStartFirebird() + If _Config.IsFirebirdConfigured() Then + _Logger.Debug("Connecting to Firebird") + _Firebird = New Firebird( + _LogConfig, + _Config.FirebirdDataSource, + _Config.FirebirdDatabase, + _Config.FirebirdUser, + _Config.FirebirdPassword + ) + _Logger.Info("Database connection established.") + Else + _Logger.Info("Firebird is not configured, will not be used!") + End If + End Sub + + Private Sub MaybeStartMSSQL() + If _Config.IsMSSQLConfigured() Then + _Logger.Debug("Connecting to MSSQL") + _MSSQL = New MSSQLServer(_LogConfig, _Config.MSSQLConnectionString) + _Logger.Info("Database connection established.") + Else + _Logger.Info("MSSQL is not configured, will not be used!") + End If + End Sub + Protected Overrides Sub OnStop() GracefullyStop() End Sub Private Sub GracefullyStop() - If _serviceHost IsNot Nothing Then - _serviceHost.Close() - _serviceHost = Nothing + If _ServiceHost IsNot Nothing Then + _ServiceHost.Close() + _ServiceHost = Nothing End If - _logger.Info("Service {0} is stopping!", SERVICE_DISPLAY_NAME) + _Logger.Info("Service {0} is stopping!", SERVICE_DISPLAY_NAME) End Sub End Class