Glassfish 2.1上的Seam 2.2.2接缝EJB组件注入

| 我在将Seam组件注入注解为@Stateful bean到另一个注解相同的问题时遇到了问题。所以我有组件: @状态 @Name(\“ userFncModalAction \”) @Scope(ScopeType.SESSION) 公共类UserFncModalAction扩展... {   @在   私人UserPanelListActionLocal userPanelListAction; } 注入的几乎是相同的(注释为@Name,@Stateful)。我的问题是页面尝试加载并执行注入后。异常上升> javax.naming.NameNotFoundException:没有对象绑定到名称java:comp / env / TutorialWeb-ear / UserPanelListAction。 我不知道哪里有问题。我同时使用两个ejb ref定义 1. web.xml = Web模块注入的ejb参考 2. ejb-jar.xml =支持将ejb注入另一个Seam组件 有我的项目配置: web.xml ejb引用
<ejb-local-ref>
  <ejb-ref-name>TutorialWeb-ear/UserPanelListAction</ejb-ref-name>
  <ejb-ref-type>Session</ejb-ref-type>
  <local-home/>
  <local>cz.cca.web.action.user.UserPanelListActionLocal</local>
 </ejb-local-ref>
</pre>

<ejb-local-ref>
  <ejb-ref-name>TutorialWeb-ear/UserFncModalAction</ejb-ref-name>
  <ejb-ref-type>Session</ejb-ref-type>
  <local-home/>
  <local>cz.cca.web.action.user.UserFncModalActionLocal</local>
 </ejb-local-ref>
components.xml
<core:init debug=\"false\" jndi-pattern=\"java:comp/env/TutorialWeb-ear/#{ejbName}\"/>
ejb-jar.xml
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<ejb-jar xmlns=\"http://java.sun.com/xml/ns/javaee\" 
         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" 
         xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd\"
         version=\"3.0\">

    <enterprise-beans>
      <session>
          <ejb-name>UserPanelListActionLocal</ejb-name>
          <ejb-local-ref>
              <ejb-ref-name>TutorialWeb-ear/UserPanelListAction</ejb-ref-name>
              <ejb-ref-type>Session</ejb-ref-type>
              <local-home/>
              <local>cz.cca.web.action.user.UserPanelListActionLocal</local>
          </ejb-local-ref>
      </session>
      <session>
          <ejb-name>UserFncModalActionLocal</ejb-name>
          <ejb-local-ref>
              <ejb-ref-name>TutorialWeb-ear/UserFncModalAction</ejb-ref-name>
              <ejb-ref-type>Session</ejb-ref-type>
              <local-home/>
              <local>cz.cca.web.action.user.UserFncModalActionLocal</local>
          </ejb-local-ref>
      </session>
    </enterprise-beans>

   <interceptors>
      <interceptor>
         <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
      </interceptor>
   </interceptors>

   <assembly-descriptor>
      <interceptor-binding>
         <ejb-name>*</ejb-name>
         <interceptor-class>org.jboss.seam.ejb.SeamInterceptor</interceptor-class>
      </interceptor-binding>
   </assembly-descriptor>

</ejb-jar>
当我简单地使用注释@In时,将导致:
    INFO: EJB5018: An exception was thrown during an ejb invocation on [UserFncModalAction]
    INFO: javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: org.jboss.seam.RequiredException: @In attribute requires non-null value: userFncModalAction.userPanelListAction
    org.jboss.seam.RequiredException: @In attribute requires non-null value: userFncModalAction.userPanelListAction
        at org.jboss.seam.Component.getValueToInject(Component.java:2361)
        at org.jboss.seam.Component.injectAttributes(Component.java:1739)
        at org.jboss.seam.Component.inject(Component.java:1557)
        at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:61)
        at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
        at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
        at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
        at org.jboss.seam.persistence.EntityManagerProxyInterceptor.aroundInvoke(EntityManagerProxyInterceptor.java:29)
        at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
        at org.jboss.seam.persistence.HibernateSessionProxyInterceptor.aroundInvoke(HibernateSessionProxyInterceptor.java:30)
        at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
        at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
        at org.jboss.seam.intercept.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:50)
        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 
...
...
...at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
        at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
        at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
当我在表达式中使用注释时-这意味着:
@In(\"#{userPanelListAction}\")
private UserPanelListActionLocal userPanelListAction;
之后它抛出:
    INFO: EJB5018: An exception was thrown during an ejb invocation on [UserFncModalAction]
    INFO: javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean; nested exception is: org.jboss.seam.InstantiationException: Could not instantiate Seam component: userPanelListAction
    org.jboss.seam.InstantiationException: Could not instantiate Seam component: userPanelListAction
        at org.jboss.seam.Component.newInstance(Component.java:2170)
        at org.jboss.seam.Component.getInstance(Component.java:2024)
        at org.jboss.seam.Component.getInstance(Component.java:1986)
        at org.jboss.seam.Component.getInstance(Component.java:1980)
        at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:55)
        at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:50)
        at org.jboss.seam.el.SeamELResolver.resolveBase(SeamELResolver.java:148)
        at org.jboss.seam.el.SeamELResolver.getValue(SeamELResolver.java:51)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
        at ...
...
...
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
        at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
        at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
        at com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
        at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
        at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
    Caused by: javax.naming.NameNotFoundException: No object bound to name java:comp/env/TutorialWeb-ear/UserPanelListAction
        at com.sun.enterprise.naming.NamingManagerImpl.lookup(NamingManagerImpl.java:834)
        at com.sun.enterprise.naming.java.javaURLContext.lookup(javaURLContext.java:173)
        at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:396)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at org.jboss.seam.Component.instantiateSessionBean(Component.java:1403)
        at org.jboss.seam.Component.instantiate(Component.java:1367)
        at org.jboss.seam.Component.newInstance(Component.java:2148)
        ... 192 more
最后我解决了这个问题!!! -需要注释属性,所以我写了
@In(create=true, required=false)
private UserPanelListActionLocal userPanelListAction;
一切都很好。     
已邀请:

要回复问题请先登录注册