我在写一个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>

解决方案 »

  1.   

    EJB代码和测试代码贴出来看看。
      

  2.   

    接口的实现类,也就是session bean
    @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); //客户端运行到此处出错。空引用错误。
      

  3.   

    //////////////以下是客户端的报错。 服务端的输出在楼上的UserManager类中
    -----------------------------------------------
    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)