代码之家  ›  专栏  ›  技术社区  ›  user2911374

在POJO类中查找区域设置EJB引发NameNotFoundException

  •  0
  • user2911374  · 技术社区  · 11 年前

    我试图查找 @Stateless 在POJO中的bean,该POJO位于bean所在的同一个包中 @ManagedBean 控制器类和我可以进行CRUD操作。 以下是在ArticlesBundle.java中查找的代码:

    public class ArticlesBundle extends ResourceBundle{                 
    protected static final String BASE_NAME = "ArticlesLcl.findForLocale";
    private Map<String,String> messages = new HashMap<>();            
    private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
    protected final Control DB_CONTROL = new DBControl();       
    
    public ArticlesBundle(){        
        setParent(ResourceBundle.getBundle(BASE_NAME, FacesContext.getCurrentInstance().getViewRoot().getLocale(), DB_CONTROL));
    }        
    
    protected ArticlesBundle(Locale locale){        
        setParent(ResourceBundle.getBundle(BASE_NAME, locale, DB_CONTROL));        
    }  
    
    public ArticlesBundle(Map<String,String> messages){
        this.messages = messages;
    }        
    
    @Override
    protected Object handleGetObject(String key){        
        return messages != null ? messages.get(key) : parent.getObject(key);
    }
    
    @Override
    public Enumeration<String> getKeys(){        
        return parent.getKeys();
    }
    
    protected class DBControl extends Control{
        @Override
        public ResourceBundle newBundle
                (String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
                throws IllegalAccessException, InstantiationException, IOException
        {                             
            String language = locale.getLanguage();
            Map<String,String> messages = getArticless(locale); 
    
            System.out.println("getArticles("+language+") = "+getArticles(locale));
            return new ArticlesBundle(messages);
        }         
        public Map<String,String> getArticles(Locale locale){            
            String language = locale.getLanguage();
            try {            
                Context ctx = new InitialContext();            
                ArticlesLclFacade arBean = (ArticlesLclFacade) ctx.lookup("java:gesht/ArticlesLclFacade");
                List<ArticlesLcl> articles = arBean.getArticles(language);
                for(Iterator<ArticlesLcl> it = articles.iterator(); it.hasNext();){
                    ArticlesLcl article = it.next();
                    messages.put(article.getArId().getArId().toString(), article.getArTitle());                
                }                                          
    
            } catch (NamingException ex) {
                Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex);
            } 
    
            return messages;
        }        
    }        
    }
    

    在学院的文章中:

    @Stateless
    public class ArticlesFacade extends AbstractFacade<ArticlesLcl> {
    @PersistenceContext(unitName = "gtestPU")
    private EntityManager em;
    
    @Override
    protected EntityManager getEntityManager() {
        return em;
    }
    
    public ArticlesFacade() {
        super(ArticlesLcl.class);
    }
    public List<ArticlesLcl> getArticless(String language){
        Query q = em.createNamedQuery("ArticlesLcl.findForLocale", ArticlesLcl.class);
        q.setParameter("lang", language);
        return q.getResultList();
    }
    }
    

    面配置.xml

    <resource-bundle>
            <base-name>com.gesht.bundles.ArticlesBundle</base-name>
            <var>article</var>
        </resource-bundle>
    

    它引发以下异常:

    SEVERE: javax.naming.NamingException: Lookup failed for 'java:gtest/ArticlesLclFacade' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: No object bound to name java:gtest/ArticlesLclFacade]
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
        at javax.naming.InitialContext.lookup(InitialContext.java:411)
        at javax.naming.InitialContext.lookup(InitialContext.java:411)      
        at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1436)
        at java.util.ResourceBundle.findBundle(ResourceBundle.java:1400)
        at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1296)
        at java.util.ResourceBundle.getBundle(ResourceBundle.java:841)
        at com.gtest.bundles.test.<init>(test.java:50)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at java.lang.Class.newInstance0(Class.java:372)
        at java.lang.Class.newInstance(Class.java:325)
        at java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:2571)
        at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1436)
        at java.util.ResourceBundle.findBundle(ResourceBundle.java:1400)
        at java.util.ResourceBundle.findBundle(ResourceBundle.java:1354)
        at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1296)
        at java.util.ResourceBundle.getBundle(ResourceBundle.java:1028)
        at com.sun.faces.application.ApplicationResourceBundle.getResourceBundle(ApplicationResourceBundle.java:124)
        at com.sun.faces.application.ApplicationAssociate.getResourceBundle(ApplicationAssociate.java:608)
        at com.sun.faces.application.ApplicationImpl.getResourceBundle(ApplicationImpl.java:700)
        at javax.faces.application.ApplicationWrapper.getResourceBundle(ApplicationWrapper.java:526)
        at com.sun.faces.el.FacesResourceBundleELResolver.getValue(FacesResourceBundleELResolver.java:83)
        at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
        at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
        at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:103)
        at com.sun.el.parser.AstValue.getValue(AstValue.java:179)
        at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
        at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
        at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
        at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
        at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
        at javax.faces.component.UIOutput.getValue(UIOutput.java:169)
        at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
        at org.primefaces.component.panelgrid.PanelGridRenderer.encodeDynamicBody(PanelGridRenderer.java:92)
        at org.primefaces.component.panelgrid.PanelGridRenderer.encodeBody(PanelGridRenderer.java:60)
        at org.primefaces.component.panelgrid.PanelGridRenderer.encodeEnd(PanelGridRenderer.java:49)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
        at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:61)
        at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45)
        at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
        at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45)
        at org.primefaces.component.datagrid.DataGridRenderer.encodeTable(DataGridRenderer.java:156)
        at org.primefaces.component.datagrid.DataGridRenderer.encodeMarkup(DataGridRenderer.java:91)
        at org.primefaces.component.datagrid.DataGridRenderer.encodeEnd(DataGridRenderer.java:53)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
        at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
        at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
        at org.ocpsoft.rewrite.faces.RewriteViewHandler.renderView(RewriteViewHandler.java:186)
        at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:191)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
        at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
        at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
        at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
        at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
        at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
        at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
        at java.lang.Thread.run(Thread.java:722)
    Caused by: javax.naming.NameNotFoundException: No object bound to name java:gtest/ArticlesLclFacade
        at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:772)
        at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744)
        at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:177)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:498)
        ... 108 more
    

    我使用Glassfish服务器3+

    2 回复  |  直到 11 年前
        1
  •  0
  •   user2880020 user2880020    11 年前
    @Stateless(mappedName="articlesLclFacade")
    public class ArticlesLclFacade extends AbstractFacade {
    

    那么在你的try子句中

    ArticlesLclFacade arBean = (ArticlesLclFacade)ctx.lookup("articlesLclFacadee");   
    

    或者,我猜您也可以这样使用EJB注释:

    @EJB
    private ArticlesLclFacade arBean;
    
        2
  •  0
  •   user2911374    11 年前

    我使用了语法 ArticlesLclFacade arBean = (ArticlesLclFacade) ctx.lookup("java:global/gtest/ArticlesLclFacade"); 再也没有了 NamingException 抛出。