jboss 6.1.0.1 gwt和ejb的最终组合

jboss 6.1.0.1 gwt和ejb的最终组合,gwt,jboss,ejb,Gwt,Jboss,Ejb,这是我的第一篇帖子,所以如果不理解,请随时提问 我正在尝试开发一个gwt应用程序,该应用程序使用来自外部车间项目的我自己的ejb类 我的ServiceImpl根据需要到达ejb,但是我不能像我看来的那样使用注入。在我的ejb类中,我调用一个函数来创建带有虚拟数据的测试数据库。对于这一点(当然还有以后的任何请求),我想注入一个EntityManager。这是在我的基类HomeBase中完成的。 问题:entityManager可能未初始化。我尝试了两种注释: @PersistenceUnit(un

这是我的第一篇帖子,所以如果不理解,请随时提问

我正在尝试开发一个gwt应用程序,该应用程序使用来自外部车间项目的我自己的ejb类

我的ServiceImpl根据需要到达ejb,但是我不能像我看来的那样使用注入。在我的ejb类中,我调用一个函数来创建带有虚拟数据的测试数据库。对于这一点(当然还有以后的任何请求),我想注入一个EntityManager。这是在我的基类HomeBase中完成的。 问题:entityManager可能未初始化。我尝试了两种注释:

@PersistenceUnit(unitName = "sung.app.kylintv.ejb")
protected EntityManagerFactory entityManagerFactory;

protected EntityManager entityManager = entityManagerFactory.createEntityManager();
以及:

@PersistenceContext(unitName="sung.app.kylintv.ejb")
protected EntityManager entityManager;
我正在运行JBoss6.1.0.Final,GWT2.4服务器端调用我的ejb函数。 JBoss正确启动,没有显示任何错误。但是,调用函数时,我会收到以下错误消息:

Caused by: javax.ejb.EJBException: java.lang.NullPointerException
...
Caused by: java.lang.NullPointerException
at sung.app.kylintv.HomeBase.<init>(HomeBase.java:28) [:]
at sung.app.kylintv.product.ProductHome.<init>(ProductHome.java:35) [:]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [:1.6.0_25]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) [:1.6.0_25]
at 
启动类(通过接口产品)ProductHome:

package sung.app.kylintv.gwt.server;

import javax.ejb.EJB;

import sung.app.kylintv.gwt.client.DatabaseBuilderService;
import sung.app.kylintv.product.Product;
import sung.app.kylintv.product.ProductHome;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class DatabaseBuilderServiceImpl extends RemoteServiceServlet implements DatabaseBuilderService
{
@EJB(mappedName = "sung/app/kylintv/product" )
private transient Product product;


@Override
public boolean createDefaultDatabaseEntries()
{
    return product.createTestEntry();
}
}
@Stateless(name="Product")
@Local(Product.class)
public class ProductHome extends HomeBase<ProductEntity> implements Serializable, Product
{
@EJB
protected Option sessionOption;

@TransactionAttribute(REQUIRED)
public boolean createTestEntry()
{
    try
    {
        System.out.println("TEST creating Data BEGIN");

        ProductEntity currentProduct = new ProductEntity();

// ++++ fill FIRST product ++++
        currentProduct.setName("bo_product_europe_basic_name");
        currentProduct.setDescription("bo_product_europe_basic_description");

        getEntityManager().persist(currentProduct); **<- HERE THE ERROR OCCURS**

        ... **For better overview I removed the further object-creation**
    }
    catch(Exception e)
    {
        //print out an error message and return false
        System.out.println( e.getCause().getMessage() );
        return false;
    }
    return true;
}

}
public abstract class HomeBase<T>
{
@PersistenceUnit(unitName = "sung.app.kylintv.ejb")
protected EntityManagerFactory entityManagerFactory;

private EntityManager entityManager = entityManagerFactory.createEntityManager();


//    @PersistenceContext(unitName = "sung_app_kylintv")
//    protected EntityManager entityManager;
//    
public void setEntityManager(EntityManager entityManager) {
    this.entityManager = entityManager;
}


public EntityManager getEntityManager() {
    return entityManager;
}
}
@无状态(name=“Product”)
@本地(产品类别)
公共类ProductHome扩展HomeBase实现可序列化的产品
{
@EJB
受保护选项会话选项;
@TransactionAttribute(必需)
公共布尔createTestEntry()
{
尝试
{
System.out.println(“测试创建数据开始”);
ProductEntity currentProduct=新ProductEntity();
//+++++填充第一个产品++++
currentProduct.setName(“bo_产品欧洲基本名称”);
currentProduct.setDescription(“bo_产品欧洲基本描述”);

getEntityManager().persist(当前产品)***看起来您正试图从
EntityManager工厂
设置一个
EntityManager
,但我看不到它在任何地方初始化。也许您应该检查受保护的
EntityManager工厂EntityManager工厂
是否为空。如果是,那就是您的问题。

认真地说?试着缩小问题的范围r更少的否决票,甚至可能是一个答案。很抱歉,我尝试通过移动下面的代码并删除一些代码来提高问题的可读性。第一行现在应该显示我的问题。感谢您的帮助!您完全正确。类已启动,但工厂尚未初始化。