persisitence.xml有问题
如果你有多个持久性单元
申明em的时候一定要加上    @PersistenceContext (unitName = yourPUname)标注
不然em不知道该连接哪个PU

解决方案 »

  1.   

    em=(EntityManager)ctx.lookup("MiddleWareWebService-ejbPU");
    是没必要的
    只要用标注声明PU名就可以了
      

  2.   


    加了@PersistenceContext(unitName ="MiddleWareWebService-ejbPU")
    仍然是这个错误
    Exception in thread "main" java.lang.NullPointerException
            at SessionBean.BookInfoFacade.create(BookInfoFacade.java:43)
            at middlewarewebservice.NewClass.main(NewClass.java:42)
    Java Result: 1
      

  3.   

    客户端我改用这样
           final EntityManagerFactory emf=Persistence.createEntityManagerFactory("MiddleWareWebService-ejbPU");
           final EntityManager em=emf.createEntityManager();
           em.persist(book);
    出现的好像是jndi的问题
    2008-12-9 11:57:17 com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl <init>
    警告: "IOP00410201: (COMM_FAILURE) 连接失败: 套接字类型: IIOP_CLEAR_TEXT;主机名: localhost;端口: 3700"
    org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 201  completed: No
            at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2690)
            at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2711)
            at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:261)
            at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:274)
            at com.sun.corba.ee.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:130)
            at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:192)
            at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:181)
            at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:325)
            at org.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:112)
            at org.omg.CosNaming.NamingContextHelper.narrow(NamingContextHelper.java:69)
            at com.sun.enterprise.naming.SerialContext.narrowProvider(SerialContext.java:131)
            at com.sun.enterprise.naming.SerialContext.getCachedProvider(SerialContext.java:247)
            at com.sun.enterprise.naming.SerialContext.getRemoteProvider(SerialContext.java:205)
            at com.sun.enterprise.naming.SerialContext.getProvider(SerialContext.java:160)
            at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:398)
            at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:445)
            at javax.naming.InitialContext.lookup(InitialContext.java:396)
            at oracle.toplink.essentials.jndi.JNDIConnector.connect(JNDIConnector.java:129)
            at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:184)
            at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:582)
            at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:280)
            at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:229)
            at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:93)
            at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)
            at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)
            at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:91)
      

  4.   

    我用的是sql server,不知道是否是这个问题
      

  5.   

    用法有问题: 客户端是不能使用em的 所有事务性操作都要在EJB中完成
     
     远程调用EJB时 必须用lookup方法查找接口如下代码:
    EJB:
    @Stateless (mappedName = "CB")
    public class ConfigBean implements ConfigRemote, ConfigLocal
    {
        @PersistenceContext (unitName = "xxxPU")
        private EntityManager em;
    ...
    CLIENT:
                ConfigRemote cr = null;
                try
                {
                    Context c = new InitialContext();
                    cr = (ConfigRemote) c.lookup("CB");
                    System.out.println("link success!");
                }
                catch (Exception ne)
                {
                    System.out.println("link error!");
                    return;
                }
      

  6.   


    请问lookup查找的是什么?
    我用你的方法,异常显示cb not found
    是必须通过这个映射吗?
    @Stateless (mappedName = "CB") 
      

  7.   

    部署ejb模块时会出现如下错误
    部署错误:
    尚未部署该模块。
    有关详细信息,请参见服务器日志。
            at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:166)
            at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:104)
            at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
            at sun.reflect.GeneratedMethodAccessor342.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
            at org.apache.tools.ant.Task.perform(Task.java:348)
            at org.apache.tools.ant.Target.execute(Target.java:357)
            at org.apache.tools.ant.Target.performTasks(Target.java:385)
            at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
            at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
            at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
            at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
            at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:277)
            at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:460)
            at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:151)
    Caused by: 尚未部署该模块。
            at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:160)
            ... 16 more
      

  8.   

    我用lookup查找jndi出现如下错误
    com.sun.gjc.spi.jdbc40.DataSource40 cannot be cast to SessionBean.BookInfoFacade
      

  9.   

    @EJB
        private static BookInfoFacadeRemote bookInfoFacade=new BookInfoFacade();;                                                               |
                                                                   |
                                                                   |
                                                                   |
                                                                   |
                                                     好像这个new就不应该有了吧。
      

  10.   

    不对吧,用JNDI获得的是容器托管的entityManager,不需要创建EntityManagerFactory对象,而且你用sessioncontext的lookup方法查到的也不是entityManagerFactory对象,而就是EntityManager对象。你最好在那个@PersistenceContext那表明name属性的内容.他表示的是制定持久化上下文的JNDI名称。