jboss 6.1.0. финальная комбинация gwt и ejb - PullRequest
0 голосов
/ 22 сентября 2011

это мой первый пост, поэтому, если он не понятен, пожалуйста, не стесняйтесь спрашивать.

Я пытаюсь разработать gwt-приложение, которое использует мои собственные ejb-классы из внешнего магазина-проекта.

Мой ServiceImpl достигает ejb, как требуется, однако я не могу использовать Injection, как мне кажется. В моем ejb-классе я вызываю функцию для создания моей тестовой базы данных с фиктивными данными. Для этого (и позже для любых запросов конечно) я хотел ввести EntityManager. Это сделано в моей базе базового класса. проблема: 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. Наконец, сервер GWT 2.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 

Отладив функцию, я обнаружил, что 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;
}

}

Расширенная база базы:

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 голосов
/ 24 сентября 2011

Похоже, вы пытаетесь установить EntityManager из entityManagerFactory, который я нигде не вижу инициализированным.Возможно, вам следует проверить, имеет ли значение EntityManagerFactory entityManagerFactory значение NULL.Если так, то это ваша проблема.

...