jboss 6.1.0.1 gwt和ejb的最终组合
这是我的第一篇帖子,所以如果不理解,请随时提问 我正在尝试开发一个gwt应用程序,该应用程序使用来自外部车间项目的我自己的ejb类 我的ServiceImpl根据需要到达ejb,但是我不能像我看来的那样使用注入。在我的ejb类中,我调用一个函数来创建带有虚拟数据的测试数据库。对于这一点(当然还有以后的任何请求),我想注入一个EntityManager。这是在我的基类HomeBase中完成的。 问题:entityManager可能未初始化。我尝试了两种注释:jboss 6.1.0.1 gwt和ejb的最终组合,gwt,jboss,ejb,Gwt,Jboss,Ejb,这是我的第一篇帖子,所以如果不理解,请随时提问 我正在尝试开发一个gwt应用程序,该应用程序使用来自外部车间项目的我自己的ejb类 我的ServiceImpl根据需要到达ejb,但是我不能像我看来的那样使用注入。在我的ejb类中,我调用一个函数来创建带有虚拟数据的测试数据库。对于这一点(当然还有以后的任何请求),我想注入一个EntityManager。这是在我的基类HomeBase中完成的。 问题:entityManager可能未初始化。我尝试了两种注释: @PersistenceUnit(un
@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更少的否决票,甚至可能是一个答案。很抱歉,我尝试通过移动下面的代码并删除一些代码来提高问题的可读性。第一行现在应该显示我的问题。感谢您的帮助!您完全正确。类已启动,但工厂尚未初始化。