2016-07-26 4 views
0

시동시 JPA 2.1 eclipselink를 사용하여 데이터베이스에 액세스하려고합니다. 그것이 실행되면 콘솔 로그에서 로그인에 성공하지만 테이블이나 뷰가 발생합니다. 그러나, 내가 휴식 서비스를 통해 서블릿에 내 DAO를 호출하면, 모든 게 잘 실행됩니다. 내가 놓친 게 있니? 당신이 당신의 빈 초기화 후가 호출되도록하려는 경우,시동시 싱글 톤에서 JPA 사용

public abstract class BaseDao{ 
    @PersistenceContext(unitName = "myUnit") 
    protected EntityManager em; 
    pubic void create(Object entity); 
    public Ojbect get(); 
} 

@Stateless 
public class MyDaoService extends BaseDao{ 
    @Override 
    public void create(Object entity){ 
    this.em.persit(entity); 
    } 
    ... 
} 

@Singleton 
@Startup 
public class MySingleton{ 
    @EJB 
    private MyDaoService service; 
    @Schedule(hours="*", minutes="*", seconds="*/30") 
    public void doSomething(){ 
     MyEntity entity = new MyEntity();//assumed I have entity object 
     entity.setFirstName("firstName"); 
     entity.setLastName("lastName"); 
     service.create(entity); //>>>Table or view does not exist exception 
    } 
} 

답변

0

이렇게하면 내 문제가 해결됩니다. JEE와 JTA 엔티티 관리자를 관리하는 경우

프록시는 사용자를 지정 사용되고 엔티티 관리자 및 JDBC 연결 애플리케이션 제어 아니므로 암호가 더 어려울 수있다. 데이터베이스 연결을 설정하기 전에는 지속성 단위 특성을 EntityManager 오브젝트에 지정할 수 있습니다. EclipseLink Solutions Guide for EclipseLink

편집 : 나는 30 초마다 실행 @Schedule 주석이 있고 난 종속성이 있다고 생각하지 말아 : 당신이 각 트랜잭션 편집을 할

0

해봐요은 @PostConstruct가 필요합니다. 또한 의존성이있는 경우 빈을 초기화하기 전에 사용할 수 있어야합니다. @DependsOn

+0

하기 전에 설정해야합니다. 내 데이터 소스는 프록시 인증을 사용하며 프로그램이 자동으로 실행되고 사용자와 연결되어 있지 않으므로 나는 그것이 문제라고 생각한다. EntityManager에 사용자 이름과 암호를 삽입하는 방법이 있는지 잘 모릅니다. – SpyClown