@PersistenceContex アノテーションを使用して PersistenceContex を POJO に注入しようとしています。POJO がそれを実行できるようにする必要があることを読みました。だから私はPOJOクラスをサーブレットに注入します(依存オブジェクトとして管理されるようになりました、私は正しいですか?)が、サーブレットが注入されたオブジェクトからメソッドを呼び出そうとすると、エラーが発生します:
java.lang.IllegalStateException: unitName null の EntityManagerFactory を取得できません
PersistenceContext が POJO に適切に注入されていないようですが、機能させるにはどうすればよいですか?
私の POJO クラスは次のようになります。
public class FileEntityControlerImpl implements FileEntityInterface {
@PersistenceContext
EntityManager entityManager;
@Override
public void createFile(FileEntity fileEntity) {
...}
@Override
public FileEntity retriveFile(String fileName) {
...}
注入ポイント:
@Inject
FileEntityInterface fileController;
SLSB を使用し、@EJB を使用して注入すると、正常に動作します。
..::アップデート::..
スタックトレース:
警告: StandardWrapperValve[ResourcesServlet]: PWC1406: サーブレット ResourcesServlet の Servlet.service() が例外 java.lang.IllegalStateException をスローしました: com.sun.enterprise.container.common.impl.EntityManagerWrapper.init(EntityManagerWrapper で unitName MambaPU の EntityManagerFactory を取得できません.java:121) com.sun.enterprise.container.common.impl.EntityManagerWrapper._getDelegate(EntityManagerWrapper.java:162) com.sun.enterprise.container.common.impl.EntityManagerWrapper.createNamedQuery(EntityManagerWrapper.java:554) ) pl.zawi.mamba.core.integration.controllers.implementation.FileEntityControlerImpl.retribFile(FileEntityControlerImpl.java:32) で pl.zawi.mamba.core.face.servlets.ResourcesServlet.doGet(ResourcesServlet.java:60) でjavax.servlet.http.HttpServlet.org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) の javax.servlet.http.HttpServlet.service(HttpServlet.java:847) のサービス (HttpServlet.java:734) org.apache.catalina のorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) の .core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) ) com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) で com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) で org.apache.catalina.core.StandardHostValve. org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:) で (StandardHostValve.java:185) を呼び出します。325) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) com.sun.grizzly .http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) ) com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) で com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) で com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain. java:102) com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) で、com.sun.grizzly.http で。HttpProtocolChain.execute(HttpProtocolChain.java:76) com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) で com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) で com.sun.grizzly .ContextTask.run(ContextTask.java:69) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java) :309) java.lang.Thread.run(Thread.java:662) でjava.lang.Thread.run(Thread.run(Thread.ジャワ:662)java.lang.Thread.run(Thread.run(Thread.ジャワ:662)
persistance.xml:
<?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="MambaPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/MambaDB</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<shared-cache-mode>ALL</shared-cache-mode>
<properties>
<!-- <property name="javax.persistence.jdbc.password" value="root"/>-->
<!-- <property name="javax.persistence.jdbc.user" value="root"/>-->
<!-- <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>-->
<!-- <property name="eclipselink.ddl-generation" value="create-tables"/>-->
<!-- <property name="eclipselink.logging.logger" value="org.eclipse.persistence.logging.DefaultSessionLog"/>-->
<property name="eclipselink.logging.level" value="ALL"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</persistence>
..::UPDATE2::..
誰かが私のプロジェクトのソースに興味を持っている場合、私は maven を使用しているので、ビルドと実行は簡単なはずです.(MySql ドライブは pom-s に含まれていないので、覚えておいてください)