2013-11-01 2 views
0

Я пытаюсь найти bean-объект в POJO, который находится в том же пакете, где находится компонент. Боб не имеет значения null, когда я использую его в моем классе контроллера @ManagedBean, и я могу выполнять операции CRUD. Вот код для поиска в ArticlesBundle.java:Поиск языка EJB в классе POJO бросает NameNotFoundException

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; 
    }   
}   
} 

В ArticlesFacade:

@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(); 
} 
} 

Грани-config.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+

ответ

0

Я использовал синтаксис ArticlesLclFacade arBean = (ArticlesLclFacade) ctx.lookup("java:global/gtest/ArticlesLclFacade"); и не более NamingException брошен.

0
@Stateless(mappedName="articlesLclFacade") 
public class ArticlesLclFacade extends AbstractFacade { 

то в вашей статье Ьгу

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

Или я думаю, вы также можете использовать EJB аннотацию, как это:

@EJB 
private ArticlesLclFacade arBean; 
+0

Я определил свой сеансовый компонент именно так, и в моем управляемом bean-компоненте я ввел его с помощью этой аннотации EJB таким образом. Но внутри этого POJO я должен искать свой bean-компонент, используя JNDI, и по какой-то причине я не знаю, что он всегда равен нулю. Возможности, насколько я могу предположить, мой метод POJO вызывается до того, как bean вводится или они живут в двух разных потоках. Для первого я попробовал метод инициализации '@ PostConstruct', который не работал, для второго я не знаю, что делать. – user2911374

+0

Извините, что в моем ответе должно быть 'ArticlesLclFacade arBean = (ArticlesLclFacade) ctx.lookup (" articlesLclFacade ");' вместо 'ArticlesLclFacade arBean = (ArticlesLclFacade) ctx.lookup (" articlesLclFacadee ");' Можете ли вы опубликовать все кода, участвующего в этой части вашей программы? Я действительно хочу помочь вам в этом. –

+0

Спасибо @Sujan, после того, как я создал POJO без основного метода, теперь я получаю 'javax.naming.NameNotFoundException: нет объекта, связанного с именем java: gtest/ArticleLclFacade', а не' Got null ComponentInvocation' – user2911374

Смежные вопросы