有效移植的技巧和窍门





3.00/5 (1投票)
2005 年 9 月 22 日
6分钟阅读

24683
如果您想运行“Race to Linux”项目,或者只是想将现有的 ASP.NET 应用程序迁移到 J2EE 或 Linux 上运行,并且不确定从何开始——那么这篇文章就是为您准备的!
引言
如果您想运行“Race to Linux”项目,或者只是想将现有的 ASP.NET 应用程序迁移到 J2EE 或 Linux 上运行,并且不确定从何开始——那么这篇文章就是为您准备的!在这里,您将找到一些宝贵的提示、技巧和建议,帮助您了解从何处以及如何开始,还有一些有价值的捷径,帮助您更快、更轻松地迁移到 Linux!
Grasshopper Developer Edition
当然,第一件事就是获取最新版本的 Grasshopper 开发版。您可以从这里下载。如果您还没有使用过 Grasshopper,您会发现它是一个非常易于使用且功能强大的工具。它是 Visual Studio.NET 的一个插件,可以将您编译后的 ASP.NET 代码转换为 Java 字节码,以便您可以在 Linux 上的 J2EE 系统上运行。在很多情况下,您甚至不需要修改 ASP.NET 代码——它只需要重新编译即可运行!最新版本 1.6.1 增加了对欧洲多个国家本地化版本 .NET 的支持,并扩展了对 .NET 框架的支持。您可以在发行说明中阅读完整详细信息。我们还在我们的开发者专区发布了大量关于如何开始使用 Grasshopper 的文章。
在 Windows 中运行 Linux
所以,您想参加 Race to Linux 项目,或者想在 Linux 上测试您的 ASP.NET 应用程序,但您手边没有 Linux 服务器,或者可能没有时间立即设置一台。别担心!Linux Inside Windows 将拯救这一天!Linux Inside Windows (LIW) 是一个完整的虚拟机,运行着 Linux、Grasshopper、PostGres、Tomcat 以及托管服务器应用程序所需的其他所有必备组件。更重要的是,它下载和安装简单,并且可以直接在您的 Windows 机器上运行。点击这里获取有关如何下载、安装和使用它的完整详细信息。您可以在极短的时间内,无需任何新硬件,就能在 Linux 操作系统上运行您的 ASP.NET 应用程序……
依赖项
有时,像 Grasshopper 这样强大的工具也无法完成所有事情。因此,例如,如果您的应用程序使用了一些您没有源代码的依赖项,或者,如果它通过 COM Interop 使用了某些 DLL 或 COM 控件,那么您可能会认为它不可能迁移到 Linux。这不一定是真的,但确实带来了挑战。在这种情况下,您可以遵循一个最佳实践,大致如下——
- 通过编写访问器类来隔离依赖项。访问器类是代表您与依赖项进行通信的类。应用程序的其余部分随后应该只与访问器类通信,而不是直接与依赖项通信。
- 查找或编写(使用 Grasshopper 或其他方式)一个基于 Java 的实现来封装依赖项的功能。例如,如果依赖项是一个图表对象,那么您可以很容易地找到一个用 Java 实现的图表对象,并且它具有大部分相同的功能。
- 使用 Grasshopper 导入 Java 实现的 JAR 文件。编写一个新的访问器类,其属性/方法/事件的签名与步骤 1 中的类相同。
- 删除旧的依赖项和访问器类,并替换为新的。现在您应该可以准备好在 Linux 上使用 J2EE 运行了!
数据库
也许在将应用程序迁移到 Linux 上运行时遇到的最大困难在于数据库。对于典型的 Web 应用程序,托管逻辑的 Web 服务器和托管数据的数据库服务器很可能是独立的机器。如果数据库迁移成本太高(例如,如果 SQL Server 有很多存储过程),则典型模式是 Web 服务器和应用程序迁移到 Linux,而数据库服务器则继续在 Windows 上运行 SQL Server。但是,如果您确实想或必须将数据迁移到 Linux,这里有一些技巧。
如果使用 Postgres,有一个免费的工具叫做 ms2pg。这是一个实用程序,用于帮助将数据库从 Microsoft SQL Server 迁移到 PostgresSQL。它连接到每个数据库并复制表、主键、索引和数据。有关如何使用它以及如何下载它和其他补充项(如必要的驱动程序)的完整详细信息,可以在以下网址找到:http://www.edoceo.com/creo/ms2pg
它不支持存储过程,因此在迁移时,请仔细查看您正在使用的存储过程。在许多情况下,开发人员会编写存储过程来执行简单的任务,如 SELECT、INSERT 和 UPDATE 语句。遵循与依赖项(上方)类似的程序(无意双关),您可以隔离这些存储过程,并通过将存储过程转换为纯 SQL 来干净地迁移它们。
- 为应用程序中的 SQL 数据库功能编写一个访问器类。修改所有应用程序代码,使其使用此访问器类。
- 使用上面提到的 ms2pg 工具迁移您的表、键、索引和数据。
- 为 PostgresSQL 数据库编写一个新的访问器类,该类具有与原始类相同的属性/事件/方法签名。在原始调用 SQL Server 数据库上的存储过程的函数中,您将不得不改为调用 PostgresSQL 数据库上的 SELECT、INSERT、UPDATE 或其他查询或函数,并管理返回的数据集。
- 将(1)中的访问器类与(3)中的访问器类进行交换。
此任务的难度,尤其是在第 3 步,将根据您的应用程序而有所不同。然而,通过访问器类对代码进行隔离,并考虑这些类需要输入和输出什么,应该会使事情变得更简单。最终,为了成功迁移,您迁移的是应用程序的*功能*,而不是应用程序的*实现*。因此,如果应用程序执行相同的操作,使用一种实现类型(例如 SQL)而不是另一种(例如存储过程),那么您仍然可以说这是一次成功的迁移。
结论
本文是一个快速的一站式指南,介绍了在将 ASP.NET 应用程序从 Windows 迁移到 Linux 时可能需要的一些技巧和变通方法。强烈建议您尝试本文中概述的一些实践,如果您想快速上手,包括使用 Grasshopper、Linux Inside Windows 以及为处理依赖项或数据库问题而概述的实践。
祝您迁移顺利!
Grasshopper 团队。