是否有可能在felix上使用war war war?我在glassfish 3.1上使用了弹簧3.0.5和felix
我试图在felix中的OSGI war bundle中输入component-scan
标签,我得到以下异常。
我看到Equinox解决了similar bug,那么felix呢?是否有针对此问题的解决方法或解决方案?
P.S:如果我在web.xml contextConfigLocation
中使用*定义路径,则抛出相同的异常,例如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/*.xml</param-value>
</context-param>
例外:
2012-02-08 18:30:23,194 [pool-28-thread-1] (PathMatchingResourcePatternResolver.java:532) WARN - Cannot search for matching files underneath URL [bundle://275.0:2/examples/services/] because it does not correspond to a directory in the file system
java.io.FileNotFoundException: URL [bundle://275.0:2/examples/services/] cannot be resolved to absolute file path because it does not reside in the file system: bundle://275.0:2/examples/services/
at org.springframework.util.ResourceUtils.getFile(Res ourceUtils.java:204)
at org.springframework.core.io.AbstractFileResolvingR esource.getFile(AbstractFileResolvingResource.java :52)
at org.springframework.core.io.UrlResource.getFile(Ur lResource.java:168)
at org.springframework.core.io.support.PathMatchingRe sourcePatternResolver.doFindPathMatchingFileResour ces(PathMatchingResourcePatternResolver.java:528)
...
2012-02-08 18:30:23,194 [pool-28-thread-1] (PathMatchingResourcePatternResolver.java:353) DEBUG - Resolved location pattern [classpath*:examples/services/**/*.class] to resources []
的applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx">
<context:annotation-config/>
<tx:annotation-driven />
<context:component-scan base-package="examples.services" />
</beans>
感谢您的任何提示
答案 0 :(得分:1)
我找到了解决它的2个解决方法。我仍然很高兴听到felix真正的解决方案。
解决方法是:
public static URL resolve(URL url)抛出IOException
并返回此文件夹中的内容网址,例如:
String path = url.getPath();
String str;
if(path.contains("com")){
str = path.substring(path.indexOf("com"));
}
return new URL("file:\\c:\\temp_classes\\"+str);
答案 1 :(得分:0)
如果你不介意将自己绑在菲利克斯身上,那就是一个更优雅的解决方案。
package org.eclipse.core.runtime;
import java.net.URL;
import org.apache.felix.framework.BundleRevisionImpl;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
public class FileLocator {
private FileLocator() {}
public static URL resolve(URL url) {
if(url == null) {
return null;
}
Bundle bundle = FrameworkUtil.getBundle(FileLocator.class).getBundleContext().getBundle();
BundleRevisionImpl bundleRevision = bundle.adapt(BundleRevisionImpl.class);
return bundleRevision.getLocalURL(url.getPort(), url.getPath());
}
}
这要求您使用以下参数在Felix启动时导出框架:
-Dorg.osgi.framework.system.packages.extra=org.apache.felix.framework