ASP.NET应用中缓存Oracle数据

『 更新时间:2008-4-6 』『 字体:变小 变大 』『 作者:佚名 | 来源:互联网

以下是引用片段:
PublicFunction getRecordFromdatabase (ByVal p_empid As Int32) As DataView

 Dim con As OracleConnection = Nothing
 Dim cmd As OracleCommand = Nothing
 Dim ds As DataSet = Nothing

 Try
  con = getDatabaseConnection( "UserId=scott;Password=tiger;Data Source=testingdb;")
  cmd = New OracleCommand("Administrator.getEmployee", con)
  cmd.CommandType = CommandType.StoredProcedure
  cmd.Parameters.Add(New OracleParameter("employeeId", OracleDbType.Int64)).Value = p_empid
  Dim param AsNew OracleParameter("RC1", OracleDbType.RefCursor)
  cmd.Parameters.Add(param).Direction = ParameterDirection.Output
  Dim myCommand AsNew OracleDataAdapter(cmd)
  ds = New DataSet
  myCommand.Fill(ds)
  Dim table As DataTable = ds.Tables(0)
  Dim index As Int32 = table.Rows.Count
  Return ds.Tables(0).DefaultView
 Catch ex As Exception
  ThrowNew Exception("Exception in Database Tier Method getRecordFromdatabase () " + ex.Message, ex)

 Finally

  Try
   cmd.Dispose()
  Catch ex As Exception
  Finally
   cmd = Nothing
  EndTry
  Try
   con.Close()
  Catch ex As Exception
  Finally
   con = Nothing
  EndTry
 EndTry
EndFunction

  函数getDatabaseConnection接受一个连接字符串(connection stirng)为参数,返回一个OracleConnection对象引用。

以下是引用片段:
PublicFunction getDatabaseConnection(ByVal strconnection as string) As OracleConnection
 Dim con As Oracle.DataAccess.Client.OracleConnection = Nothing
 Try
  con = New Oracle.DataAccess.Client.OracleConnection
  con.ConnectionString = strconnection
  con.Open()
  Return con
 Catch ex As Exception
  ThrowNew Exception("Exception in Database Tier Method getOracleConnection() "
+ ex.Message, ex)
 EndTry
EndFunction

  Oracle数据库Tier实现

  定义Employee表上DML事件的触发器体如下。这个触发器简单的调用一个PL/SQL包裹函数来更新名为tblemployee.txt的操作系统文件。文件副本在两台机器(机器1和机器2)上更新。两台机器运行同一个Web应用的不同实例来均衡负载。这里administrator指Oracle数据库的方案(schema)对象所有者。

  begin administrator.plfile('machine1\\download\\ tblemployee.txt'); administrator.plfile('machine2\\download\\ tblemployee.txt');end;

  为更新缓存依赖文件,我们需要写一个C函数或Java存储过程。我们的例子中选择了Java存储过程,因为Oracle数据库服务器有一个内置的JVM,使得书写Java存储过程很方便。必须有足够的内存分配给Oracle实例的系统全局区(SGA)中的Java池。静态方法updateFile接受一个绝对路径作为参数,并在合适的目录中创建缓存依赖文件。若文件已经存在,则先删除然后创建。

  import java.io.*;public class UpdFile {public static void updateFile(String filename) { try {  File f = new File(filename);  f.delete();  f.createNewFile(); } catch (IOException e) {  // log exception }};

  NPL/SQL包裹实现如下。包裹函数以文件名为参数,调用Java存储过程中updateFile方法。

  (p_filename IN VARCHAR2)

  AS LANGUAGE JAVA

  NAME 'UpdFile.updateFile (java.lang.String)';

  Web Farm部署中的Oracle数据缓存

  正如我们讨论的例子中所示,Web服务器1和机器2构成了一个Web Farm来为我们的Web应用提供负载均衡。每台机器运行同一个Web应用的一个实例。在这个情况下,每个实例可以拥有自己的存放在Cache对象中的缓存数据副本。当Employee表改变,相应的数据库触发器更新两台机器上的文件tblemployee.txt。每个实例都指定一个到tblemployee.txt的缓存依赖,Web Farm的两个实例都可以正确更新,使得两个实例上的数据缓存可以和数据库表Employee保持同步。

  结论

  数据缓存是优化Oracle数据库上ASP.NET应用的有效技巧。尽管ASP.NET不允许设定缓存的数据库依赖,Oracle触发器协同Java存储过程可以扩展ASP.NET缓存的威力从而允许Oracle数据库缓存。这个技巧也可以适用于Web Farm部署。

上一页  [1] [2] 

【点击数:】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

关文章

您的姓名:
评分等级:
1分 2分 3分 4分 5分
评论内容:
1、严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
2、用户需对自己在使用金石网服务过程中的行为承担法律责任。
3、本站管理员有权保留或删除评论内容。
4、评论内容只代表网友个人观点,与本网站立场无关。
  • 金石网
  • | 设为首页 | 加入收藏 | 联系我们 | 版权申明 | 友情链接 | 站点地图 | 网站帮助 | 网站留言 | 广告服务 |
  • Copyright © 2001-2008 KingsNet.biz All Rights Reserved. 闽ICP备05026663号
  • 返回网站顶部