4

OpenEJB3.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;
    }
}

私がしようとしました:

  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=?]

私はおそらく何が間違っているのですか?

4

1 に答える 1

5

ApplicationComposerJNDIを使用してコンテナをブートストラップしないため、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);
   }
于 2012-06-05T23:05:52.997 に答える