Help

Controls

PermLinkWikiLink

Built with Seam

You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.

Forum: Seam Users Forum ListTopic List
27. Dec 2008, 18:18 America/New_York | Link

seam 2.1.1gs seems to keep complaining that it cant find my @Destroy method on my action class

I cant see whats wrong with the component class defn - can anyone shed some light on whats going on here.

my comonent code looks like this.

package org.domain.will.session;

import javax.persistence.EntityManager;

import org.domain.will.entity.member.Member;
import org.domain.will.session.security.PasswordManager;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Role;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.web.RequestParameter;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.framework.EntityHome;
import org.jboss.seam.log.Log;

@Name("memberHome")
@Scope (ScopeType.CONVERSATION)
public class MemberHome extends EntityHome<Member>
{
	static final long serialVersionUID = 1;

    @RequestParameter 
    String memberId;

    @Logger
	private Log log;
	
    @In FacesMessages facesMessages;
    @In (create=true) PasswordManager passwordManager;
    
    private boolean changed;
    


    @Factory("newMember")
    public Member initNode() 
    {
    	facesMessages.add ("new member created by factory");
    	log.info("newMember factory create initiated");
    	return getInstance();
    }
    

    
    @Override
    public Object getId() 
    { 
        if (memberId==null)
        {
            return super.getId();
        }
        else
        {
            return memberId;
        }
    }
    
    @Override 
    public void create() 
    {
        super.create();
    	facesMessages.add ("new member created, conversation started");
    }

    @End 
    public String clear() 
    {
    	clearInstance();
    	facesMessages.add("end member management, cease conversation");
    	return "completed";
   }

    /*
     * end current conversation 
     */
    @End 
    public String cancel() 
    { 
    	facesMessages.add("cancel member management, cancel conversation");
    	return "cancel";
    }

    public void changePassword()
    {
        if (passwordManager.verify()) 
        {
    	   this.persist();
           facesMessages.add("Password updated");
           changed = true;
        }
        else 
        {
          facesMessages.addToControl("verify", "Re-enter new password");
          revertUser();
        }
    }
    
    public boolean isChanged()
    {
       return changed;
    }
    
    private void revertUser()
    {
       //user = this.find();
    }
    
    @Destroy
    void onDestroy ()
    {
    	log.info("destroy called for memberHome");
    }
 	
}

and the error trace says

7:11:28,660 INFO  [MemberHome] newMember factory create initiated
17:11:28,832 WARN  [Component] Exception calling component @Destroy method: memberHome
java.lang.IllegalArgumentException: method not found: onDestroy for component: memberHome
	at org.jboss.seam.Component.callComponentMethod(Component.java:2229)
	at org.jboss.seam.Component.callDestroyMethod(Component.java:2142)
	at org.jboss.seam.Component.destroy(Component.java:1436)
	at org.jboss.seam.contexts.Contexts.destroy(Contexts.java:251)
	at org.jboss.seam.contexts.Contexts.flushAndDestroyContexts(Contexts.java:363)
	at org.jboss.seam.contexts.FacesLifecycle.endRequest(FacesLifecycle.java:129)
	at org.jboss.seam.jsf.SeamPhaseListener.afterRenderResponse(SeamPhaseListener.java:515)
	at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:247)
	at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:194)
	at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
	at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
	at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
	at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
	at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoSuchMethodException: org.domain.will.session.MemberHome_$$_javassist_1.onDestroy()
	at java.lang.Class.getMethod(Unknown Source)
	at org.jboss.seam.Component.callComponentMethod(Component.java:2208)
	... 55 more

1 Reply:
27. Dec 2008, 18:28 America/New_York | Link

hah just spotted - my method wasnt public - it only had default scope - though i thought reflection would have found it ?