Tomcat 托米+;EclipseLink:EntityManager注入不工作
我正试着让它在我的网络档案中运行。 由于示例使用EclipseLink,我下载了EclipseLink并将Tomcat 托米+;EclipseLink:EntityManager注入不工作,tomcat,jpa,ejb,eclipselink,apache-tomee,Tomcat,Jpa,Ejb,Eclipselink,Apache Tomee,我正试着让它在我的网络档案中运行。 由于示例使用EclipseLink,我下载了EclipseLink并将EclipseLink/jlib/EclipseLink.jar复制到TomEE/lib目录中 问题1:这是我需要复制的唯一文件吗 我有许多实体类,一个JSF SessionScoped ManagedBean来服务web请求,一个有状态EJB来处理数据库请求,还有一个EJB在启动时将数据加载到数据库中 ManagedBean和有状态EJB的代码片段如下: @Singleton @Start
EclipseLink/jlib/EclipseLink.jar
复制到TomEE/lib
目录中
问题1:这是我需要复制的唯一文件吗
我有许多实体
类,一个JSF SessionScoped ManagedBean来服务web请求,一个有状态EJB来处理数据库请求,还有一个EJB在启动时将数据加载到数据库中
ManagedBean和有状态EJB的代码片段如下:
@Singleton
@Startup
public class ConfigBean {
@EJB
private RequestBean request;
@PostConstruct
public void createData() {
request.createPart("1234-5678-01", 1, "ABC PART", new java.util.Date(),
"PARTQWERTYUIOPASXDCFVGBHNJMKL", null);
// more code here...
}
}
@Stateful
public class RequestBean {
private static Logger logger = Logger.getLogger("order.ejb.RequestBean");
@PersistenceContext
private EntityManager em;
public void createPart(String partNumber, int revision, String description,
java.util.Date revisionDate, String specification,
Serializable drawing) {
try {
Part part = new Part(partNumber, revision, description,
revisionDate, specification, drawing);
em.persist(part); // <--- EXCEPTION THROWN HERE
} catch (Exception ex) {
throw new EJBException(ex.getMessage());
}
}
}
由于我不太熟悉Java EE的魔力,我几乎不知道这里出了什么问题,但我很想知道是什么导致了堆栈跟踪中的第一行,如上所示:
WARNING: Injection: No such property 'order.ejb.RequestBean/em' in class order.ejb.RequestBean
问题2:由于某种原因,实体管理器的注入似乎不起作用。有人知道为什么吗
为了完整起见,下面是我的persistence.xml
,它位于project/src/main/webapp/classes/META-INF/
目录中:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="order" transaction-type="JTA">
<jta-data-source>jdbc/__default</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="both" />
</properties>
</persistence-unit>
</persistence>
jdbc/_默认值
源代码
如果有人想查看项目的目录结构、源代码、配置文件等,我已将其上载到。更新了
persistence.xml
以使用OpenJPA,根据:
显然,这是Tomee1.0.0中的一个已知错误,已经在trunk中解决了,所以我
现在一切正常。我将集中精力理解em为null的原因。试着遵循一些关于这个主题的在线教程。您的代码乍一看似乎是正确的。如果RequestBean的唯一属性是实体管理器,请考虑让它“无状态”。发生了什么事?
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="order" transaction-type="JTA">
<jta-data-source>jdbc/__default</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="both" />
</properties>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="order" transaction-type="JTA">
<jta-data-source>jdbc/__default</jta-data-source>
<properties>
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(foreignKeys=true,schemaAction='dropDB,add')" />
<property name="openjpa.jdbc.SchemaFactory" value="native(foreignKeys=true)" />
<property name="openjpa.jdbc.MappingDefaults"
value="ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict" />
<property name="openjpa.Log" value="DefaultLevel=TRACE,SQL=TRACE" />
</properties>
</persistence-unit>
</persistence>
INFO - Starting OpenJPA 2.2.0
java.lang.NullPointerException
at order.web.OrderManager.getOrders(OrderManager.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:64)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:58)
at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:169)
at org.apache.el.parser.AstValue.getValue(AstValue.java:169)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
at org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.getValue(ContextAwareTagValueExpression.java:96)
at javax.faces.component._DeltaStateHelper.eval(_DeltaStateHelper.java:246)
at javax.faces.component.UIData.getValue(UIData.java:2031)
at javax.faces.component.UIData.createDataModel(UIData.java:1979)
at javax.faces.component.UIData.getDataModel(UIData.java:1956)
at javax.faces.component.UIData.getRowCount(UIData.java:478)
at org.apache.myfaces.shared.renderkit.html.HtmlTableRendererBase.encodeInnerHtml(HtmlTableRendererBase.java:366)
at org.apache.myfaces.shared.renderkit.html.HtmlTableRendererBase.encodeChildren(HtmlTableRendererBase.java:214)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:626)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:524)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:533)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1908)
at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:285)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:241)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:199)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)