2011-09-22 3 views
-5

이것은 내 첫 번째 게시물이므로 이해할 수없는 경우 언제든지 물어보십시오.jboss 6.1.0.final gwt and ejb combination

나는 외부 shop-project에서 내 자신의 ejb-class를 사용하는 gwt- 응용 프로그램을 개발하려고합니다.

필자의 ServiceImpl은 필요에 따라 ejb에 도달하지만 나에게 맞는 것으로서 Injection을 사용할 수는 없습니다. 내 ejb-class에서 더미 데이터를 사용하여 테스트 데이터베이스를 만드는 함수를 호출합니다. 이것을 위해 (그리고 나중에 모든 요청에 ​​대해) 나는 EntityManager를 삽입하려고했다. 이것은 내 Base-Class HomeBase에서 수행됩니다. 문제 : entityManager가 초기화되지 않을 수 있습니다. 내가 JBOSS 6.1.0.Final, GWT 내 EJB-함수를 호출 2.4 서버 측을 실행하는거야

@PersistenceContext(unitName="sung.app.kylintv.ejb") 
protected EntityManager entityManager; 

:로,뿐만 아니라

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

protected EntityManager entityManager = entityManagerFactory.createEntityManager(); 

: 나는 모두 주석을 tryed. 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; 
} 
} 
+2

... 심각하게? 적은 downvotes 및 어쩌면 답변에 대한 질문의 크기를 줄이기보십시오. –

+0

죄송합니다. 아래 코드를 이동하고 그 중 일부를 제거하여 질문을 더 읽기 쉽도록 만들었습니다. 첫 번째 라인은 이제 내 문제를 보여 주어야합니다. – Norman

답변

0

EntityManagerentityManagerFactory에서 설정하려는 것 같습니다. 어느 곳에서도 초기화되지는 않습니다. 보호 된 EntityManagerFactory entityManagerFactory이 null인지 확인해야합니다. 그렇다면 문제가 있습니다.

+0

도움에 감사드립니다! 너는 완전히 옳다. 클래스가 시작되었지만 팩토리가 초기화되지 않았습니다. – Norman

관련 문제