-
1. Re: Spring Component Auto Detection
alesj Jun 27, 2008 3:39 AM (in response to zithuba)OK, this is not really the topic of this forum (see sticky), but since it's an interesting topic, and I (re)wrote most of VFS, I'll help you. :-)
Where can I find the VFS spec?
There is no spec.
This is JBoss custom virtual-file-system.
Try here:
- http://wiki.jboss.org/wiki/JBoss5VirtualFileSystem
- http://wiki.jboss.org/auth/wiki/JBoss5DeploymentFramework
The idea of VFS is to be structure agnostic - no diff between 'walking' over directories/files and jars/entries.
So besides vfsfile, there are vfszip and vfsjar protocols - used for (nested)*archive handling.
vfszip is new impl of vfsjar, removing locking issues that we had on Windows.
So, take a look, and if you have any questions, simply post here and I'll try to answer.
btw: which Spring class is doing this? -
2. Re: Spring Component Auto Detection
zithuba Jun 27, 2008 3:45 AM (in response to zithuba)Thanks for the pointers.
Here is the stack trace:
2008-06-27 09:41:32,514 DEBUG [org.springframework.core.io.support.PathMatchingResourcePatternResolver] Cannot search for matching files underneath URL [vfsfile:/D:/server/jboss-5.0.0.Beta4/server/wits/deploy/wits-deployment-ear.ear/wits-wims-batch.jar/za/ac/wits/batch/] because it does not correspond to a directory in the file system
java.io.FileNotFoundException: URL [vfsfile:/D:/server/jboss-5.0.0.Beta4/server/wits/deploy/wits-deployment-ear.ear/wits-wims-batch.jar/za/ac/wits/batch/] cannot be resolved to absolute file path because it does not reside in the file system: vfsfile:/D:/server/jboss-5.0.0.Beta4/server/wits/deploy/wits-deployment-ear.ear/wits-wims-batch.jar/za/ac/wits/batch/
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:198)
at org.springframework.core.io.UrlResource.getFile(UrlResource.java:156)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.doFindPathMatchingFileResources(PathMatchingResourcePatternResolver.java:495)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:341)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:262)
at org.springframework.context.support.AbstractApplicationContext.getResources(AbstractApplicationContext.java:1019)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:177)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:200)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1253)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1243)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
at org.jboss.spring.factory.NamedXmlBeanDefinitionReader.registerBeanDefinitions(NamedXmlBeanDefinitionReader.java:54)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:190)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:147)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:132)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
at org.jboss.spring.factory.NamedXmlBeanDefinitionReader.registerBeanDefinitions(NamedXmlBeanDefinitionReader.java:54)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.jboss.spring.factory.NamedXmlApplicationContext.loadBeanDefinitions(NamedXmlApplicationContext.java:87)
at org.jboss.spring.factory.NamedXmlApplicationContext.loadBeanDefinitions(NamedXmlApplicationContext.java:82)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
at org.jboss.spring.factory.NamedXmlApplicationContext.(NamedXmlApplicationContext.java:61)
at org.jboss.spring.factory.NamedXmlApplicationContext.(NamedXmlApplicationContext.java:50)
at org.jboss.spring.deployers.ApplicationContextDeployer$1.doCreate(ApplicationContextDeployer.java:41)
at org.jboss.spring.deployers.ApplicationContextDeployer$1.doCreate(ApplicationContextDeployer.java:44)
at org.jboss.spring.deployers.AbstractSpringMetaDataDeployer$SpringDeploymentVisitor.deploy(AbstractSpringMetaDataDeployer.java:72)
at org.jboss.spring.deployers.AbstractSpringMetaDataDeployer$SpringDeploymentVisitor.deploy(AbstractSpringMetaDataDeployer.java:58)
at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployerWithInput.internalDeploy(AbstractRealDeployerWithInput.java:108)
at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:169)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:853)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:906)
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:794)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:327)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1309)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:734)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:862)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:784)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:622)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:411)
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:498)
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:506)
at org.jboss.system.server.profileservice.ProfileServiceBootstrap.loadProfile(ProfileServiceBootstrap.java:246)
at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:131)
at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:408)
at org.jboss.Main.boot(Main.java:208)
at org.jboss.Main$1.run(Main.java:534)
at java.lang.Thread.run(Thread.java:619) -
3. Re: Spring Component Auto Detection
alesj Jun 27, 2008 4:08 AM (in response to zithuba)I guess we'll be seeing a lot of these in new JBoss5. :-(
Since not a lot of frameworks out there knows how to handle anything else besides plain JDK url/uri stuff, which is a shame.
I already provided a patch for Facelets, so that our Seam could work.
I suggest you go ahead, try how far you can go with fixing this with some vfs aware code. Or making that 'file' agnostic.
If you got stuck, I'll help you.
And then we can see what we should do with that:
1) separate artifact bridging vfs&spring_component_lookup
2) patch for spring :-)
3) useful instructions for others -
4. Re: Spring Component Auto Detection
alesj Jun 27, 2008 4:17 AM (in response to zithuba)"alesj" wrote:
OK, this is not really the topic of this forum (see sticky), but since it's an interesting topic, and I (re)wrote most of VFS, I'll help you. :-)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353) at org.jboss.spring.factory.NamedXmlApplicationContext.(NamedXmlApplicationContext.java:61) at org.jboss.spring.factory.NamedXmlApplicationContext.(NamedXmlApplicationContext.java:50) at org.jboss.spring.deployers.ApplicationContextDeployer$1.doCreate(ApplicationContextDeployer.java:41) at org.jboss.spring.deployers.ApplicationContextDeployer$1.doCreate(ApplicationContextDeployer.java:44) at org.jboss.spring.deployers.AbstractSpringMetaDataDeployer$SpringDeploymentVisitor.deploy(AbstractSpringMetaDataDeployer.java:72) at org.jboss.spring.deployers.AbstractSpringMetaDataDeployer$SpringDeploymentVisitor.deploy(AbstractSpringMetaDataDeployer.java:58)
You should mention this.
Now I feel like a smart ass. :-) -
5. Re: Spring Component Auto Detection
zithuba Jun 27, 2008 5:49 AM (in response to zithuba)Sorry for not mentioning that, I wanted to be short, but I missed the important part.
I am looking at it, I will surely ask about what I will come up with as the fix. -
6. Re: Spring Component Auto Detection
alesj Jun 27, 2008 5:53 AM (in response to zithuba)"zithuba" wrote:
Sorry for not mentioning that, I wanted to be short, but I missed the important part.
Nah, np, just kiddin'. :-)"zithuba" wrote:
I am looking at it, I will surely ask about what I will come up with as the fix.
I'm looking too.
I already have a few ideas, but you go ahead.
More heads know more ... or how they say. :-) -
7. Re: Spring Component Auto Detection
alesj Jun 27, 2008 7:15 AM (in response to zithuba)"alesj" wrote:
I'm looking too.
I already have a few ideas, but you go ahead.
OK, this is what I came up with:
- http://anonsvn.jboss.org/repos/jbossas/trunk/spring-int/src/main/org/jboss/spring/io
If you can pull this down, add the missing bit, in NamedXmlApplicationContextprotected ResourcePatternResolver getResourcePatternResolver() { return new VFSResourcePatternResolver(getClassLoader()); }
Build it, test it. :-) -
8. Re: Spring Component Auto Detection
alesj Jun 27, 2008 9:36 AM (in response to zithuba)Or, can you explain me what I need to do to create an example that is gonna use that?
-
9. Re: Spring Component Auto Detection
alesj Jun 28, 2008 7:03 PM (in response to zithuba)"alesj" wrote:
Or, can you explain me what I need to do to create an example that is gonna use that?
I've changed my Spring-deployer tests to use @Component scanning, and they pass. :-)
I'll release new deployer right after JBoss5_CR1.
But you can already build it yourself from the trunk. -
10. Re: Spring Component Auto Detection
zithuba Jun 30, 2008 4:16 AM (in response to zithuba)I get an error when building the classes, it is on the 'VFSResource.java' on the line with 'getCompatibleURL(file)' method call on VFSUtils. I was using the JBoss source I downloaded to compile.
How can I build from the trunk and have all the dependencies?Or, can you explain me what I need to do to create an example that is gonna use that?
I had a class annotated with @Component, that is an aspect for sending emails after the Job has finished running with a success or error. I wanted to use auto detection. -
11. Re: Spring Component Auto Detection
alesj Jun 30, 2008 6:08 AM (in response to zithuba)"zithuba" wrote:
How can I build from the trunk and have all the dependencies?
It should work, otherwise I wouldn't commit - specially so close to CR1 release. ;-)
Do a clean checkout.
Go to build dir.
Simply run 'build clean most'.
This does everything, downloads all dependencies via maven2 (see component-matrix/pom.xml), builds AS instance. -
12. Re: Spring Component Auto Detection
zithuba Jul 2, 2008 2:50 AM (in response to zithuba)"alesj" wrote:
It should work, otherwise I wouldn't commit - specially so close to CR1 release. ;-)
It does work, but with prior versions of Spring. I am using 2.5.3 in JBoss AS CR1 and Spring has added a method called 'isReadable' in Resource. I have added the method in my local version and compiled and it is working. But I just returned true for all cases, as I don't have a full grasp of the VFS.
Thanks for the great work. -
13. Re: Spring Component Auto Detection
alesj Jul 2, 2008 7:52 AM (in response to zithuba)I updated the trunk to use 2.5.5.
And I added thispublic boolean isReadable() { try { return file.getSize() > 0; } catch (IOException e) { throw new RuntimeException(e); } }
instead of plain true.
Can you try it out? -
14. Re: Spring Component Auto Detection
zithuba Aug 19, 2008 4:40 AM (in response to zithuba)Hi There again,
I am trying to deploy a jar with the spring beans and I get this error:
Caused by: java.lang.IllegalArgumentException: Cannot find entry: java.io.FileInputStream@37f44d, za/ac/wits/batch/aop
at org.jboss.virtual.plugins.context.zip.ZipEntryContext.findEntry(ZipEntryContext.java:338)
at org.jboss.virtual.plugins.context.zip.ZipEntryContext.createZipSource(ZipEntryContext.java:284)
at org.jboss.virtual.plugins.context.zip.ZipEntryContext.init(ZipEntryContext.java:214)
at org.jboss.virtual.plugins.context.zip.ZipEntryContext.(ZipEntryContext.java:145)
at org.jboss.virtual.plugins.context.zip.ZipEntryContext.(ZipEntryContext.java:130)
at org.jboss.virtual.plugins.context.zip.ZipEntryContextFactory.getVFS(ZipEntryContextFactory.java:71)
at org.jboss.virtual.VFS.getVFS(VFS.java:135)
at org.jboss.virtual.VFS.getRoot(VFS.java:149)
at org.jboss.spring.io.VFSResourcePatternResolver.getVFSResources(VFSResourcePatternResolver.java:85)
at org.jboss.spring.io.VFSResourcePatternResolver.findPathMatchingResources(VFSResourcePatternResolver.java:69)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:262)
at org.springframework.context.support.AbstractApplicationContext.getResources(AbstractApplicationContext.java:1019)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:177)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:200)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1253)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1243)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
at org.jboss.spring.factory.NamedXmlBeanDefinitionReader.registerBeanDefinitions(NamedXmlBeanDefinitionReader.java:52)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
If I deploy the same jar inside an ear file it works fine.
Thanks.