我在为OpenEJB 3.1.3正确配置数据源时遇到问题。我尝试配置连接到postgres db,但是我调试测试我得到默认的hsql连接参数。
这是我的测试类:
@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;
}
}
我试图:
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=...
<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=?]
我可能做错了什么?
答案 0 :(得分: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);
}