Пытаясь создать новую сущность, вместо этого я получаю: javax.ejb.EJBException: javax.ejb.CreateException: не удалось создать EJB без сохранения состояния - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь реализовать функцию в своем приложении для создания сущности. Я пробовал кодировать аналог образца кода моего профессора, который работает. Вместо этого я получаю исключение при попытке создать новую статью.

Мой класс: Article.java

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "ArticleData")
@NamedQuery(name = "Article.getArticle", query = "Select a from Article a where a.articleName = :articleName and a.articlePrice= :articlePrice")

public class Article implements Serializable{

    private double articlePrice;

    @Id
    private String articleName;


    public Article(){

    }

    public Article(String articleName, double articlePrice){
        this.articleName = articleName;
        this.articlePrice = articlePrice;
    }

Боб: ArticleBean.java

@Named
@SessionScoped
public class ArticleBean implements Serializable{
    private static final Logger logger = LogManager.getLogger(ArticleBean.class);
    private static final long serialVersionUID = 7730144564841961508L;

    @EJB
    private ArticleController articleController;
    private Article articleData;

    public ArticleBean() {
    }

//Trying to do this
    public String addArticle(){
        String forward, caption, msg;
        logger.debug("initiate adding of article");
        FacesContext contect = FacesContext.getCurrentInstance();
        articleController.newArticle(articleData.getArticleName(), articleData.getArticlePrice());
        return "addarticle.xhtml";
    }

ArticleController.java

@Stateless
public class ArticleController {

    @EJB
    ArticleFacade articleManager;

    private static final Logger logger = LogManager.getLogger(AccountController.class);

    public void newArticle(String articleName, double articlePrice){
        logger.info("try to create article " + articleName);
        logger.info("price: " + articlePrice);

        Article newArticle = new Article(articleName, articlePrice);
        try{
            articleManager.create(newArticle);
        }catch (Exception e){
            logger.error(e.getMessage());
        }
    }

ArticleFacade.java

public class ArticleFacade extends AbstractFacade<Article>{

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

    public ArticleFacade() {
        super(Article.class);
    }

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

    public void setEm(EntityManager em) {
        this.em = em;
    }

}

Вот пример трассировки стека

SCHWERWIEGEND:   ejb.stateless_ejbcreate_exception
WARNUNG:   A system exception occurred during an invocation on EJB ArticleController, method: public void de.hspf.swt.exam.administration.control.ArticleController.newArticle(java.lang.String,double)
WARNUNG:   javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
    at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:439)
    at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2667)
    at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:2044)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:210)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:90)
    at com.sun.proxy.$Proxy555.newArticle(Unknown Source)
    at de.hspf.swt.exam.administration.control.__EJB31_Generated__ArticleController__Intf____Bean__.newArticle(Unknown Source)
    at de.hspf.swt.exam.administration.cdi.ArticleBean.addArticle(ArticleBean.java:39)
    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 javax.el.ELUtil.invokeMethod(ELUtil.java:263)
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:494)
    at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:215)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:285)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at org.jboss.weld.module.web.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.module.web.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:65)
    at com.sun.faces.application.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:66)
    at com.sun.faces.application.ActionListenerImpl.getNavigationOutcome(ActionListenerImpl.java:82)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:71)
    at javax.faces.component.UICommand.broadcast(UICommand.java:222)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:847)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1395)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:58)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:76)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:177)
    at javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:707)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:451)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1628)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:258)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:755)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:575)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:159)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$0(WorkerThreadIOStrategy.java:90)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
    at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:708)
    at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:219)
    at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:435)
    ... 58 more
Caused by: javax.ejb.CreateException: Could not create stateless EJB
    at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:518)
    at com.sun.ejb.containers.StatelessSessionContainer.access$000(StatelessSessionContainer.java:92)
    at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:706)
    ... 60 more
Caused by: java.lang.IllegalStateException: Exception attempting to inject Remote ejb-ref name=de.hspf.swt.exam.administration.control.ArticleController/articleManager,Remote 3.x interface =de.hspf.swt.exam.administration.dao.facade.ArticleFacade,ejb-link=null,lookup=,mappedName=,jndi-name=de.hspf.swt.exam.administration.dao.facade.ArticleFacade,refType=Session into class de.hspf.swt.exam.administration.control.ArticleController: Lookup failed for 'java:comp/env/de.hspf.swt.exam.administration.control.ArticleController/articleManager' 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}
    at org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:194)
    at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:46)
    at org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:73)
    at org.jboss.weld.module.ejb.DynamicInjectionPointInjector.inject(DynamicInjectionPointInjector.java:61)
    at org.jboss.weld.module.ejb.SessionBeanInjectionTarget.inject(SessionBeanInjectionTarget.java:138)
    at org.glassfish.weld.services.JCDIServiceImpl.injectEJBInstance(JCDIServiceImpl.java:314)
    at com.sun.ejb.containers.BaseContainer.injectEjbInstance(BaseContainer.java:1845)
    at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:479)
    ... 62 more
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=de.hspf.swt.exam.administration.control.ArticleController/articleManager,Remote 3.x interface =de.hspf.swt.exam.administration.dao.facade.ArticleFacade,ejb-link=null,lookup=,mappedName=,jndi-name=de.hspf.swt.exam.administration.dao.facade.ArticleFacade,refType=Session into class de.hspf.swt.exam.administration.control.ArticleController: Lookup failed for 'java:comp/env/de.hspf.swt.exam.administration.control.ArticleController/articleManager' 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}
    at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:638)
    at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:439)
    at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:153)
    at org.glassfish.weld.services.InjectionServicesImpl.aroundInject(InjectionServicesImpl.java:184)
    ... 69 more
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/env/de.hspf.swt.exam.administration.control.ArticleController/articleManager' 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.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=de.hspf.swt.exam.administration.control.ArticleController/articleManager,Remote 3.x interface =de.hspf.swt.exam.administration.dao.facade.ArticleFacade,ejb-link=null,lookup=,mappedName=,jndi-name=de.hspf.swt.exam.administration.dao.facade.ArticleFacade,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'de.hspf.swt.exam.administration.dao.facade.ArticleFacade#de.hspf.swt.exam.administration.dao.facade.ArticleFacade' [Root exception is javax.naming.NamingException: Lookup failed for 'de.hspf.swt.exam.administration.dao.facade.ArticleFacade#de.hspf.swt.exam.administration.dao.facade.ArticleFacade' 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: de.hspf.swt.exam.administration.dao.facade.ArticleFacade#de.hspf.swt.exam.administration.dao.facade.ArticleFacade not found]]]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:496)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:561)
    ... 72 more
Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=de.hspf.swt.exam.administration.control.ArticleController/articleManager,Remote 3.x interface =de.hspf.swt.exam.administration.dao.facade.ArticleFacade,ejb-link=null,lookup=,mappedName=,jndi-name=de.hspf.swt.exam.administration.dao.facade.ArticleFacade,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'de.hspf.swt.exam.administration.dao.facade.ArticleFacade#de.hspf.swt.exam.administration.dao.facade.ArticleFacade' [Root exception is javax.naming.NamingException: Lookup failed for 'de.hspf.swt.exam.administration.dao.facade.ArticleFacade#de.hspf.swt.exam.administration.dao.facade.ArticleFacade' 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: de.hspf.swt.exam.administration.dao.facade.ArticleFacade#de.hspf.swt.exam.administration.dao.facade.ArticleFacade not found]]
    at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:185)
    at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1015)
    at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:765)
    at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:735)
    at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:159)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:476)
    ... 76 more
Caused by: javax.naming.NamingException: Lookup failed for 'de.hspf.swt.exam.administration.dao.facade.ArticleFacade#de.hspf.swt.exam.administration.dao.facade.ArticleFacade' 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: de.hspf.swt.exam.administration.dao.facade.ArticleFacade#de.hspf.swt.exam.administration.dao.facade.ArticleFacade not found]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:496)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:180)
    ... 81 more
Caused by: javax.naming.NameNotFoundException: de.hspf.swt.exam.administration.dao.facade.ArticleFacade#de.hspf.swt.exam.administration.dao.facade.ArticleFacade not found
    at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:237)
    at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:204)
    at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:70)
    at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:114)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:483)
    ... 85 more

1 Ответ

0 голосов
/ 04 июня 2019

Я решил это. Я забыл отметить, что ArticleFacade.java не имеет статуса.

@Stateless
public class ArticleController {

@EJB
ArticleFacade articleManager;

private static final Logger logger = LogManager.getLogger(AccountController.class);

public void newArticle(String articleName, double articlePrice){
    logger.info("try to create article " + articleName);
    logger.info("price: " + articlePrice);

    Article newArticle = new Article(articleName, articlePrice);
    try{
        articleManager.create(newArticle);
    }catch (Exception e){
        logger.error(e.getMessage());
    }
}

public void changeArticle(String articleName, double articlePrice){
    logger.info("try to edit article " + articleName);

    Article editArticle = new Article(articleName, articlePrice);
    try{
        articleManager.edit(editArticle);
    }catch (Exception e){
        logger.error(e.getMessage());
    }
}

public void destroyArticle(String articleName, double articlePrice){
    logger.info("try to remove article" + articleName);

    Article deleteArticle = new Article(articleName, articlePrice);
    try{
        articleManager.remove(deleteArticle);
    }catch (Exception e){
        logger.error(e.getMessage());
    }
}
}
...