2014-10-08 30 views
1

我想從EntityController中取出查詢並將其放入EntityHome組件,但它始終返回空指針。我無法弄清楚錯誤,TransactionAttribute有什麼用呢?嘗試訪問EntityHome中的EntityHome返回空指針

控制器:

@Name("hElementController") 
@Scope(ScopeType.CONVERSATION) 
@AutoCreate 
@BypassInterceptors 
public class HElementController extends EntityController 
{ 
... 
    @In(create=true) 
    private HElementHome hElementHome; 

    ... 
    @Transactional 
    @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW) 
    public List<TreeNode> doSth(HClassifier classifier) 
    { 
    ... 
     //hElementHome is null 
     //nullpointer happens here 
     List<Object[]> result = hElementHome.getElementsDTO(classifier.getId(), elementStatus); 
    ... 
    } 
} 

HElementController無法解決hElementHome.getElementsDTO因爲hElementHome爲空。 而EntityHome:

@Name("hElementHome") 
@Scope(ScopeType.CONVERSATION) 
@AutoCreate 
public class HElementHome extends SignalHome<HElement> 
{ 
    @Transactional 
    @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW) 
    public List<Object[]> getElementsDTO(Integer classifierId, Integer statusId) 
    { 
    ...some query 
    return query.getResultList(); 
    } 
... 
} 

我TestNG的方法:

new ComponentTest() 
{ 
    protected void testComponents() throws Exception 
    { 
     HElementController hElementController = (HElementController) 
     getValue("#{hElementController}"); 
     HElementHome hElementHome = (HElementHome) 
     getValue("#{hElementHome}"); 
     ... 

     List<TreeNode> actualList = hElementController.getElementsDTO(
      person1, 
      classifier1); 
     ... 

我已經試過N的方式注入到家居控制器,但沒有成功。 猜猜我錯過了事務之間的東西。

添加堆棧跟蹤

[http-127.0.0.1-9050-4] WARN org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog - Narrowing proxy to class com.m.youknow.model.Person - this operation breaks == 
[http-127.0.0.1-9050-2] WARN org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog - Narrowing proxy to class com.m.youknow.model.Person - this operation breaks == 
[http-127.0.0.1-9050-2] ERROR com.m.youknow.util.SignalViewHandler - Error Rendering View[/viewPerson.xhtml] 
javax.faces.FacesException: javax.el.ELException: /include/inc_elementBreadCrumbDTO.xhtml @19,122 value="#{hElementController.getElementsDTO(classifier.id, elementStatus)}": java.lang.NullPointerException 
at javax.faces.component.UIData.getValue(UIData.java:617) 
at org.ajax4jsf.component.UIDataAdaptorBase.getValue(UIDataAdaptorBase.java:1647) 
at org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:65) 
at org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:59) 
at org.ajax4jsf.component.UIDataAdaptorBase.getExtendedDataModel(UIDataAdaptorBase.java:621) 
at org.ajax4jsf.component.UIDataAdaptorBase.setRowKey(UIDataAdaptorBase.java:339) 
org.ajax4jsf.component.UIDataAdaptorBase.setRowKey(UIDataAdaptorBase.java:324) 
org.ajax4jsf.renderkit.html.RepeatRenderer.encodeChildren(RepeatRenderer.java:63) 
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837) 



Caused by: javax.el.ELException: /include/inc_elementBreadCrumbDTO.xhtml @19,122 value="#{hElementController.getElementsDTO(classifier.id, elementStatus)}": 
java.lang.NullPointerException at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:76) 
javax.faces.component.UIData.getValue(UIData.java:614) 
... 90 more 
Caused by: java.lang.NullPointerException 
com.m.youknow.element.HElementController.getElementsDTO(HElementController.java:95) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
java.lang.reflect.Method.invoke(Method.java:597) 
org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:335) 
org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:280) 
org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59) 
org.jboss.el.parser.AstValue.getValue(AstValue.java:67) 
org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 
com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71) 
... 91 more 



[lifecycle] JSF1054: (Phase ID: RENDER_RESPONSE 6, View ID: /viewPerson.xhtml) Exception thrown during phase execution: javax.faces.event.PhaseEvent[[email protected]] 
[[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception 
java.lang.NullPointerException 
at com.youknow.element.HElementController.doSth(HElementController.java:95) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:335) 
at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:280) 
at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.java:59) 
at org.jboss.el.parser.AstValue.getValue(AstValue.java:67) 
at org.jboss.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71) 
at javax.faces.component.UIData.getValue(UIData.java:614) 
at org.ajax4jsf.component.UIDataAdaptorBase.getValue(UIDataAdaptorBase.java:1647) 
at org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:65) 
at org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:59) 
at org.ajax4jsf.component.UIDataAdaptorBase.getExtendedDataModel(UIDataAdaptorBase.java:621) 
at org.ajax4jsf.component.UIDataAdaptorBase.setRowKey(UIDataAdaptorBase.java:339) 
at org.ajax4jsf.component.UIDataAdaptorBase.setRowKey(UIDataAdaptorBase.java:324) 
at org.ajax4jsf.renderkit.html.RepeatRenderer.encodeChildren(RepeatRenderer.java:63) 
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837) 
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:234) 
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:239) 
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:239) 
at com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:309) 
at com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:133) 
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837) 
at org.jboss.seam.ui.util.cdk.RendererBase.renderChild(RendererBase.java:186) 
at org.jboss.seam.ui.util.cdk.RendererBase.renderChildren(RendererBase.java:166) 
at org.jboss.seam.ui.renderkit.CacheRendererBase.doEncodeChildren(CacheRendererBase.java:45) 
at org.jboss.seam.ui.util.cdk.RendererBase.encodeChildren(RendererBase.java:92) 
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933) 
at javax.faces.render.Renderer.encodeChildren(Renderer.java:148) 
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933) 
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592) 
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100) 
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100) 
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.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:638) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:444) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:382) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:310) 
at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195) 
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159) 
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141) 
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90) 
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:406) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at com.milestone.youknow.interceptor.TimeFilter.doFilter(TimeFilter.java:42) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
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:206) 
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) 
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) 
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) 
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:60) 
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:829) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
at java.lang.Thread.run(Thread.java:662) 

這很奇怪,因爲stackstrace不顯示的確切位置控制器調用hElementHome.getElementsDTO(..)的時刻。在調試模式下,我可以看到hElementHome爲空。

我usign:縫版本:2.2.2的Jboss 5.0.1

+0

發佈完整的堆棧跟蹤可能對您有所幫助。 – pamps 2014-10-08 21:51:41

回答

0

你HElementController類註釋

@BypassInterceptors 

所以Seam攔截器(包括雙射攔截器)將不會於doSth被稱爲()方法執行,這意味着hElementHome將始終爲空。您需要刪除@BypassInterceptors或在doSth()方法中使用Component.getInstance()獲取對hElementHome組件的引用。根據您的應用程序體系結構,您可能需要詢問Component.getInstance()以始終實例化組件(請參閱javadocs)或使用@AutoCreate註釋HElementHome。