![]() |
| |||||||
| Registrarse | Preguntas Frecuentes | Lista de Foreros | Calendario | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
| | LinkBack | Herramientas | Desplegado |
| |||
| Hola: He implementado el patron singleton en la capa de datos de mi aplicacion n-capas, con el objetivo de crear una unica instancia de la conexion a SAP BO dado que cuando necesito obtener alguna informacion desde algun metodo la DAL se realizan los siguientes pasos : 1. Se abre una conexion con SAPBO 2. Se obtiene la informacion requerida por ejemplo datos de un cliente o lista de precios. 3. Se cierre la conexion con SAPBO. El incoveniente es que por cada conexion a SAPBO este se demora un lapzo tiempo considerable por lo tanto pienso que el patron singleton me podria ayudar a mejorar los tiempos dado que solo se conectara una sola y las proximas veces me retornara el objeto conectado. Aunque yo le he probado en ambiente de desarrollo osea en mi pc y este cumple con su objetivo, aunque me han saltado unas dudas con respecto su implementacion en ambiente de produccion. - Estoy haciendo lo corrrecto ? - En produccion no habria ningun tipo de problemas ? - Que consideraciones deberia tener al respecto. - Cuando terminaria la conexion con SAP BO? - Cuando la el cliente es una app. web deberia usar el httpcontext?. Segun este articulo (http://dotnet.org.za/eduard/archive/...7/07/2609.aspx) si deberia pero no funciona cuando uso el httpcontext. Ademas que las App. UI podrian ser tanto web como windows, ojo que yo no deseo que toda mi DAL sea un singleton si no mas bien la clase que se conecta a SAPBO tal y como se muestra a continuacion: DAL -- MySingleton -- ConexionDA -> obtiene el datacontext -- OrderDA -> usa ConexionDA -- CustomerDA -> usa ConexionDA -- SAPBO_DA -> metodos que obtienen info de SAPBO usando MySingleton -- ... BLL -> used DAL -- OrderBL -- CustomerBL -- SAPBO_BL -- ... WIN_UI -> usa BLL WEB_UI -> usa BLL Singleton : Public Class mySingleton Private Shared oInstance As mySingleton Private Shared _company As New SAPbobsCOM.Company Protected Sub New() Dim retCode, errCode As Integer Dim errMSG As String = "" With _company .Server = ConfigurationManager.AppSettings("Server_SBO").ToS tring .DbServerType = CType(ConfigurationManager.AppSettings("DbServerTy pe_SBO"), Integer) '4 -> BoDataServerTypes.dst_MSSQL2005 .UseTrusted = False .CompanyDB = ConfigurationManager.AppSettings("CompanyDB_SBO"). ToString .DbUserName = ConfigurationManager.AppSettings("DbUserName_SBO") .ToString .DbPassword = ConfigurationManager.AppSettings("DbPassword_SBO") .ToString .UserName = ConfigurationManager.AppSettings("UserName_SBO").T oString .Password = ConfigurationManager.AppSettings("Password_SBO").T oString .language = ConfigurationManager.AppSettings("Language_SBO").T oString '3 -> SAPbobsCOM.BoSuppLangs.ln_English retCode = _company.Connect If retCode > 0 Then _company.GetLastError(errCode, errMSG) Throw New Exception("Connection Failed - " & errMSG) End If End With End Sub Public Shared Function Instance() As mySingleton 'If HttpContext.Current Is Nothing Then If oInstance Is Nothing Then oInstance = New mySingleton() End If Return oInstance 'End If 'If Not HttpContext.Current.Items.Contains("mySingleton") Then ' HttpContext.Current.Items.Add("mySingleton", New mySingleton()) 'End If 'Return DirectCast(HttpContext.Current.Items("mySingleton" ), mySingleton) End Function Public ReadOnly Property GetConnection() As SAPbobsCOM.Company Get Return _company End Get End Property End Class Method: Public Function ObtenerImpuesto(ByVal tipo As String) As Impuesto Dim _company As SAPbobsCOM.Company Try '_company = Connect() Dim objConexion As mySingleton = mySingleton.Instance _company = objConexion.GetConnection Dim rs As SAPbobsCOM.Recordset rs = _company.GetBusinessObject(BoObjectTypes.BoRecords et) Dim query As String = String.Format("SELECT T0.[code], T0.[Name],T0.[Rate] FROM OSTA T0 WHERE T0.[code] ='{0}'", tipo) rs.DoQuery(query) Dim _impuesto As New Impuesto While Not rs.EoF _impuesto.Codigo = rs.Fields.Item(0).Value _impuesto.Nombre = rs.Fields.Item(1).Value _impuesto.Valor = rs.Fields.Item(2).Value rs.MoveNext() End While Return _impuesto Finally '_company.Disconnect() End Try End Function Thank you, |
| | ||||
| ||||
| |
| |||
| On 5 sep, 22:58, Claudia <Clau...***discussions.microsoft.com> wrote: > Hola: > > He implementado el patron singleton en la capa de datos de mi aplicacion > n-capas, con el objetivo de crear una unica instancia de la conexion a SAP BO > dado que cuando necesito obtener alguna informacion desde algun metodo laDAL > se realizan los siguientes pasos : > > 1. Se abre una conexion con SAPBO > 2. Se obtiene la informacion requerida por ejemplo datos de un cliente o > lista de precios. > 3. Se cierre la conexion con SAPBO. > > El incoveniente es que por cada conexion a SAPBO este se demora un lapzo > tiempo considerable por lo tanto pienso que el patron singleton me podria > ayudar a mejorar los tiempos dado que solo se conectara una sola y las > proximas veces me retornara el objeto conectado. Aunque yo le he probado en > ambiente de desarrollo osea en mi pc y este cumple con su objetivo, aunque me > han saltado unas dudas con respecto su implementacion en ambiente de > produccion. > > - Estoy haciendo lo corrrecto ? > - En produccion no habria ningun tipo de problemas ? > - Que consideraciones deberia tener al respecto. > - Cuando terminaria la conexion con SAP BO? > - Cuando la el cliente es una app. web deberia usar el httpcontext?. Segun > este articulo (http://dotnet.org.za/eduard/archive/...7/07/2609.aspx) si > deberia pero no funciona cuando uso el httpcontext. > > Ademas que las App. UI podrian ser tanto web como windows, ojo que yo no > deseo que toda mi DAL sea un singleton si no mas bien la clase que se conecta > a SAPBO tal y como se muestra a continuacion: > > DAL > -- MySingleton > -- ConexionDA -> obtiene el datacontext > -- OrderDA -> usa ConexionDA > -- CustomerDA -> usa ConexionDA > -- SAPBO_DA -> metodos que obtienen info de SAPBO usando MySingleton > -- ... > > BLL -> used DAL > -- OrderBL > -- CustomerBL > -- SAPBO_BL > -- ... > > WIN_UI -> usa BLL > WEB_UI -> usa BLL > > Singleton : > Public Class mySingleton > > *** *** Private Shared oInstance As mySingleton > *** *** Private Shared _company As New SAPbobsCOM.Company > > *** *** Protected Sub New() > *** *** *** *** Dim retCode, errCode As Integer > *** *** *** *** Dim errMSG As String = "" > > *** *** *** *** With _company > *** *** *** *** *** *** .Server = ConfigurationManager.AppSettings("Server_SBO").ToS tring > *** *** *** *** *** *** .DbServerType = > CType(ConfigurationManager.AppSettings("DbServerTy pe_SBO"), Integer) '4 -> > BoDataServerTypes.dst_MSSQL2005 > *** *** *** *** *** *** .UseTrusted = False > *** *** *** *** *** *** .CompanyDB = > ConfigurationManager.AppSettings("CompanyDB_SBO"). ToString > *** *** *** *** *** *** .DbUserName = > ConfigurationManager.AppSettings("DbUserName_SBO") .ToString > *** *** *** *** *** *** .DbPassword = > ConfigurationManager.AppSettings("DbPassword_SBO") .ToString > *** *** *** *** *** *** .UserName = > ConfigurationManager.AppSettings("UserName_SBO").T oString > *** *** *** *** *** *** .Password = > ConfigurationManager.AppSettings("Password_SBO").T oString > *** *** *** *** *** *** .language = > ConfigurationManager.AppSettings("Language_SBO").T oString '3 -> > SAPbobsCOM.BoSuppLangs.ln_English > > *** *** *** *** *** *** retCode = _company.Connect > > *** *** *** *** *** *** If retCode > 0 Then > *** *** *** *** *** *** *** *** _company.GetLastError(errCode, errMSG) > > *** *** *** *** *** *** *** *** Throw New Exception("Connection Failed - " & errMSG) > *** *** *** *** *** *** End If > *** *** *** *** End With > *** *** End Sub > > *** *** Public Shared Function Instance() As mySingleton > *** *** *** *** 'If HttpContext.Current Is Nothing Then > *** *** *** *** If oInstance Is Nothing Then > *** *** *** *** *** *** oInstance = New mySingleton() > *** *** *** *** End If > *** *** *** *** Return oInstance > *** *** *** *** 'End If > > *** *** *** *** 'If Not HttpContext.Current.Items.Contains("mySingleton")T hen > *** *** *** *** ' *** ***HttpContext.Current.Items.Add("mySingleton", NewmySingleton()) > *** *** *** *** 'End If > > *** *** *** *** 'Return DirectCast(HttpContext.Current.Items("mySingleton" ), > mySingleton) > *** *** End Function > > *** *** Public ReadOnly Property GetConnection() As SAPbobsCOM.Company > *** *** *** *** Get > *** *** *** *** *** *** Return _company > *** *** *** *** End Get > *** *** End Property > End Class > > Method: > > Public Function ObtenerImpuesto(ByVal tipo As String) As Impuesto > *** *** *** *** Dim _company As SAPbobsCOM.Company > > *** *** *** *** Try > *** *** *** *** *** *** '_company = Connect() > *** *** *** *** *** *** Dim objConexion As mySingleton = mySingleton.Instance > *** *** *** *** *** *** _company = objConexion.GetConnection > > *** *** *** *** *** *** Dim rs As SAPbobsCOM.Recordset > *** *** *** *** *** *** rs = _company.GetBusinessObject(BoObjectTypes.BoRecords et) > > *** *** *** *** *** *** Dim query As String = String.Format("SELECT T0.[code], > T0.[Name],T0.[Rate] FROM OSTA T0 WHERE T0.[code] ='{0}'", tipo) > > *** *** *** *** *** *** rs.DoQuery(query) > > *** *** *** *** *** *** Dim _impuesto As New Impuesto > > *** *** *** *** *** *** While Not rs.EoF > *** *** *** *** *** *** *** *** _impuesto.Codigo = rs.Fields.Item(0).Value > *** *** *** *** *** *** *** *** _impuesto.Nombre = rs.Fields.Item(1).Value > *** *** *** *** *** *** *** *** _impuesto.Valor = rs.Fields.Item(2).Value > > *** *** *** *** *** *** *** *** rs.MoveNext() > *** *** *** *** *** *** End While > > *** *** *** *** *** *** Return _impuesto > *** *** *** *** Finally > *** *** *** *** *** *** '_company.Disconnect() > *** *** *** *** End Try > *** *** End Function > Thank you, Hola: Por opinar y perdona si digo alguna tontería: ¿No puedes activar un pool de conexiones (si el proveedor .NET y el sistema gestor base de datos que utiliza lo permite)? ¿Una única conexión en singleton? ¿No podría ser que un "cliente" tuviera que esperar porque otro "cliente" está utilizando la conexión? Lo digo porque si sólo hay 1 conexión para todos, no tiene buena pinta, no? Lo has probado en tu PC y va de lugo, pero ¿en un entorno de producción? ¿No crees que quizás deberías hacer alguna prueba de "estres" de tu aplicación para ver como se comporta con algunas decenas de usuarios "hambrientos" de datos? De todas formas...hablar es gratis, pero yo miraría eso. Un saludo y suerte. |
| |||
| On 5 sep, 22:58, Claudia <Clau...***discussions.microsoft.com> wrote: > Hola: > > He implementado el patron singleton en la capa de datos de mi aplicacion > n-capas, con el objetivo de crear una unica instancia de la conexion a SAP BO > dado que cuando necesito obtener alguna informacion desde algun metodo laDAL > se realizan los siguientes pasos : > > 1. Se abre una conexion con SAPBO > 2. Se obtiene la informacion requerida por ejemplo datos de un cliente o > lista de precios. > 3. Se cierre la conexion con SAPBO. > > El incoveniente es que por cada conexion a SAPBO este se demora un lapzo > tiempo considerable por lo tanto pienso que el patron singleton me podria > ayudar a mejorar los tiempos dado que solo se conectara una sola y las > proximas veces me retornara el objeto conectado. Aunque yo le he probado en > ambiente de desarrollo osea en mi pc y este cumple con su objetivo, aunque me > han saltado unas dudas con respecto su implementacion en ambiente de > produccion. > > - Estoy haciendo lo corrrecto ? > - En produccion no habria ningun tipo de problemas ? > - Que consideraciones deberia tener al respecto. > - Cuando terminaria la conexion con SAP BO? > - Cuando la el cliente es una app. web deberia usar el httpcontext?. Segun > este articulo (http://dotnet.org.za/eduard/archive/...7/07/2609.aspx) si > deberia pero no funciona cuando uso el httpcontext. > > Ademas que las App. UI podrian ser tanto web como windows, ojo que yo no > deseo que toda mi DAL sea un singleton si no mas bien la clase que se conecta > a SAPBO tal y como se muestra a continuacion: > > DAL > -- MySingleton > -- ConexionDA -> obtiene el datacontext > -- OrderDA -> usa ConexionDA > -- CustomerDA -> usa ConexionDA > -- SAPBO_DA -> metodos que obtienen info de SAPBO usando MySingleton > -- ... > > BLL -> used DAL > -- OrderBL > -- CustomerBL > -- SAPBO_BL > -- ... > > WIN_UI -> usa BLL > WEB_UI -> usa BLL > > Singleton : > Public Class mySingleton > > *** *** Private Shared oInstance As mySingleton > *** *** Private Shared _company As New SAPbobsCOM.Company > > *** *** Protected Sub New() > *** *** *** *** Dim retCode, errCode As Integer > *** *** *** *** Dim errMSG As String = "" > > *** *** *** *** With _company > *** *** *** *** *** *** .Server = ConfigurationManager.AppSettings("Server_SBO").ToS tring > *** *** *** *** *** *** .DbServerType = > CType(ConfigurationManager.AppSettings("DbServerTy pe_SBO"), Integer) '4 -> > BoDataServerTypes.dst_MSSQL2005 > *** *** *** *** *** *** .UseTrusted = False > *** *** *** *** *** *** .CompanyDB = > ConfigurationManager.AppSettings("CompanyDB_SBO"). ToString > *** *** *** *** *** *** .DbUserName = > ConfigurationManager.AppSettings("DbUserName_SBO") .ToString > *** *** *** *** *** *** .DbPassword = > ConfigurationManager.AppSettings("DbPassword_SBO") .ToString > *** *** *** *** *** *** .UserName = > ConfigurationManager.AppSettings("UserName_SBO").T oString > *** *** *** *** *** *** .Password = > ConfigurationManager.AppSettings("Password_SBO").T oString > *** *** *** *** *** *** .language = > ConfigurationManager.AppSettings("Language_SBO").T oString '3 -> > SAPbobsCOM.BoSuppLangs.ln_English > > *** *** *** *** *** *** retCode = _company.Connect > > *** *** *** *** *** *** If retCode > 0 Then > *** *** *** *** *** *** *** *** _company.GetLastError(errCode, errMSG) > > *** *** *** *** *** *** *** *** Throw New Exception("Connection Failed - " & errMSG) > *** *** *** *** *** *** End If > *** *** *** *** End With > *** *** End Sub > > *** *** Public Shared Function Instance() As mySingleton > *** *** *** *** 'If HttpContext.Current Is Nothing Then > *** *** *** *** If oInstance Is Nothing Then > *** *** *** *** *** *** oInstance = New mySingleton() > *** *** *** *** End If > *** *** *** *** Return oInstance > *** *** *** *** 'End If > > *** *** *** *** 'If Not HttpContext.Current.Items.Contains("mySingleton")T hen > *** *** *** *** ' *** ***HttpContext.Current.Items.Add("mySingleton", NewmySingleton()) > *** *** *** *** 'End If > > *** *** *** *** 'Return DirectCast(HttpContext.Current.Items("mySingleton" ), > mySingleton) > *** *** End Function > > *** *** Public ReadOnly Property GetConnection() As SAPbobsCOM.Company > *** *** *** *** Get > *** *** *** *** *** *** Return _company > *** *** *** *** End Get > *** *** End Property > End Class > > Method: > > Public Function ObtenerImpuesto(ByVal tipo As String) As Impuesto > *** *** *** *** Dim _company As SAPbobsCOM.Company > > *** *** *** *** Try > *** *** *** *** *** *** '_company = Connect() > *** *** *** *** *** *** Dim objConexion As mySingleton = mySingleton.Instance > *** *** *** *** *** *** _company = objConexion.GetConnection > > *** *** *** *** *** *** Dim rs As SAPbobsCOM.Recordset > *** *** *** *** *** *** rs = _company.GetBusinessObject(BoObjectTypes.BoRecords et) > > *** *** *** *** *** *** Dim query As String = String.Format("SELECT T0.[code], > T0.[Name],T0.[Rate] FROM OSTA T0 WHERE T0.[code] ='{0}'", tipo) > > *** *** *** *** *** *** rs.DoQuery(query) > > *** *** *** *** *** *** Dim _impuesto As New Impuesto > > *** *** *** *** *** *** While Not rs.EoF > *** *** *** *** *** *** *** *** _impuesto.Codigo = rs.Fields.Item(0).Value > *** *** *** *** *** *** *** *** _impuesto.Nombre = rs.Fields.Item(1).Value > *** *** *** *** *** *** *** *** _impuesto.Valor = rs.Fields.Item(2).Value > > *** *** *** *** *** *** *** *** rs.MoveNext() > *** *** *** *** *** *** End While > > *** *** *** *** *** *** Return _impuesto > *** *** *** *** Finally > *** *** *** *** *** *** '_company.Disconnect() > *** *** *** *** End Try > *** *** End Function > Thank you, Hola: Por opinar y perdona si digo alguna tontería: ¿No puedes activar un pool de conexiones (si el proveedor .NET y el sistema gestor base de datos que utiliza lo permite)? ¿Una única conexión en singleton? ¿No podría ser que un "cliente" tuviera que esperar porque otro "cliente" está utilizando la conexión? Lo digo porque si sólo hay 1 conexión para todos, no tiene buena pinta, no? Lo has probado en tu PC y va de lugo, pero ¿en un entorno de producción? ¿No crees que quizás deberías hacer alguna prueba de "estres" de tu aplicación para ver como se comporta con algunas decenas de usuarios "hambrientos" de datos? De todas formas...hablar es gratis, pero yo miraría eso. Un saludo y suerte. |
| |||
| On 5 sep, 22:58, Claudia <Clau...***discussions.microsoft.com> wrote: > Hola: > > He implementado el patron singleton en la capa de datos de mi aplicacion > n-capas, con el objetivo de crear una unica instancia de la conexion a SAP BO > dado que cuando necesito obtener alguna informacion desde algun metodo laDAL > se realizan los siguientes pasos : > > 1. Se abre una conexion con SAPBO > 2. Se obtiene la informacion requerida por ejemplo datos de un cliente o > lista de precios. > 3. Se cierre la conexion con SAPBO. > > El incoveniente es que por cada conexion a SAPBO este se demora un lapzo > tiempo considerable por lo tanto pienso que el patron singleton me podria > ayudar a mejorar los tiempos dado que solo se conectara una sola y las > proximas veces me retornara el objeto conectado. Aunque yo le he probado en > ambiente de desarrollo osea en mi pc y este cumple con su objetivo, aunque me > han saltado unas dudas con respecto su implementacion en ambiente de > produccion. > > - Estoy haciendo lo corrrecto ? > - En produccion no habria ningun tipo de problemas ? > - Que consideraciones deberia tener al respecto. > - Cuando terminaria la conexion con SAP BO? > - Cuando la el cliente es una app. web deberia usar el httpcontext?. Segun > este articulo (http://dotnet.org.za/eduard/archive/...7/07/2609.aspx) si > deberia pero no funciona cuando uso el httpcontext. > > Ademas que las App. UI podrian ser tanto web como windows, ojo que yo no > deseo que toda mi DAL sea un singleton si no mas bien la clase que se conecta > a SAPBO tal y como se muestra a continuacion: > > DAL > -- MySingleton > -- ConexionDA -> obtiene el datacontext > -- OrderDA -> usa ConexionDA > -- CustomerDA -> usa ConexionDA > -- SAPBO_DA -> metodos que obtienen info de SAPBO usando MySingleton > -- ... > > BLL -> used DAL > -- OrderBL > -- CustomerBL > -- SAPBO_BL > -- ... > > WIN_UI -> usa BLL > WEB_UI -> usa BLL > > Singleton : > Public Class mySingleton > > *** *** Private Shared oInstance As mySingleton > *** *** Private Shared _company As New SAPbobsCOM.Company > > *** *** Protected Sub New() > *** *** *** *** Dim retCode, errCode As Integer > *** *** *** *** Dim errMSG As String = "" > > *** *** *** *** With _company > *** *** *** *** *** *** .Server = ConfigurationManager.AppSettings("Server_SBO").ToS tring > *** *** *** *** *** *** .DbServerType = > CType(ConfigurationManager.AppSettings("DbServerTy pe_SBO"), Integer) '4 -> > BoDataServerTypes.dst_MSSQL2005 > *** *** *** *** *** *** .UseTrusted = False > *** *** *** *** *** *** .CompanyDB = > ConfigurationManager.AppSettings("CompanyDB_SBO"). ToString > *** *** *** *** *** *** .DbUserName = > ConfigurationManager.AppSettings("DbUserName_SBO") .ToString > *** *** *** *** *** *** .DbPassword = > ConfigurationManager.AppSettings("DbPassword_SBO") .ToString > *** *** *** *** *** *** .UserName = > ConfigurationManager.AppSettings("UserName_SBO").T oString > *** *** *** *** *** *** .Password = > ConfigurationManager.AppSettings("Password_SBO").T oString > *** *** *** *** *** *** .language = > ConfigurationManager.AppSettings("Language_SBO").T oString '3 -> > SAPbobsCOM.BoSuppLangs.ln_English > > *** *** *** *** *** *** retCode = _company.Connect > > *** *** *** *** *** *** If retCode > 0 Then > *** *** *** *** *** *** *** *** _company.GetLastError(errCode, errMSG) > > *** *** *** *** *** *** *** *** Throw New Exception("Connection Failed - " & errMSG) > *** *** *** *** *** *** End If > *** *** *** *** End With > *** *** End Sub > > *** *** Public Shared Function Instance() As mySingleton > *** *** *** *** 'If HttpContext.Current Is Nothing Then > *** *** *** *** If oInstance Is Nothing Then > *** *** *** *** *** *** oInstance = New mySingleton() > *** *** *** *** End If > *** *** *** *** Return oInstance > *** *** *** *** 'End If > > *** *** *** *** 'If Not HttpContext.Current.Items.Contains("mySingleton")T hen > *** *** *** *** ' *** ***HttpContext.Current.Items.Add("mySingleton", NewmySingleton()) > *** *** *** *** 'End If > > *** *** *** *** 'Return DirectCast(HttpContext.Current.Items("mySingleton" ), > mySingleton) > *** *** End Function > > *** *** Public ReadOnly Property GetConnection() As SAPbobsCOM.Company > *** *** *** *** Get > *** *** *** *** *** *** Return _company > *** *** *** *** End Get > *** *** End Property > End Class > > Method: > > Public Function ObtenerImpuesto(ByVal tipo As String) As Impuesto > *** *** *** *** Dim _company As SAPbobsCOM.Company > > *** *** *** *** Try > *** *** *** *** *** *** '_company = Connect() > *** *** *** *** *** *** Dim objConexion As mySingleton = mySingleton.Instance > *** *** *** *** *** *** _company = objConexion.GetConnection > > *** *** *** *** *** *** Dim rs As SAPbobsCOM.Recordset > *** *** *** *** *** *** rs = _company.GetBusinessObject(BoObjectTypes.BoRecords et) > > *** *** *** *** *** *** Dim query As String = String.Format("SELECT T0.[code], > T0.[Name],T0.[Rate] FROM OSTA T0 WHERE T0.[code] ='{0}'", tipo) > > *** *** *** *** *** *** rs.DoQuery(query) > > *** *** *** *** *** *** Dim _impuesto As New Impuesto > > *** *** *** *** *** *** While Not rs.EoF > *** *** *** *** *** *** *** *** _impuesto.Codigo = rs.Fields.Item(0).Value > *** *** *** *** *** *** *** *** _impuesto.Nombre = rs.Fields.Item(1).Value > *** *** *** *** *** *** *** *** _impuesto.Valor = rs.Fields.Item(2).Value > > *** *** *** *** *** *** *** *** rs.MoveNext() > *** *** *** *** *** *** End While > > *** *** *** *** *** *** Return _impuesto > *** *** *** *** Finally > *** *** *** *** *** *** '_company.Disconnect() > *** *** *** *** End Try > *** *** End Function > Thank you, Hola: Por opinar y perdona si digo alguna tontería: ¿No puedes activar un pool de conexiones (si el proveedor .NET y el sistema gestor base de datos que utiliza lo permite)? ¿Una única conexión en singleton? ¿No podría ser que un "cliente" tuviera que esperar porque otro "cliente" está utilizando la conexión? Lo digo porque si sólo hay 1 conexión para todos, no tiene buena pinta, no? Lo has probado en tu PC y va de lugo, pero ¿en un entorno de producción? ¿No crees que quizás deberías hacer alguna prueba de "estres" de tu aplicación para ver como se comporta con algunas decenas de usuarios "hambrientos" de datos? De todas formas...hablar es gratis, pero yo miraría eso. Un saludo y suerte. |
| |||
| On 5 sep, 22:58, Claudia <Clau...***discussions.microsoft.com> wrote: > Hola: > > He implementado el patron singleton en la capa de datos de mi aplicacion > n-capas, con el objetivo de crear una unica instancia de la conexion a SAP BO > dado que cuando necesito obtener alguna informacion desde algun metodo laDAL > se realizan los siguientes pasos : > > 1. Se abre una conexion con SAPBO > 2. Se obtiene la informacion requerida por ejemplo datos de un cliente o > lista de precios. > 3. Se cierre la conexion con SAPBO. > > El incoveniente es que por cada conexion a SAPBO este se demora un lapzo > tiempo considerable por lo tanto pienso que el patron singleton me podria > ayudar a mejorar los tiempos dado que solo se conectara una sola y las > proximas veces me retornara el objeto conectado. Aunque yo le he probado en > ambiente de desarrollo osea en mi pc y este cumple con su objetivo, aunque me > han saltado unas dudas con respecto su implementacion en ambiente de > produccion. > > - Estoy haciendo lo corrrecto ? > - En produccion no habria ningun tipo de problemas ? > - Que consideraciones deberia tener al respecto. > - Cuando terminaria la conexion con SAP BO? > - Cuando la el cliente es una app. web deberia usar el httpcontext?. Segun > este articulo (http://dotnet.org.za/eduard/archive/...7/07/2609.aspx) si > deberia pero no funciona cuando uso el httpcontext. > > Ademas que las App. UI podrian ser tanto web como windows, ojo que yo no > deseo que toda mi DAL sea un singleton si no mas bien la clase que se conecta > a SAPBO tal y como se muestra a continuacion: > > DAL > -- MySingleton > -- ConexionDA -> obtiene el datacontext > -- OrderDA -> usa ConexionDA > -- CustomerDA -> usa ConexionDA > -- SAPBO_DA -> metodos que obtienen info de SAPBO usando MySingleton > -- ... > > BLL -> used DAL > -- OrderBL > -- CustomerBL > -- SAPBO_BL > -- ... > > WIN_UI -> usa BLL > WEB_UI -> usa BLL > > Singleton : > Public Class mySingleton > > *** *** Private Shared oInstance As mySingleton > *** *** Private Shared _company As New SAPbobsCOM.Company > > *** *** Protected Sub New() > *** *** *** *** Dim retCode, errCode As Integer > *** *** *** *** Dim errMSG As String = "" > > *** *** *** *** With _company > *** *** *** *** *** *** .Server = ConfigurationManager.AppSettings("Server_SBO").ToS tring > *** *** *** *** *** *** .DbServerType = > CType(ConfigurationManager.AppSettings("DbServerTy pe_SBO"), Integer) '4 -> > BoDataServerTypes.dst_MSSQL2005 > *** *** *** *** *** *** .UseTrusted = False > *** *** *** *** *** *** .CompanyDB = > ConfigurationManager.AppSettings("CompanyDB_SBO"). ToString > *** *** *** *** *** *** .DbUserName = > ConfigurationManager.AppSettings("DbUserName_SBO") .ToString > *** *** *** *** *** *** .DbPassword = > ConfigurationManager.AppSettings("DbPassword_SBO") .ToString > *** *** *** *** *** *** .UserName = > ConfigurationManager.AppSettings("UserName_SBO").T oString > *** *** *** *** *** *** .Password = > ConfigurationManager.AppSettings("Password_SBO").T oString > *** *** *** *** *** *** .language = > ConfigurationManager.AppSettings("Language_SBO").T oString '3 -> > SAPbobsCOM.BoSuppLangs.ln_English > > *** *** *** *** *** *** retCode = _company.Connect > > *** *** *** *** *** *** If retCode > 0 Then > *** *** *** *** *** *** *** *** _company.GetLastError(errCode, errMSG) > > *** *** *** *** *** *** *** *** Throw New Exception("Connection Failed - " & errMSG) > *** *** *** *** *** *** End If > *** *** *** *** End With > *** *** End Sub > > *** *** Public Shared Function Instance() As mySingleton > *** *** *** *** 'If HttpContext.Current Is Nothing Then > *** *** *** *** If oInstance Is Nothing Then > *** *** *** *** *** *** oInstance = New mySingleton() > *** *** *** *** End If > *** *** *** *** Return oInstance > *** *** *** *** 'End If > > *** *** *** *** 'If Not HttpContext.Current.Items.Contains("mySingleton")T hen > *** *** *** *** ' *** ***HttpContext.Current.Items.Add("mySingleton", NewmySingleton()) > *** *** *** *** 'End If > > *** *** *** *** 'Return DirectCast(HttpContext.Current.Items("mySingleton" ), > mySingleton) > *** *** End Function > > *** *** Public ReadOnly Property GetConnection() As SAPbobsCOM.Company > *** *** *** *** Get > *** *** *** *** *** *** Return _company > *** *** *** *** End Get > *** *** End Property > End Class > > Method: > > Public Function ObtenerImpuesto(ByVal tipo As String) As Impuesto > *** *** *** *** Dim _company As SAPbobsCOM.Company > > *** *** *** *** Try > *** *** *** *** *** *** '_company = Connect() > *** *** *** *** *** *** Dim objConexion As mySingleton = mySingleton.Instance > *** *** *** *** *** *** _company = objConexion.GetConnection > > *** *** *** *** *** *** Dim rs As SAPbobsCOM.Recordset > *** *** *** *** *** *** rs = _company.GetBusinessObject(BoObjectTypes.BoRecords et) > > *** *** *** *** *** *** Dim query As String = String.Format("SELECT T0.[code], > T0.[Name],T0.[Rate] FROM OSTA T0 WHERE T0.[code] ='{0}'", tipo) > > *** *** *** *** *** *** rs.DoQuery(query) > > *** *** *** *** *** *** Dim _impuesto As New Impuesto > > *** *** *** *** *** *** While Not rs.EoF > *** *** *** *** *** *** *** *** _impuesto.Codigo = rs.Fields.Item(0).Value > *** *** *** *** *** *** *** *** _impuesto.Nombre = rs.Fields.Item(1).Value > *** *** *** *** *** *** *** *** _impuesto.Valor = rs.Fields.Item(2).Value > > *** *** *** *** *** *** *** *** rs.MoveNext() > *** *** *** *** *** *** End While > > *** *** *** *** *** *** Return _impuesto > *** *** *** *** Finally > *** *** *** *** *** *** '_company.Disconnect() > *** *** *** *** End Try > *** *** End Function > Thank you, Claudia, ¿SAPbobsCOM.Company?, ¿es una conexión a SQL Server 2005? Por los nombres de los parámetros, diría que hereda o usa un System.Data.SqlClient.SqlConnection. Si es así, tienes que hacer justo lo contrario, las conexiones las debes cerrar lo antes posible, aunque suene contraproducente. O sea, que si tu ASPX necesita 5 Selects para poblar controles, pues cada Select debe abrir y cerrar la conexión al SQL Server. Obviamente, no puedes hacer esto si estás en medio de una Transaccion, en este caso tienes que mantener la misma conexión para toda la transacción. Esto es algo que hace tiempo que aprendimos, el cambio fué espectacular, leete este par de enlaces para una explicación detallada. http://blogs.msdn.com/angelsb/archive/2004/08/25/220333.aspx http://blogs.msdn.com/angelsb/archive/2004/09/20/231963.aspx Saludos, Paco Ferre |
| |||
| On 5 sep, 22:58, Claudia <Clau...***discussions.microsoft.com> wrote: > Hola: > > He implementado el patron singleton en la capa de datos de mi aplicacion > n-capas, con el objetivo de crear una unica instancia de la conexion a SAP BO > dado que cuando necesito obtener alguna informacion desde algun metodo laDAL > se realizan los siguientes pasos : > > 1. Se abre una conexion con SAPBO > 2. Se obtiene la informacion requerida por ejemplo datos de un cliente o > lista de precios. > 3. Se cierre la conexion con SAPBO. > > El incoveniente es que por cada conexion a SAPBO este se demora un lapzo > tiempo considerable por lo tanto pienso que el patron singleton me podria > ayudar a mejorar los tiempos dado que solo se conectara una sola y las > proximas veces me retornara el objeto conectado. Aunque yo le he probado en > ambiente de desarrollo osea en mi pc y este cumple con su objetivo, aunque me > han saltado unas dudas con respecto su implementacion en ambiente de > produccion. > > - Estoy haciendo lo corrrecto ? > - En produccion no habria ningun tipo de problemas ? > - Que consideraciones deberia tener al respecto. > - Cuando terminaria la conexion con SAP BO? > - Cuando la el cliente es una app. web deberia usar el httpcontext?. Segun > este articulo (http://dotnet.org.za/eduard/archive/...7/07/2609.aspx) si > deberia pero no funciona cuando uso el httpcontext. > > Ademas que las App. UI podrian ser tanto web como windows, ojo que yo no > deseo que toda mi DAL sea un singleton si no mas bien la clase que se conecta > a SAPBO tal y como se muestra a continuacion: > > DAL > -- MySingleton > -- ConexionDA -> obtiene el datacontext > -- OrderDA -> usa ConexionDA > -- CustomerDA -> usa ConexionDA > -- SAPBO_DA -> metodos que obtienen info de SAPBO usando MySingleton > -- ... > > BLL -> used DAL > -- OrderBL > -- CustomerBL > -- SAPBO_BL > -- ... > > WIN_UI -> usa BLL > WEB_UI -> usa BLL > > Singleton : > Public Class mySingleton > > *** *** Private Shared oInstance As mySingleton > *** *** Private Shared _company As New SAPbobsCOM.Company > > *** *** Protected Sub New() > *** *** *** *** Dim retCode, errCode As Integer > *** *** *** *** Dim errMSG As String = "" > > *** *** *** *** With _company > *** *** *** *** *** *** .Server = ConfigurationManager.AppSettings("Server_SBO").ToS tring > *** *** *** *** *** *** .DbServerType = > CType(ConfigurationManager.AppSettings("DbServerTy pe_SBO"), Integer) '4 -> > BoDataServerTypes.dst_MSSQL2005 > *** *** *** *** *** *** .UseTrusted = False > *** *** *** *** *** *** .CompanyDB = > ConfigurationManager.AppSettings("CompanyDB_SBO"). ToString > *** *** *** *** *** *** .DbUserName = > ConfigurationManager.AppSettings("DbUserName_SBO") .ToString > *** *** *** *** *** *** .DbPassword = > ConfigurationManager.AppSettings("DbPassword_SBO") .ToString > *** *** *** *** *** *** .UserName = > ConfigurationManager.AppSettings("UserName_SBO").T oString > *** *** *** *** *** *** .Password = > ConfigurationManager.AppSettings("Password_SBO").T oString > *** *** *** *** *** *** .language = > ConfigurationManager.AppSettings("Language_SBO").T oString '3 -> > SAPbobsCOM.BoSuppLangs.ln_English > > *** *** *** *** *** *** retCode = _company.Connect > > *** *** *** *** *** *** If retCode > 0 Then > *** *** *** *** *** *** *** *** _company.GetLastError(errCode, errMSG) > > *** *** *** *** *** *** *** *** Throw New Exception("Connection Failed - " & errMSG) > *** *** *** *** *** *** End If > *** *** *** *** End With > *** *** End Sub > > *** *** Public Shared Function Instance() As mySingleton > *** *** *** *** 'If HttpContext.Current Is Nothing Then > *** *** *** *** If oInstance Is Nothing Then > *** *** *** *** *** *** oInstance = New mySingleton() > *** *** *** *** End If > *** *** *** *** Return oInstance > *** *** *** *** 'End If > > *** *** *** *** 'If Not HttpContext.Current.Items.Contains("mySingleton")T hen > *** *** *** *** ' *** ***HttpContext.Current.Items.Add("mySingleton", NewmySingleton()) > *** *** *** *** 'End If > > *** *** *** *** 'Return DirectCast(HttpContext.Current.Items("mySingleton" ), > mySingleton) > *** *** End Function > > *** *** Public ReadOnly Property GetConnection() As SAPbobsCOM.Company > *** *** *** *** Get > *** *** *** *** *** *** Return _company > *** *** *** *** End Get > *** *** End Property > End Class > > Method: > > Public Function ObtenerImpuesto(ByVal tipo As String) As Impuesto > *** *** *** *** Dim _company As SAPbobsCOM.Company > > *** *** *** *** Try > *** *** *** *** *** *** '_company = Connect() > *** *** *** *** *** *** Dim objConexion As mySingleton = mySingleton.Instance > *** *** *** *** *** *** _company = objConexion.GetConnection > > *** *** *** *** *** *** Dim rs As SAPbobsCOM.Recordset > *** *** *** *** *** *** rs = _company.GetBusinessObject(BoObjectTypes.BoRecords et) > > *** *** *** *** *** *** Dim query As String = String.Format("SELECT T0.[code], > T0.[Name],T0.[Rate] FROM OSTA T0 WHERE T0.[code] ='{0}'", tipo) > > *** *** *** *** *** *** rs.DoQuery(query) > > *** *** *** *** *** *** Dim _impuesto As New Impuesto > > *** *** *** *** *** *** While Not rs.EoF > *** *** *** *** *** *** *** *** _impuesto.Codigo = rs.Fields.Item(0).Value > *** *** *** *** *** *** *** *** _impuesto.Nombre = rs.Fields.Item(1).Value > *** *** *** *** *** *** *** *** _impuesto.Valor = rs.Fields.Item(2).Value > > *** *** *** *** *** *** *** *** rs.MoveNext() > *** *** *** *** *** *** End While > > *** *** *** *** *** *** Return _impuesto > *** *** *** *** Finally > *** *** *** *** *** *** '_company.Disconnect() > *** *** *** *** End Try > *** *** End Function > Thank you, Claudia, ¿SAPbobsCOM.Company?, ¿es una conexión a SQL Server 2005? Por los nombres de los parámetros, diría que hereda o usa un System.Data.SqlClient.SqlConnection. Si es así, tienes que hacer justo lo contrario, las conexiones las debes cerrar lo antes posible, aunque suene contraproducente. O sea, que si tu ASPX necesita 5 Selects para poblar controles, pues cada Select debe abrir y cerrar la conexión al SQL Server. Obviamente, no puedes hacer esto si estás en medio de una Transaccion, en este caso tienes que mantener la misma conexión para toda la transacción. Esto es algo que hace tiempo que aprendimos, el cambio fué espectacular, leete este par de enlaces para una explicación detallada. http://blogs.msdn.com/angelsb/archive/2004/08/25/220333.aspx http://blogs.msdn.com/angelsb/archive/2004/09/20/231963.aspx Saludos, Paco Ferre |
| |||
| On 5 sep, 22:58, Claudia <Clau...***discussions.microsoft.com> wrote: > Hola: > > He implementado el patron singleton en la capa de datos de mi aplicacion > n-capas, con el objetivo de crear una unica instancia de la conexion a SAP BO > dado que cuando necesito obtener alguna informacion desde algun metodo laDAL > se realizan los siguientes pasos : > > 1. Se abre una conexion con SAPBO > 2. Se obtiene la informacion requerida por ejemplo datos de un cliente o > lista de precios. > 3. Se cierre la conexion con SAPBO. > > El incoveniente es que por cada conexion a SAPBO este se demora un lapzo > tiempo considerable por lo tanto pienso que el patron singleton me podria > ayudar a mejorar los tiempos dado que solo se conectara una sola y las > proximas veces me retornara el objeto conectado. Aunque yo le he probado en > ambiente de desarrollo osea en mi pc y este cumple con su objetivo, aunque me > han saltado unas dudas con respecto su implementacion en ambiente de > produccion. > > - Estoy haciendo lo corrrecto ? > - En produccion no habria ningun tipo de problemas ? > - Que consideraciones deberia tener al respecto. > - Cuando terminaria la conexion con SAP BO? > - Cuando la el cliente es una app. web deberia usar el httpcontext?. Segun > este articulo (http://dotnet.org.za/eduard/archive/...7/07/2609.aspx) si > deberia pero no funciona cuando uso el httpcontext. > > Ademas que las App. UI podrian ser tanto web como windows, ojo que yo no > deseo que toda mi DAL sea un singleton si no mas bien la clase que se conecta > a SAPBO tal y como se muestra a continuacion: > > DAL > -- MySingleton > -- ConexionDA -> obtiene el datacontext > -- OrderDA -> usa ConexionDA > -- CustomerDA -> usa ConexionDA > -- SAPBO_DA -> metodos que obtienen info de SAPBO usando MySingleton > -- ... > > BLL -> used DAL > -- OrderBL > -- CustomerBL > -- SAPBO_BL > -- ... > > WIN_UI -> usa BLL > WEB_UI -> usa BLL > > Singleton : > Public Class mySingleton > > *** *** Private Shared oInstance As mySingleton > *** *** Private Shared _company As New SAPbobsCOM.Company > > *** *** Protected Sub New() > *** *** *** *** Dim retCode, errCode As Integer > *** *** *** *** Dim errMSG As String = "" > > *** *** *** *** With _company > *** *** *** *** *** *** .Server = ConfigurationManager.AppSettings("Server_SBO").ToS tring > *** *** *** *** *** *** .DbServerType = > CType(ConfigurationManager.AppSettings("DbServerTy pe_SBO"), Integer) '4 -> > BoDataServerTypes.dst_MSSQL2005 > *** *** *** *** *** *** .UseTrusted = False > *** *** *** *** *** *** .CompanyDB = > ConfigurationManager.AppSettings("CompanyDB_SBO"). ToString > *** *** *** *** *** *** .DbUserName = > ConfigurationManager.AppSettings("DbUserName_SBO") .ToString > *** *** *** *** *** *** .DbPassword = > ConfigurationManager.AppSettings("DbPassword_SBO") .ToString > *** *** *** *** *** *** .UserName = > ConfigurationManager.AppSettings("UserName_SBO").T oString > *** *** *** *** *** *** .Password = > ConfigurationManager.AppSettings("Password_SBO").T oString > *** *** *** *** *** *** .language = > ConfigurationManager.AppSettings("Language_SBO").T oString '3 -> > SAPbobsCOM.BoSuppLangs.ln_English > > *** *** *** *** *** *** retCode = _company.Connect > > *** *** *** *** *** *** If retCode > 0 Then > *** *** *** *** *** *** *** *** _company.GetLastError(errCode, errMSG) > > *** *** *** *** *** *** *** *** Throw New Exception("Connection Failed - " & errMSG) > *** *** *** *** *** *** End If > *** *** *** *** End With > *** *** End Sub > > *** *** Public Shared Function Instance() As mySingleton > *** *** *** *** 'If HttpContext.Current Is Nothing Then > *** *** *** *** If oInstance Is Nothing Then > *** *** *** *** *** *** oInstance = New mySingleton() > *** *** *** *** End If > *** *** *** *** Return oInstance > *** *** *** *** 'End If > > *** *** *** *** 'If Not HttpContext.Current.Items.Contains("mySingleton")T hen > *** *** *** *** ' *** ***HttpContext.Current.Items.Add("mySingleton", NewmySingleton()) > *** *** *** *** 'End If > > *** *** *** *** 'Return DirectCast(HttpContext.Current.Items("mySingleton" ), > mySingleton) > *** *** End Function > > *** *** Public ReadOnly Property GetConnection() As SAPbobsCOM.Company > *** *** *** *** Get > *** *** *** *** *** *** Return _company > *** *** *** *** End Get > *** *** End Property > End Class > > Method: > > Public Function ObtenerImpuesto(ByVal tipo As String) As Impuesto > *** *** *** *** Dim _company As SAPbobsCOM.Company > > *** *** *** *** Try > *** *** *** *** *** *** '_company = Connect() > *** *** *** *** *** *** Dim objConexion As mySingleton = mySingleton.Instance > *** *** *** *** *** *** _company = objConexion.GetConnection > > *** *** *** *** *** *** Dim rs As SAPbobsCOM.Recordset > *** *** *** *** *** *** rs = _company.GetBusinessObject(BoObjectTypes.BoRecords et) > > *** *** *** *** *** *** Dim query As String = String.Format("SELECT T0.[code], > T0.[Name],T0.[Rate] FROM OSTA T0 WHERE T0.[code] ='{0}'", tipo) > > *** *** *** *** *** *** rs.DoQuery(query) > > *** *** *** *** *** *** Dim _impuesto As New Impuesto > > *** *** *** *** *** *** While Not rs.EoF > *** *** *** *** *** *** *** *** _impuesto.Codigo = rs.Fields.Item(0).Value > *** *** *** *** *** *** *** *** _impuesto.Nombre = rs.Fields.Item(1).Value > *** *** *** *** *** *** *** *** _impuesto.Valor = rs.Fields.Item(2).Value > > *** *** *** *** *** *** *** *** rs.MoveNext() > *** *** *** *** *** *** End While > > *** *** *** *** *** *** Return _impuesto > *** *** *** *** Finally > *** *** *** *** *** *** '_company.Disconnect() > *** *** *** *** End Try > *** *** End Function > Thank you, Claudia, ¿SAPbobsCOM.Company?, ¿es una conexión a SQL Server 2005? Por los nombres de los parámetros, diría que hereda o usa un System.Data.SqlClient.SqlConnection. Si es así, tienes que hacer justo lo contrario, las conexiones las debes cerrar lo antes posible, aunque suene contraproducente. O sea, que si tu ASPX necesita 5 Selects para poblar controles, pues cada Select debe abrir y cerrar la conexión al SQL Server. Obviamente, no puedes hacer esto si estás en medio de una Transaccion, en este caso tienes que mantener la misma conexión para toda la transacción. Esto es algo que hace tiempo que aprendimos, el cambio fué espectacular, leete este par de enlaces para una explicación detallada. http://blogs.msdn.com/angelsb/archive/2004/08/25/220333.aspx http://blogs.msdn.com/angelsb/archive/2004/09/20/231963.aspx Saludos, Paco Ferre |
| |
| |
![]() |
| Herramientas | |
| Desplegado | |
| |
Temas Similares | ||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Consideraciones para un manejador de Errores | Armin Saez | Newsgroup microsoft.public.es.vb | 5 | 21-02-2008 17:01:41 |
| patron Singleton | Edilberto Arteaga Lopez | Newsgroup microsoft.public.es.csharp | 4 | 23-11-2007 19:56:40 |
| Consideraciones para servidor final :-S | Marcos Galaviz | Newsgroup microsoft.public.es.asp | 2 | 21-03-2007 19:43:54 |
| Consideraciones en server final VS 2005 y ASP.NET | Marcos Galaviz | Newsgroup microsoft.public.es.vs | 0 | 21-03-2007 18:40:13 |
| Consideraciones sobre money 2004 | Ismael | Newsgroup microsoft.public.es.money | 66 | 17-01-2004 21:36:46 |