jboss 6.1.0.final gwt和ejb的组合

时间:2011-09-22 15:50:35

标签: gwt jboss ejb

这是我的第一篇文章,所以如果不可理解,请随意提问。

我正在尝试开发一个gwt-application,它使用我自己的外部商店项目中的ejb-classes。

我的ServiceImpl根据需要到达了ejb,但是我似乎无法使用Injection。在我的ejb-class中,我调用一个函数来创建带有虚拟数据的测试数据库。为此(以及后来的任何请求)我想注入一个EntityManager。这是在我的Base-Class 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;

我正在运行jBoss 6.1.0.Final,GWT 2.4服务器端调用我的ejb-function。 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 

通过调试函数,我发现entityManager为NULL。 我怎样才能使注射工作?或者我对此采取了完全错误的方法?

如果需要,可获取更多信息: 的代码:

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();
}
}

已启动的类(通过界面产品)ProductHome:

@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;
}

}

扩展的HomeBase:

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;
}
}

1 个答案:

答案 0 :(得分:0)

看起来您正试图从EntityManager设置entityManagerFactory,我看不到在任何地方初始化。也许你应该检查一下protected EntityManagerFactory entityManagerFactory是否为null。如果是这样,那就是你的问题。