ASP.NET 报表工具 Grasshopper (迁移到 Linux)






2.38/5 (5投票s)
2005 年 10 月 2 日
7分钟阅读

39223

397
将报表入门工具移植并部署到 Linux (RH7.3/Tomcat5.0.28/Grasshoper1.61)
引言
我的天!我简直不敢相信我正在写这篇文章,这是我第一次在网上任何地方贡献内容;(对我来说真的很难,但一台 XBox 确实是激励!)。
在迁移到 Linux 的竞赛开始之前(大约提前一个月),我发现了 MainSoft 这个有趣的工具 Grasshopper,相信我;这是一个非常好的工具,可以在这里找到: http://dev.mainsoft.com/。
我花了一些时间玩这个工具,然后,哇!;迁移到 Linux 的竞赛宣布了(我非常兴奋);我当时使用的是 1.60 版本,这给我带来了一些麻烦(一开始我并没有注意到)。
我非常喜欢 Mark Cafazzo 关于 Linux 竞赛的文章,所以我会稍微模仿他的写作方式。
注意:这里提供的演示项目文件旨在作为一个独立的软件包,可以直接部署到 tomcat 服务器上。但由于文章文件大小限制为 2MB,因此文件
- mscorlib.jar
- Microsoft.VisualBasic.jar
- System.jar
- System.Xml.jar
- System.Web.jar
- System.Data.jar
- System.Drawing.jar (Beta 版)
- System.DirectoryServices.jar
- Novell.Directory.Ldap.jar
- System.WebServices.jar
已从演示项目 zip(war)文件中移除。
要求
对于本文,您将需要
- 一份来自 asp.net 网站 (http://www.asp.net/) 的报表入门工具副本
- 一个 Sql Server 数据库(或 MSDE)来托管 Reports DB。
- Mainsoft grasshoper (v1.61),可从其网站下载 http://dev.mainsoft.com/
- Mainsoft 的 beta 模块(主要是 System.Drawing beta),从其网站下载
- 一个 Java Servlet 容器(grasshoper 包含一个 Apache Tomcat 版本)
- 可选,对于勇敢的人来说,可以尝试一个 Linux 发行版(redhat, suse, debian 等)来测试最终的应用
方法论
要成功地将 ASP.NET 应用程序移植到 Linux,我知道有两种可能的方法:重写所有代码,或者使用 .NET 框架的重新实现;(我个人认为第二种更好、更容易)。Mono 项目旨在移植 .Net 框架,以便您可以在其他平台上使用它;Mainsoft 也有类似的方法(他们将 .NET 命名空间组件实现为 Java 组件,以便它们可以在支持 Java 的环境中运行)。
Mainsoft 为我们提供了一种有效的途径,将编译好的 MSIL 程序集转换为类似的 Java(Java 字节码);由于它们没有被重新编译或修改,只是被翻译成 Java 的形式,因此性能不受影响。
一旦我们的代码成为支持 Java 的字节码,grasshoper 将为我们打包,并通过 WAR 文件部署(基本上是一个重命名为 zip 的文件,其中包含应用程序运行所需的文件和程序集)。
所以基本上,只要我们的 Java 框架组件的名称与 .NET 的名称相同(System, System.Data 等),我们就可以为 Java 环境生成相同的应用程序。
要将任何 ASP.NET 应用程序移植到 Java,我建议以下步骤:
- 生成 J2EE 项目(通过转换或新的部署复制/粘贴方式)
- 充分熟悉代码,以确定哪些组件需要重新实现或由 Java 组件补充。同时分析 .NET 框架中哪些部分尚未实现或不受支持。
- 添加必要的组件并克服缺失的部分。
- 编译并检查是否有警告或错误,如果有,请重复上述步骤。
- 完全测试您的应用程序,可能有些部分的行为会与预期不同,如果出现任何问题或故障,请进行 DEBUG,找到产生错误的根源。同时,请阅读服务器日志,这可以为您提供关于缺失和必需的引用或配置的非常重要的信息。
- 重复此过程,直到您的应用程序行为符合您的要求。
- 一旦应用程序在测试环境中运行良好,创建部署包,并至少在另一个服务器上进行测试(最好是在最终条件环境)。
- 在克服了问题之后,在最终环境中再次测试。
挑战
- 请记住从 mainsoft 下载 System.Drawing beta 版本,更新这些引用的说明在此: http://dev.mainsoft.com/Default.aspx?tabid=136,将新的 System.Drawing 复制到 jgac 文件夹并在您的 Visual Studio 中更新。
- 首先注意到的是 web.config 中不受支持的标签,对于这个项目,这些标签并非必需(sessionstate, pages validaterequest, customerrors),所以我决定注释掉它们。问题解决。
- 如果您遇到类未找到的抱怨问题,也请检查项目命名空间是否正确,我生成的项目有一个生成的命名空间 Reports_J2EE,所以请注意,此项目中的项目命名空间是空白的。
- 请注意,grasshoper 中的调试环境具有服务器级别的所有依赖项。如果您没有设置对 MSSQL jars 的引用,它也能正常工作;但对于部署的 war 文件,它们将不包含在内。请确保添加对 msbase.jar 和 msutil.jar 的引用;另外,在创建最终的部署 war 文件时,请确保选择“创建自包含包”。
- 更改 web.config 中的连接字符串,使其指向实际的数据库服务器并重新编译,我遇到了错误,因为我的数据库托管在另一台机器上。
- 在 ChartGenerator.aspx.vb 的第 33 行代码是 "Environment.UserDomainName.ToLower",如果此函数导致问题,请注释掉它。
- 在第一次部署时,我遇到了这种糟糕的表示,因为在 Linux 中文件是区分大小写的,请确保将 Docs 重命名为 docs,Images 重命名为 images,等等,对于您认为不会正确显示的那些内容。
- 我在图表(可视化报表)方面遇到了一个问题,这是由 grasshoper 的版本问题引起的,我在开发环境中测试时没有生成 ChartGenerator 的图形,请确保您使用的是 grasshoper 1.61 版本和新的 System.Drawing 组件。
- 请注意这一点,如果您将应用程序部署到 Linux 机器上的 tomcat 服务器,并且它是一个无窗口的环境,请在启动 tomcat 的 shell 中添加 CATALINA_OPTS="-Djava.awt.headless=true"。否则您将看不到图表和图像。这是 java.awt 的一个问题。
在 Linux 机器上配置和部署
安装 Linux(任何版本)超出了本文的范围,但是,如果您在 Google 上搜索“安装 Linux”或访问这里,可能会发现它很有用: http://www.tldp.org/LDP/gs/gs.html
Linux 提供商使安装 Linux 变得容易,几乎任何发行版都有图形界面,完成安装过程应该不难。作为替代方案,您可以尝试 Mainsoft 的 Windows 内的 Linux,可以在其下载网站的“Linux 工具”中找到;您也可以尝试 VMWare 等虚拟机环境,如果您喜欢的话。
虚拟机环境还有一个优点,就是您可以犯错误而不会导致任何致命的后果,您可以从头开始。
根据您选择的发行版,在您的 Linux 系统上安装 tomcat 服务器,您可以使用 YaST 或 RPM,它们是 Linux 机器上应用程序的包管理器。
对于 Suse,您可以打开 YaST 控制中心并选择安装
- java-1_4_2-sun
- java-1_4_2-sun-devel
- java-1_4_2-sun-jdbc
- tomcat5
- tomcat5-admin-webapps
- tomcat5-webapps
这将为您提供所需的 Java 环境,如果管理器抱怨依赖关系,请安装它们。
安装 tomcat 后,请确保启动 tomcat 服务,最通用的方法是
- /etc/init.d/tomcat start
但对于 Redhat/Fedora 来说
- service tomcat start
也能完成任务。
如果您的环境不支持 YaST 但支持 RPM,此 URL 可能也有用: http://mirrors.sunsite.dk/jpackage/1.5/generic/free/RPMS/
一旦您的 tomcat 运行起来,您可以在 https://:8080/ 上进行测试,如果您看到那个有趣的猫,说明您已经成功启动。同时测试欢迎页面上提供的示例。
您可以在 https://:8080/admin 查看您的 tomcat 的服务器范围管理员,请确保编辑 config 目录下的 "tomcat-users.xml" 文件,并确保 manager 和 admin 组存在。
您的基于 Web 的部署工具位于 https://:8080/manager/html,您可以在此处部署您的 war 文件或部署一个基于目录的应用程序。
一旦您的 war 文件部署成功,请进行测试, voilà!;您的应用程序已经在 tomcat 服务器上运行起来了。
对于最勇敢的人来说,还需要最后一步,使其通过 mod_jk 或 mod_jk2 连接器在 Apache 上运行,以获得一个真正的 Java 应用程序。
其他服务器的额外安装说明可以在这里找到: http://dev.mainsoft.com/Default.aspx?tabid=32&src=ww_PackagingDistributingModules.html
祝您移植顺利!