我在写一个session bean时出了问题,
@PersistenceContext(unitName="abc")
private EntityManager em;
对这个代码进行测试后发现他一直为空值。而且我也配置了persistence.xml文件。不知道如果persistence.xml文件写错了,会不会让它为空值?
还有一个问题是,我想用下面的代码给这个变量赋值也不行。是没有执行这个代码,是不是PostConstruct注解的问题。
@PostConstruct
public void initContext(){
final EntityManagerFactory emf =
Persistence.createEntityManagerFactory("abc");
em = emf.createEntityManager();
System.out.println("-----------------------------------");
System.out.println("Invoke initContext()");
System.out.println("-----------------------------------");
}另外,我的服务器是glassfish. persistence.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="abc" transaction-type="JTA">
<jta-data-source>jdbc/AAA</jta-data-source>
<class>cn.edu.hit.blogsystem.entity.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties/>
</persistence-unit>
</persistence>
@PersistenceContext(unitName="abc")
private EntityManager em;
对这个代码进行测试后发现他一直为空值。而且我也配置了persistence.xml文件。不知道如果persistence.xml文件写错了,会不会让它为空值?
还有一个问题是,我想用下面的代码给这个变量赋值也不行。是没有执行这个代码,是不是PostConstruct注解的问题。
@PostConstruct
public void initContext(){
final EntityManagerFactory emf =
Persistence.createEntityManagerFactory("abc");
em = emf.createEntityManager();
System.out.println("-----------------------------------");
System.out.println("Invoke initContext()");
System.out.println("-----------------------------------");
}另外,我的服务器是glassfish. persistence.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="abc" transaction-type="JTA">
<jta-data-source>jdbc/AAA</jta-data-source>
<class>cn.edu.hit.blogsystem.entity.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties/>
</persistence-unit>
</persistence>
@Stateless(name="UserManagerFacade")
public class UserManager implements UserManagerFacade
{
@PersistenceContext(unitName="BlogSystemPU")
private EntityManager em;
//这个方法我用于测呀啊PostConstruct注解的。也没有成功
@PostConstruct
public void initContext(){
final EntityManagerFactory emf =
Persistence.createEntityManagerFactory("BlogSystemPU");
em = emf.createEntityManager();
System.out.println("-----------------------------------");
System.out.println("Invoke initContext()");
System.out.println("-----------------------------------");
}
//这个是构造器。有被执行。
public UserManager(){
System.out.println("-----------------------------------");
System.out.println("INIT UserManager");
System.out.println("-----------------------------------");
}
//一些接口的实现方法。
public Object persistenceEntity(Object entity){
System.out.println(em); //输出为null
System.out.println(entity); //有值。
em.persist(entity);
return entity;
}
}《persistence.xml 》
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="BlogSystemPU" transaction-type="RESOURCE_LOCAL">
<jta-data-source>jdbc/blogsystem</jta-data-source>
=====该行的数据源配置不知道是不是正确的?在我的glassfish中有一个jdbc/blogsystem的数据库连接。=====
<class>cn.edu.hit.blogsystem.entity.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties/>
</persistence-unit>
</persistence>在我的客户端程序里代码如下:
Properties pro = new Properties();
pro.load(TestJPAClient.class.getResourceAsStream("jndi.properties"));
final Context context = new InitialContext(pro);
UserManagerFacade face = (UserManagerFacade) context.lookup("UserManagerFacade");
System.out.println("-----------------------------------------------");
System.out.println(face);
System.out.println("-----------------------------------------------");
User user = new User();
user.setUserId(1);
user.setUserName("zer");
user.setPassword("123456");
face.persistenceEntity(user); //客户端运行到此处出错。空引用错误。
-----------------------------------------------
cn.edu.hit.blogsystem.facade._UserManagerFacade_Wrapper@2a666f0f
-----------------------------------------------
javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteExc
eption occurred in server thread; nested exception is:
java.rmi.RemoteException: null; nested exception is:
java.lang.NullPointerException
java.rmi.ServerException: RemoteException occurred in server thread; nested exce
ption is:
java.rmi.RemoteException: null; nested exception is:
java.lang.NullPointerException
at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.ja
va:243)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.priv
ateInvoke(StubInvocationHandlerImpl.java:205)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invo
ke(StubInvocationHandlerImpl.java:152)
at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELS
tubBase.java:225)
at cn.edu.hit.blogsystem.facade.__UserManagerFacade_Remote_DynamicStub.p
ersistenceEntity(cn/edu/hit/blogsystem/facade/__UserManagerFacade_Remote_Dynamic
Stub.java)
at cn.edu.hit.blogsystem.facade._UserManagerFacade_Wrapper.persistenceEn
tity(cn/edu/hit/blogsystem/facade/_UserManagerFacade_Wrapper.java)
at cn.edu.hit.blogsystem.client.TestJPAClient.main(TestJPAClient.java:32
)
Caused by: java.rmi.RemoteException: null; nested exception is:
java.lang.NullPointerException
at com.sun.enterprise.iiop.POAProtocolMgr.mapException(POAProtocolMgr.ja
va:251)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:13
86)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:13
16)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInv
ocationHandler.java:210)
at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBO
bjectInvocationHandlerDelegate.java:117)
at $Proxy63.persistenceEntity(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(Reflecti
veTie.java:154)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispa
tchToServant(CorbaServerRequestDispatcherImpl.java:687)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispa
tch(CorbaServerRequestDispatcherImpl.java:227)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest
Request(CorbaMessageMediatorImpl.java:1846)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest
(CorbaMessageMediatorImpl.java:1706)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(C
orbaMessageMediatorImpl.java:1088)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.call
back(RequestMessage_1_2.java:223)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest
(CorbaMessageMediatorImpl.java:806)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(Corb
aMessageMediatorImpl.java:563)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaM
essageMediatorImpl.java:2567)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.
run(ThreadPoolImpl.java:555)
Caused by: java.lang.NullPointerException
at cn.edu.hit.blogsystem.facade.impl.UserManager.persistenceEntity(UserM
anager.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(
EJBSecurityManager.java:1067)
at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:176
)
at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseConta
iner.java:2895)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:398
6)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInv
ocationHandler.java:203)