2016-12-07 14 views
0

Я не могу решить эту проблему. Я пробовал поиск по Google, но не могу собрать их вместе. У меня есть следующие трассировки стека:NullPointerException происходит с createNamedQuery, а затем успешно сохраняется логический элемент с сохранением.

Warning: java.lang.NullPointerException 
at org.eclipse.persistence.platform.server.ServerPlatformUtils.createServerPlatform(ServerPlatformUtils.java:99) 
at org.eclipse.persistence.sessions.factories.SessionManager.init(SessionManager.java:77) 
at org.eclipse.persistence.sessions.factories.SessionManager.<clinit>(SessionManager.java:71) 
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.addSessionToGlobalSessionManager(EntityManagerSetupImpl.java:907) 
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.initSession(EntityManagerSetupImpl.java:2671) 
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:675) 
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205) 
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:305) 
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:337) 
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:318) 
at com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:197) 
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createNamedQuery(EntityManagerWrapper.java:521) 
at session.CategoryFacade.findRandom(CategoryFacade.java:37) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) 
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) 
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786) 
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656) 
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) 
at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64) 
at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) 
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) 
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) 
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822) 
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) 
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4758) 
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746) 
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) 
at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) 
at com.sun.proxy.$Proxy173.findRandom(Unknown Source) 
at session.__EJB31_Generated__CategoryFacade__Intf____Bean__.findRandom(Unknown Source) 
at actions.ActionFacade.setFeaturedCategories(ActionFacade.java:82) 
at actions.HomeAction.execute(HomeAction.java:16) 
at controller.ControllerServlet.service(ControllerServlet.java:65) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283) 
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) 
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) 
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111) 
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536) 
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591) 
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) 
at java.lang.Thread.run(Thread.java:745) 

Info: EclipseLink, version: Eclipse Persistence Services - 2.6.1.v20150605-31e8258 
Info: /file:/Users/csexton/NetBeansProjects/ReadersParadise/build/web/WEB-INF/classes/_AffableBeanPU login successful 

Так что, если вы посмотрите на двух последних строках мой упорный блок не лесозаготовительных, пока я не пытаюсь использовать диспетчер сущностей. Если я сделаю еще один запрос после первого, все будет хорошо, никаких ошибок, ничего ... Ошибка возникает в createNamedQuery. Запрос существует и совпадает с точным именем. Я могу вызвать тот же метод дважды, и первый из них вызывает NPE, но второй работает нормально.

@Stateless(name="CategoryFacade") 
public class CategoryFacade extends AbstractFacade<Category> { 

    @PersistenceContext(unitName = "AffableBeanPU") 
    private EntityManager em; 

    @Override 
    protected EntityManager getEntityManager() { 
     return em; 
    } 

    public CategoryFacade() { 
     super(Category.class); 
    } 

    public List<Category> findRandom(int limit) { 
     return getEntityManager() 
       .createNamedQuery("Category.findRandomByLimit") 
       .setParameter(1, limit) 
       .getResultList(); 
    } 
} 

Я делаю JNDI поиск для класса

public class ActionFacade implements AutoCloseable { 

    private static ThreadLocal<ActionFacade> instance = new ThreadLocal<>(); 

    private HttpServletRequest request; 
    private HttpSession session; 

    private CategoryFacade categoryFacade; 
    private BookFacade bookFacade; 
    private OrderManager orderManager; 

    private ShoppingCart cart; 


    public ActionFacade(HttpServletRequest request) { 
    this.request = request; 
    this.session = request.getSession(); 

    try { 
     Context ctx = new InitialContext(); 
     this.categoryFacade = (CategoryFacade) ctx.lookup(
       "java:global/ReadersParadise/CategoryFacade!session.CategoryFacade"); 
     System.out.print("JNDI lookup complete."); 
     this.bookFacade = (BookFacade) ctx.lookup(
       "java:global/ReadersParadise/BookFacade!session.BookFacade"); 
     this.orderManager = (OrderManager) ctx.lookup(
       "java:global/ReadersParadise/OrderManager!session.OrderManager"); 
    } catch (NamingException ex) { 
     System.err.println(ex); 
    } 
    } 


    public static ActionFacade create(HttpServletRequest request) { 
    ActionFacade facade = new ActionFacade(request); 
    instance.set(facade); 
    return facade; 
    } 


    public static ActionFacade getCurrentInstance() { 
    return instance.get(); 
    } 


    @Override 
    public void close() { 
    instance.remove(); 
    } 

    public void setSelectedCategory() { 
     String categoryName = request.getParameter("category"); 

     Category selectedCategory = categoryFacade.findByName(categoryName); 

     if (selectedCategory == null) { 
      selectedCategory = categoryFacade.find(1); 
     } 
     session.setAttribute("selectedCategory", selectedCategory); 

     Collection<Book> categoryBooks = selectedCategory.getBookCollection(); 
     session.setAttribute("categoryBooks", categoryBooks); 
    } 

    public void setAllCategories() { 
     request.setAttribute("categories", categoryFacade.findAll()); 
    } 
} 

Тогда в моем сервлета я использую ActionFacade как это ....

try(ActionFacade facade = ActionFacade.create(request)) { 
    Action action = ActionFactory.getAction(request); 
    String view = action.execute(facade); 
    System.out.println(request.getServletPath()); 
    if (request.getServletPath().equals("") || view.equals(request.getServletPath().substring(1))) { 
     request.getRequestDispatcher("/WEB-INF/views/" + view + ".jsp").forward(request, response); 
    } else { 
     response.sendRedirect(view); 
    } 
} catch (NullPointerException e) { 
    response.sendError(HttpServletResponse.SC_NOT_FOUND); 
} catch (Exception e) { 
    throw new ServletException("Executing action failed.", e); 
} 

Это категория объект

@Entity 
@Table(name = "category") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "Category.findAll", query = "SELECT c FROM Category c"), 
    @NamedQuery(name = "Category.findById", query = "SELECT c FROM Category c WHERE c.id = :id"), 
    @NamedQuery(name = "Category.findByName", query = "SELECT c FROM Category c WHERE c.name= :name") 
}) 
@NamedNativeQuery(name = "Category.findRandomByLimit", 
     query = "SELECT * FROM Category ORDER BY RAND() LIMIT ?1") 
public class Category implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 

    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 45) 
    @Column(name = "name") 
    private String name; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "category") 
    private Collection<Book> bookCollection; 

    public Category() { 
    } 

    public Category(Integer id) { 
     this.id = id; 
    } 

    public Category(Integer id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @XmlTransient 
    public Collection<Book> getBookCollection() { 
     return bookCollection; 
    } 

    public void setBookCollection(Collection<Book> bookCollection) { 
     this.bookCollection = bookCollection; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Category)) { 
      return false; 
     } 
     Category other = (Category) object; 
     if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "entity.Category[ id=" + id + " ]"; 
    } 

} 

Категория Закон иона класса, который использует ActionFacade

public class CategoryAction implements Action { 

    @Override 
    public String execute(ActionFacade facade) throws Exception { 
     facade.setSelectedCategory(); 
     facade.setAllCategories(); 
     return "category"; 
    } 
} 
+0

Это просто предупреждение, а не исключение или ошибка ... (конечно, это все еще некрасиво) – badera

+0

что вызывает его? – Grim

+0

Я бы посоветовал не смешивать Контейнерную управляемую фазу с использованием аннотации CDI/EJB с поиском JNDI. – AsSiDe

ответ

1

Я думаю, что это проблема Glassfish 4.1.1 описана здесь: https://java.net/jira/browse/GLASSFISH-21468

Согласно этому, он может помочь, если добавить

<property name="eclipselink.target-server" value="Glassfish"/> 

к вашему persistence.xml

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

  • Нет связанных вопросов^_^