转载 在Eclipse RCP中使用Spring或者Hibernate收藏
http://blog.csdn.net/ttodle/archive/2006/04/27/679422.aspx
新一篇: JAVA实现用系统关联的程序打开文件 | 旧一篇: 在 Ubuntu 5.10 上安裝 Sun Java SDK 1.5
在RCP中使用Spring,最关键的一点在于spring配置文件的读取,因为RCP使用自己的ClassLoader,所以用通常的方法是无法装载Spring的配置文件。解决的思路是:在读取Spring配置文件时将RCP的ClassLoader暂时换一下。
在这里我根据Spring配置文件在项目中的存放位置,给出两种办法。
一、配置文件存放在源代码根目录下。
假设我有一个叫admin_console的项目,我把Spring的配置文件myspring.xml放在源代码根据目录src下,如下图所示
admin_console
--src
--cn //包名
--com
--chengang
---...... //源代码类
--myspring.xml //Spring配置文件,位于src目录下和cn目录平级
--bin
--lib
--icons
--properties
那么我们在RCP程序中可以这样来装载myspring.xml
ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
ctx = new ClassPathXmlApplicationContext("/myspring.xml");
} finally {
Thread.currentThread().setContextClassLoader(oldLoader);
}
二、配置文件存放在项目根目录的某个子目录下
项目根目录和源代码根目录是不同的两个概念。如上图的项目结构中,src是源代码根目录,admin_console是项目根目录,那么properties就是项目根目录下的一个子目录。
如果将myspring.xml放入到properties目录中,以上的读取代码就没用了,读取方法如下:
ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
ctx = new FileSystemXmlApplicationContext(ProjectUtil.toFullPath("properties/myspring.xml"));
} finally {
Thread.currentThread().setContextClassLoader(oldLoader);
}
其中ProjectUtil.toFullPath是我自己写的一个方法,主要是得到myspring.xml的绝对路径,其代码如下:
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import com.wxxr.management.admin.console.AdminConsolePlugin;
/**
* 用于插件项目和非插件项目,提供两者通用的方法接口
* @author chengang 2006-3-30
*/
public class ProjectUtil {
private static AbstractUIPlugin plugin = AdminConsolePlugin.getDefault();
private ProjectUtil() {}
/**
* 判断当前的运行状态是否为插件方式
* @return true=插件方式运行
*/
private static boolean isPlugin() {
return plugin != null;
}
public static URL getURL(String path) {
if (isPlugin())//如果是插件
return FileLocator.find(plugin.getBundle(), new Path(path), null);
else
try {
return new URL("file:" + path);
} catch (MalformedURLException e) {
throw new RuntimeException(path + " is error", e);
}
}
public static InputStream getInputStream(String path) {
URL url = getURL(path);
try {
return url.openStream();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static String toFullPath(String path) {
if (isPlugin()) {
try {
return FileLocator.toFileURL(ProjectUtil.getURL(path)).getPath();
} catch (IOException e) {
throw new RuntimeException(path + " toFullPath is fault", e);
}
} else {
return path;
}
}
}
三、总结
上面两种方式那一种更好呢?应该是第二种。一般来说,源代码的编译文件会打成一个jar包(其实不打成一个JAR包也可以的,我在很多以前就尝试过将class文件松散的部署,如果哪个类要修改,修改后就只部署覆盖这个 class,看起来也挺方便。不过这种方式不是最佳实践,不推荐正式发布时使用,一不心可能引起依赖它的其他类出现问题。)。如果用第一种方式在项目打包后,myspring.xml会打包到jar文件中,这样不利于今后对myspring进行动态修改。如果用第二种就没有这种缺点。
很多时候,在Eclipse开发环境中,运行RCP程序没有问题。但导出项目后,在独立的环境中却报配置文件(不光是Spring)找不到的错误,解决的方法都基本与此相同。
分享到:
相关推荐
在实际操作中,可能会遇到一些特定问题,如依赖冲突、资源优化等,这需要根据实际情况进行调整和解决。同时,持续关注Eclipse RCP的更新和社区支持,可以帮助你更好地利用这个平台的优势,提升开发效率和用户体验。
4. **创建Spring Extension Factory**:在Eclipse RCP中,你需要创建一个SpringExtensionFactory,这是一个特殊的工厂类,负责从OSGi服务中获取Spring配置并实例化Bean。 5. **注册OSGi服务**:将...
打包时,需要考虑如何实现这一功能,比如通过p2(Eclipse的更新管理器)或者自定义的更新服务。 7. **测试和兼容性**: 在打包完成后,进行全面的测试以确保exe文件在不同版本的Windows系统和硬件配置上都能正常工作...
3. **加载Spring上下文**:在RCP应用启动时,需要加载Spring配置文件,创建ApplicationContext。这通常在RCP应用的启动类或者初始化方法中完成。 4. **注入Spring Bean**:在RCP组件(如ViewPart或EditorPart)中,...
本文将深入探讨如何在RCP应用中实现这一功能,以及如何解决打包后JavaScript方法调用及资源路径的问题。 首先,集成Google Maps通常涉及到以下几个步骤: 1. 获取API密钥:在Google Cloud Console中创建一个新的...
以及Eclipse RCP扩展的使用和扩展点的开发,掌握这些技术知识的读者将能构建一个结构完整的Eclipse RCP软件,并解决软件开发过程中遇到的故障;实战篇(第13-15章)详细讲解了Eclipse RCP与Spring OSGi框架、...
### Eclipse RCP+Spring构建富客户端Web程序 #### 摘要 随着技术的发展和用户需求的变化,构建高效、响应迅速且用户体验良好的客户端应用变得尤为重要。传统的Web 2.0和丰富的互联网应用(RIA)虽然流行,但在某些...
在学习过程中,不断实践和调试是提升能力的关键,同时,利用Eclipse社区丰富的资源和活跃的论坛,能帮你解决遇到的问题,加速学习进程。记得,RCP的威力在于其灵活性和扩展性,所以,掌握好基础,不断探索和创新,你...
- **开发者邮件列表**:springframework-rcp-dev@lists.sourceforge.net,用于开发者之间的交流和问题解答。 - **问题跟踪系统**:http://opensource2.atlassian.com/projects/spring,用于提交和追踪项目的bug和新...
RCP导出EXE 老大难问题。 RCp 程序导出步骤,保证能够导出~
本文主要汇总了与 RCP 项目相关的打包部署问题以及解决中文乱码的方法。 首先,我们要了解 RCP 项目的构成。在 RCP 项目中,`build.properties` 和 `plugin.xml` 是两个核心文件。`build.properties` 文件定义了...
通过本手册的深入学习,开发者不仅能够掌握Spring RCP的关键技术点,还能够灵活运用这些知识解决实际项目中的问题,提升应用的用户体验和性能表现。无论是初学者还是有经验的开发者,都能从中获得宝贵的指导和灵感。
5. **打包与部署**:将RCP应用打包成可执行文件,供用户安装和使用。 总的来说,RCP和OSGI的结合提供了一种高效、灵活且易于维护的桌面应用开发方式,开发者可以充分利用它们的优势来构建复杂、功能丰富的应用程序...
标题 "spring rcp" 暗示我们要讨论的是Spring Rich Client(Spring RCP)平台,这是一个基于Spring框架的桌面应用程序开发平台。Spring RCP提供了一种利用Spring的强大功能来构建可扩展、模块化的桌面应用的方法。 ...
4. **配置Debug Configurations**:在调试配置中设定必要的参数,使调试过程能准确地定位和解决问题。 5. **新建插件工程**:创建一个新的Eclipse插件项目,作为Teamcenter功能的开发起点。 6. **运行新建的工程**:...
5. **打包与部署**:使用PDE工具将所有插件打包成可执行的RCP应用程序,以便在不同环境中运行。 在提供的资源中,“RCP插件配置说明.txt”文件很可能是详细的文字教程,涵盖了上述步骤的关键细节。而“RCP插件配置...
"RCP 常见的扩展点指南" RCP(Rich Client Platform)是 Eclipse 基金会推出的一个基于 Java 的开源平台,旨在提供一个通用的客户端应用程序开发平台。RCP 的扩展点是其核心组成部分之一,本节将详细介绍 RCP 的...
5. **运行时配置**: 更新RCP程序的启动配置,确保新的插件被包含在运行时环境中。这可以通过修改`.product`文件或使用Eclipse的运行配置来实现。 6. **测试与调试**: 编译并运行RCP程序,测试新插件是否能正常工作...
比较好的OSGi学习教程,分享给大家,简单易学...。。。