这是我的第一篇文章,所以如果不可理解,请随意提问。
我正在尝试开发一个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;
}
}
答案 0 :(得分:0)
看起来您正试图从EntityManager
设置entityManagerFactory
,我看不到在任何地方初始化。也许你应该检查一下protected EntityManagerFactory entityManagerFactory
是否为null。如果是这样,那就是你的问题。