You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Kent Tong (JIRA)" <ta...@jakarta.apache.org> on 2006/03/15 12:47:45 UTC

[jira] Commented: (TAPESTRY-848) Binding Exceptions more prominent with annotations

    [ http://issues.apache.org/jira/browse/TAPESTRY-848?page=comments#action_12370500 ] 

Kent Tong commented on TAPESTRY-848:
------------------------------------

Could this be what's happening:
1) In the getComponentConstructor() method in ComponentConstructorFactoryImpl, the spec of the component which uses the Bean annotation is enhanced, ie, a bean spec is added to it. Note that the spec is a part of the global application namespace. The resulting component constructor is also added to the _cachedConstructors map.
2) The reset service is called. This will tell the ComponentConstructorFactoryImpl to clear its _cachedConstructors map.
3) When the getComponentConstructor() method is called again on that component again, as the spec is global, it already contains the bean spec. But as _cachedConstructors map is now empty, it will try to enhance the spec again, resulting a duplication bean spec and this exception.

To solve the problem, one may add an "enhanced" flag in the component spec to avoid doing it twice.

> Binding Exceptions more prominent with annotations
> --------------------------------------------------
>
>          Key: TAPESTRY-848
>          URL: http://issues.apache.org/jira/browse/TAPESTRY-848
>      Project: Tapestry
>         Type: Bug
>   Components: Annotations
>     Versions: 4.0
>  Environment: Gentoo Linux, Jboss 4.0.2 JDK 5.0
>     Reporter: Chris Chiappone

>
> As posted in the tapestry forums:
> At first I thought I could work around these issues but they seem to
> be popping up more and more throughout my application.  Its really
> becoming an issue for me.
> Ever since I have moved from .page and .jwc files to annotations I get
> these exceptions more often.
> I don't believe I am doing anything wrong with these annotations.  As
> you can see by the following one I have just declared a DelegateBean
> in my class.  Using
> @Bean(SimpleValidationDeleage)
> public abstract SimpleValidationDelegate getDelegate();
> That same Delegate is used on mulitple pages and in components.  From
> what I understand this should be acceptable.
> This issue also has sprung up on my declaring the same Persistent
> property on different pages or components using the @Persist
> annotation.
> I've also recieved a similar exception doing the following in which both the 
> page and component contain:
> @InjectState("visit")
> public abstract void getVisitObj();
> I was able to work around the issue by changing the component to be
> @InjectState("visit")
> public abstract void getVisitObjComp();
> I didn't run into these problems before I used annotations.  I'd also
> hate to have to go back to .page and .jwc files since there are so
> many files that I've changed.
> Here is an one of the exceptions:
> Exception invoking listener method searchLinkListener of component
> SearchResults/border.search: Error: An error occured processing
> annotation @org.apache.tapestry.annotations.Bean(value=class
> view.util.SimpleValidationDelegate, lifecycle=REQUEST, initializer=)
> of public abstract view.util.SimpleValidationDelegate
> view.components.BasicSearch.getDelegate(): Bean delegate has already
> been declared (at Annotation
> @org.apache.tapestry.annotations.Bean(value=class
> view.util.SimpleValidationDelegate, lifecycle=REQUEST, initializer=)
> of public abstract view.util.SimpleValidationDelegate
> view.components.BasicSearch.getDelegate()).
> binding: org.apache.tapestry.binding.ListenerMethodBinding@fe8153[template
> parameter listener, component=SearchResults/border.search,
> methodName=searchLinkListener,
> location=context:/WEB-INF/BasicSearch.html, line 16]
> component: $BasicSearch_181@4c72e3[SearchResults/border.search]
> location: context:/WEB-INF/BasicSearch.html, line 16
> 11 <br>
> 12 <input jwcid="companyField"
> 13 autocomplete="off" size="20" id="txt1" /> <br>
> 14 <input jwcid="@Submit" name="Submit" label="message:submit" /></form>
> 15
> 16 <a jwcid="@DirectLink" listener="listener:searchLinkListener">
> 17 &raquo;&nbsp;<span key="advanced">Advanced</span>
> 18 </a>
> 19 </div>
> 20 </td>
> 21 </tr>
> org.apache.hivemind.ApplicationRuntimeException
> Error: An error occured processing annotation
> @org.apache.tapestry.annotations.Bean(value=class
> util.SimpleValidationDelegate, lifecycle=REQUEST, initializer=) of
> public abstract view.util.SimpleValidationDelegate
> view.components.BasicSearch.getDelegate(): Bean delegate has already
> been declared (at Annotation
> @org.apache.tapestry.annotations.Bean(value=class
> view.util.SimpleValidationDelegate, lifecycle=REQUEST, initializer=)
> of public abstract view.util.SimpleValidationDelegate
> view.components.BasicSearch.getDelegate()).
> location: Annotation @org.apache.tapestry.annotations.Bean(value=class
> view.util.SimpleValidationDelegate, lifecycle=REQUEST, initializer=)
> of public abstract view.util.SimpleValidationDelegate
> view.components.BasicSearch.getDelegate()
> org.apache.hivemind.ApplicationRuntimeException
> Bean delegate has already been declared (at Annotation
> @org.apache.tapestry.annotations.Bean(value=class
> view.util.SimpleValidationDelegate, lifecycle=REQUEST, initializer=)
> of public abstract view.util.SimpleValidationDelegate
> view.components.BasicSearch.getDelegate()).
> location: Annotation @org.apache.tapestry.annotations.Bean(value=class
> view.util.SimpleValidationDelegate, lifecycle=REQUEST, initializer=)
> of public abstract view.util.SimpleValidationDelegate
> view.components.BasicSearch.getDelegate()
> Stack Trace:
> org.apache.tapestry.spec.ComponentSpecification.addBeanSpecification(ComponentSpecification.java:410)
> org.apache.tapestry.annotations.BeanAnnotationWorker.performEnhancement(BeanAnnotationWorker.java:64)
> org.apache.tapestry.annotations.AnnotationEnhancementWorker.performMethodEnhancement(AnnotationEnhancementWorker.java:142)
> org.apache.tapestry.annotations.AnnotationEnhancementWorker.performMethodEnhancement(AnnotationEnhancementWorker.java:110)
> org.apache.tapestry.annotations.AnnotationEnhancementWorker.performEnhancement(AnnotationEnhancementWorker.java:70)
> $EnhancementWorker_1090cd8cc4b.performEnhancement($EnhancementWorker_1090cd8cc4b.java)
> $EnhancementWorker_1090cd8cc4d.performEnhancement($EnhancementWorker_1090cd8cc4d.java)
> $EnhancementWorker_1090cd8cc2d.performEnhancement($EnhancementWorker_1090cd8cc2d.java)
> org.apache.tapestry.services.impl.ComponentConstructorFactoryImpl.getComponentConstructor(ComponentConstructorFactoryImpl.java:97)
> $ComponentConstructorFactory_1090cd8cc1a.getComponentConstructor($ComponentConstructorFactory_1090cd8cc1a.java)
> org.apache.tapestry.pageload.PageLoader.instantiateComponent(PageLoader.java:531)
> org.apache.tapestry.pageload.PageLoader.createImplicitComponent(PageLoader.java:481)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org