2012-06-05 3 views
4

У меня проблема с правильной конфигурацией источника данных для OpenEJB 3.1.3. Я пытаюсь настроить соединение с postgres db, но если я отлаживаю тест, я получаю параметры подключения по умолчанию hsql.OpenEJB - настройка источника данных для JUnit

Вот мой тестовый класс:

@RunWith(ApplicationComposer.class) 
public class OpenEJBTest { 
    @EJB 
    Files fb; 

    @Test 
    public void testSth() { 
     List<UploadSession> uploadNotFinishedSessions = fb.getUploadNotFinishedSessions(); 
    } 

    @Module 
    public EjbJar beans() { 
     EjbJar ejbJar = new EjbJar("beans"); 
     ejbJar.addEnterpriseBean(new StatelessBean(FilesBean.class)); 
     ejbJar.addEnterpriseBean(new StatelessBean(FilesUtilBean.class)); 
     ejbJar.addEnterpriseBean(new StatelessBean(ServerFilesBean.class)); 
     ejbJar.addEnterpriseBean(new StatelessBean(UserUtilBean.class)); 
     return ejbJar; 
    } 

    @Module 
    public PersistenceUnit persistence() { 
     PersistenceUnit unit = new PersistenceUnit("postgresPU", HibernatePersistence.class.getName()); 
     String simpleXml = SimpleXmlUtil.toSimpleXml(unit); 
     System.out.println(simpleXml); 
     unit.setJtaDataSource("PostgresDS"); 
     unit.setNonJtaDataSource("PostgresDSUnmanaged"); 
     return unit; 
    } 
} 

Я попытался:

  1. добавить jndi.properties к классам:
postgresPU=new://Resource?type=DataSource 
postgresPU.JdbcDriver=org.postgresql.Driver 
postgresPU.JdbcUrl=jdbc:postgresql:/localhost:5433/pdb 
postgresPU.JtaManaged=true 
postgresPU.DefaultAutoCommit=false 
postgresPU.UserName=... 
  1. Настройка источников данных через openejb.xml (расположенные на пути к классам)
<Resource id="PostgresDS" type="DataSource"> 
    JdbcDriver org.postgresql.Driver 
    JdbcUrl jdbc:postgresql://localhost:5433/pdb 
    UserName user 
    Password pass 
    JtaManaged true 
</Resource> 

<Resource id="PostgresDSUnmanaged" type="DataSource"> 
    JdbcDriver org.postgresql.Driver 
    JdbcUrl  jdbc:postgresql://localhost:5433/pdb 
    UserName user 
    Password pass 
    JtaManaged false 
</Resource> 

Но ни его работы - источники данных не сконфигурирован на все версии по умолчанию источника данных остается. Из-умолчанию HSQL соединения я получаю следующее: ошибка

WARN - SQL Error: -22, SQLState: S0002 
ERROR - Table not found in statement [select top ? user0_.id as col_0_0_ from tusers user0_ where user0_.login=?] 

Что я, возможно, делал неправильно?

ответ

5

ApplicationComposer не использует JNDI для загрузки контейнера, поэтому файл jndi.properties никогда не видел.

Вместо этого вы можете использовать аннотацию org.apache.openejb.junit.Configuration о методе, чтобы вернуть свойства, которые вы хотите использовать для настройки теста.

@Configuration 
public Properties properties() { 
    //... 
} 

Я бы переименовать jndi.properties к чему-то еще, так что это не смущает, то вы можете использовать такой код, чтобы найти его в пути к классам.

final URL url = this.getClass().getResource("/config.properties"); 
    final Properties props = new Properties(); 
    final InputStream in = url.openStream(); 
    try { 
     props.load(in); 
    } finally { 
     close(in); 
    } 
Смежные вопросы