`
dean_liu
  • 浏览: 76229 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

解决Opentaps/OFBiz在Eclipse启动时"Could not load VFS configuration"的问题

    博客分类:
  • Java
阅读更多
在命令行使用./startofbiz.sh启动Opentaps正常, 而在Eclipse中启动时出现异常,异常信息如下:
org.ofbiz.base.start.StartupException: Cannot start()
org.ofbiz.commons.vfs.CommonsVfsContainer (Initializing
StandardFileSystemManager (Could not load VFS configuration from
"file:/home/engineers/workspaces/ws-opentaps-tpg/opentaps/bin/META-INF/vfs-providers.xml ".))
at org.ofbiz.base.container.ContainerLoader.start(ContainerLoader.java:104)
at org.ofbiz.base.start.Start.startStartLoaders(Start.java:264)
at org.ofbiz.base.start.Start.startServer(Start.java:313)
at org.ofbiz.base.start.Start.start(Start.java:317)
at org.ofbiz.base.start.Start.main(Start.java:400)
org.ofbiz.base.container.ContainerException: Initializing
StandardFileSystemManager (Could not load VFS configuration from
"file:/home/engineers/workspaces/ws-opentaps-tpg/opentaps/bin/META-INF/vfs-providers.xml ".)
at
org.ofbiz.commons.vfs.CommonsVfsContainer.start(CommonsVfsContainer.java:51)
at org.ofbiz.base.container.ContainerLoader.start(ContainerLoader.java:102)
at org.ofbiz.base.start.Start.startStartLoaders(Start.java:264)
at org.ofbiz.base.start.Start.startServer(Start.java:313)
at org.ofbiz.base.start.Start.start(Start.java:317)
at org.ofbiz.base.start.Start.main(Start.java:400)
Caused by: org.apache.commons.vfs.FileSystemException: Could not load VFS
configuration from "file:/home/engineers/workspaces/ws-opentaps-tpg/opentaps/bin/META-INF
/vfs-providers.xml ".
at
org.apache.commons.vfs.impl.StandardFileSystemManager.configure(StandardFileSystemManager.java:199)
at
org.apache.commons.vfs.impl.StandardFileSystemManager.configurePlugins(StandardFileSystemManager.java:156)
at
org.apache.commons.vfs.impl.StandardFileSystemManager.init(StandardFileSystemManager.java:129)
at
org.webslinger.commons.vfs.VFSUtil.createStandardFileSystemManager(VFSUtil.java:351)
at
org.webslinger.commons.vfs.VFSUtil.createStandardFileSystemManager(VFSUtil.java:345)
at
org.ofbiz.commons.vfs.CommonsVfsContainer.start(CommonsVfsContainer.java:45)
... 5 more
Caused by: org.apache.commons.vfs.FileSystemException: Multiple providers
registered for URL scheme "ofbiz-home".
at
org.apache.commons.vfs.impl.DefaultFileSystemManager.addProvider(DefaultFileSystemManager.java:174)
at
org.apache.commons.vfs.impl.StandardFileSystemManager.addProvider(StandardFileSystemManager.java:362)
at
org.apache.commons.vfs.impl.StandardFileSystemManager.configure(StandardFileSystemManager.java:262)
at
org.apache.commons.vfs.impl.StandardFileSystemManager.configure(StandardFileSystemManager.java:195)
... 10 more


网络上(包括Opentaps论坛与OFBiz Mailing Lists)所提供的解决方案是在Opentaps中禁用vfs和webslinger,即把\framework\base\config\ofbiz-containers.xml中以下两行注释掉:
<container name="commons-vfs-container" class="org.ofbiz.commons.vfs.CommonsVfsContainer"/>
<container name="webslinger-container" class="org.ofbiz.webslinger.WebslingerContainer"/>

这种解决方案能够使Opentaps启动成功,但是实际上在Opentaps真正需要使用到vfs与webslinger就显得非常无能为力.

根据异常信息分析,原因有可能是重复加载了vfs-providers.xml(定义URL scheme为ofbiz-home的Provider).经过调试证实了笔者的猜测,在实例化org.apache.commons.vfs.impl.StandardFileSystemManager后,会调用其init方法来初始化,在init方法中调用了configurePlugins方法,以下为configurePlugins方法的代码:
	protected void configurePlugins() throws FileSystemException
	 {
		ClassLoader cl = findClassLoader();

		Enumeration enumResources = null;
		try
		{
			enumResources = cl.getResources(PLUGIN_CONFIG_RESOURCE);
		}
		catch (IOException e)
		{
			throw new FileSystemException(e);
		}

		while (enumResources.hasMoreElements())
		{
			URL url = (URL) enumResources.nextElement();
			configure(url);
		}
	}

在此段代码设置断点,发现%OPENTAPS_HOME%/bin/META-INF/vfs-providers.xml被加载了两次,同时抛出了异常,这正是问题所在.那么vfs-providers.xml为什么会被加载两次,请看以下代码:
protected void configurePlugins() throws FileSystemException
{
...
enumResources = cl.getResources(PLUGIN_CONFIG_RESOURCE);
...
}

java.lang.ClassLoader :
    public Enumeration<URL> getResources(String name) throws IOException {
	Enumeration[] tmp = new Enumeration[2];
	if (parent != null) {
	    tmp[0] = parent.getResources(name);
	} else {
	    tmp[0] = getBootstrapResources(name);
	}
	tmp[1] = findResources(name);

	return new CompoundEnumeration(tmp);
    }

推断出vfs-providers.xml在Parent ClassLoader中被加载后,又被Current ClassCloader加载.从ClassLoder方面再深入的分析就太费时间精力了,毕竟只是在Eclipse才有这个问题.有更快速方便的方法,就是修改StandardFileSystemManager.

在Opentaps根目录新建目录debug-in-eclipse-hack/src,在Eclipse中设置为源代码目录,把StandardFileSystemManager根据包路径拷贝进去,修改configurePlugins方法,代码如下.
    protected void configurePlugins() throws FileSystemException
    {
		ClassLoader cl = findClassLoader();

		Enumeration enumResources = null;
		try
		{
			enumResources = cl.getResources(PLUGIN_CONFIG_RESOURCE);
		}
		catch (IOException e)
		{
			throw new FileSystemException(e);
		}
		
		Set set = new HashSet();
		
		while (enumResources.hasMoreElements())
		{
			URL url = (URL) enumResources.nextElement();
			if (!set.contains(url.toString())){
				set.add(url.toString());
			}
		}
		
		Iterator itr = set.iterator();
		while (itr.hasNext()){
			String url = (String)itr.next();
			try {
				configure(new URL(url));
			} catch (MalformedURLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

Opentaps启动时新的StandardFileSystemManager类会被加载.
修改的代码会把重复的vfs-providers.xml去掉,从而解决问题.

好了,现在重新在Eclipse中启动Opentaps.如果还出现同样的问题,则把framework/webslinger/build/lib/ofbiz-webslinger.jar删除就可解决问题.
分享到:
评论

相关推荐

    opentaps+ ofbiz

    通过这些组件,opentaps+ ofbiz为企业提供了强大的工具,实现从产品发布、价格策略制定到订单处理和促销活动管理的全面电子商务解决方案。这个系统允许企业高效地管理产品组合,优化客户体验,同时提高运营效率。

    opentaps (from apache ofbiz) 架构图 (chart of architecture)

    OpenTaps(Open Source Total Appliance for Professional Services)是一款基于Apache OfBiz的企业级开源商务套件,旨在提供全面的企业应用解决方案,包括CRM(客户关系管理)、ERP(企业资源规划)、电子商务、...

    Opentaps(OFBiz)下fop(生成PDF)中文乱码解决方案

    NULL 博文链接:https://jeho0815.iteye.com/blog/1187197

    java源码crm-opentaps:git://gitorious.org/opentaps/opentaps.git的镜像

    【java源码crm-opentaps:git://gitorious.org/opentaps/opentaps.git的镜像】这个项目是基于Java编程语言的客户关系管理(CRM)系统的源代码,它是OpenTaps(开放企业资源规划与销售自动化系统)的一个版本。...

    opentaps 结构分析

    3. `hot-deploy`:这是一个热部署目录,用于放置开发者自定义的应用程序,它们将在OFBiz启动后加载。 4. `runtime`:存储运行时生成的数据,如日志、配置文件和临时文件,反映了OFBiz的运行状态。 5. `setup`:包含...

    ofbiz-opentaps表关联

    opentaps 所有表关联,HTML的。

    OFBiz教程_初学者的开发指南

    ### OFBiz教程——初学者的开发指南 #### 一、引言 《OFBiz教程——初学者的开发指南》是一份面向初次接触OFBiz框架的开发者们的宝贵资源。OFBiz是一个开源的企业级Java电子商务框架,提供了强大的业务管理工具,...

    Opentaps开发安装、配置、应用文档

    Opentaps是一个开源的企业资源规划(ERP)和客户关系管理(CRM)系统,与Ofbiz紧密集成。这个压缩包文件包含了一系列文档,旨在帮助开发者和用户进行Opentaps的开发、安装、配置以及应用。 1. **安装文档.docx**: ...

    ofbiz架构图

    Opentaps在OFBiz的基础上进行了扩展,引入了以下变化: 1. **Application Tier, Domain Tier, Infrastructure Tier**:Opentaps将OFBiz的business tier和model tier进一步细分为应用层、领域层和基础设施层,引入了...

    Apache OFBiz Development The Beginners Tutorial

    学习Opentaps和Ofbiz的经典入门!

    win7 安装Opentaps 1.5

    - 在整个安装过程中,确保MySQL服务已启动并且能被OpenTaps访问。 - 请确保所有涉及的文件路径正确无误,避免因路径错误导致的找不到文件或目录的问题。 - 安装完成后,你可能还需要进行一些初始化设置,如创建...

    ofbiz中文技术文档

    Opentaps(Open Source Enterprise Applications Suite)是基于Ofbiz构建的一个全面的企业资源规划(ERP)和客户关系管理(CRM)解决方案。Opentaps不仅包含了Ofbiz的所有功能,还添加了更多的企业级特性,如高级...

    OPENTAPS综合资料文档

    OPENTAPS(Open Source Enterprise Transaction Processing System)是一个全面的开源企业解决方案,它集成了CRM(客户关系管理)、ERP(企业资源规划)以及其他关键业务功能,如供应链管理、财务管理和生产制造等。...

    opentaps 1.0.2的partice(练习)例子

    通过这样的实践,开发者不仅可以掌握OpenTaps的使用,还能提升对Java企业级应用开发、数据库设计和Web服务的理解,从而更好地利用OpenTaps 1.0.2解决实际业务问题。同时,作为开源项目,OpenTaps也为开发者提供了...

    ofbiz资料大全

    Opentaps widget使用说明.rar OFBiz.Development.2008.rar Groovy中文教程.rar freemarker中文手册.rar ofbiz10.04表结构.rar OFBiz开发指南.rar Java开发必备装备包 IBM技术专区 OFBiz官网

    opentaps0.9相关文档

    5. **常见问题解答(FAQ)**:列举了使用过程中可能遇到的问题及其解决方案,帮助用户自行解决一些常见问题。 6. **Release Notes**:记录了0.9版本相对于前一个版本的改变,包括新功能、改进、已知问题和修复的bug...

    windows 下安装Opentaps

    在Windows环境下安装Opentaps是一项综合性的IT任务,涉及到多个步骤和组件的配置。以下是根据提供的文件信息,详细解析在Windows下安装Opentaps所需的关键知识点: ### 1. 安装并配置JDK 首先,确保安装了JDK1.5或...

    opentaps开发示例.pdf

    这些XML文件包含Web应用的初始化数据,通常用于在部署或测试时提供初始数据,保证应用可以正常运行。例如,agentSeedData.xml可能包含了为代理商相关功能提供的默认数据和配置。 4. GWT(Google Web Toolkit): ...

    xp opentaps2.5安装

    ### Openbravo 2.5在Windows XP下的安装与配置指南 #### 一、环境准备与配置 ...需要注意的是,由于提供的部分信息较为简略,实际操作过程中可能还需要参考更多的官方文档或社区资源来解决具体问题。

    ofbiz开发指南(2)

    在开发基于OFBiz的应用时,理解并管理Classpath至关重要。 **2.1 OFBiz与Classpath的集成** - **模块化架构**:OFBiz采用模块化设计,这意味着开发人员可以轻松添加或修改特定模块而不影响整个系统。这要求对...

Global site tag (gtag.js) - Google Analytics