Я хочу написать приложение, которое имеет 2 EJB.Это приложение может работать как в OpenEJB, так и в WebLogic 10.3.Оба EJB являются EJB 3.0.
Я знаю, как реализовать как в OpenEJB, так и в WebLogic, но проблема в том, что я хочу использовать один и тот же код для развертывания в обеих средах.Я думаю, что проблема заключается в том, как выполнить поиск JNDI, потому что Context.INITIAL_CONTEXT_FACTORY в WebLogic имеет вид weblogic.jndi.WLInitialContextFactory, а OpenEJB - нет.
Текущая идея заключается в том, что 1-й EJB-объект использует локатор служб для поиска 2-го EJB исервисный локатор будет читать разные INI в 2 средах.Есть ли другие предложения?Есть ли решение, в котором я могу просто использовать аннотацию, не нужно использовать внешние файлы INI.
2 EJB-компонента живут в одном контейнере, но возможно, что в будущем он будет перемещен в другой контейнер.
Обновление от 2011/10/06
По предложению Дэвида я внес некоторые изменения.Код является POJO, а не кодом JUnit.Он не использует @LocalClient и initialContext.bind («inject», this);(Я поместил код 2 в свой код JUnit)
Положите ресурсы \ META-INF \ application-client.xml (только содержат)
Поместить ресурсы \ jndi.properties
jdbc/OrderDB = new://Resource?type=DataSource
jdbc/OrderDB.JdbcDriver = oracle.jdbc.OracleDriver
jdbc/OrderDB.JdbcUrl = jdbc:oracle:thin:@*.*.*.*:1521:test
jdbc/OrderDB.JtaManaged = false
jdbc/OrderDB.UserName = test
jdbc/OrderDB.Password = test
Код поиска
InitialContext ctx= new InitialContext();
ctx.lookup("jdbc/" + name);
Ниже приведен журнал, OpenEJB создает JNDI длябаза данных.Я также использую режим отладки Eclipse, чтобы увидеть содержимое "ctx" и найти "jdbc / OrderDB" в MyProps
INFO - Configuring Service(id=jdbc/OrderDB, type=Resource, provider-id=Default JDBC Database)
Но, наконец, я все еще не могу найти его.Я также пытаюсь использовать ctx.lookup (name), ctx.lookup ("java: comp / env / jdbc /" + name), и результат тот же.
javax.naming.NameNotFoundException: Name "jdbc/OrderDB" not found.
Обновление 2011/10/ 12
Основываясь на комментариях Дэвида, до Java EE6, я думаю, что единственное решение - использовать локатор служб и некоторую конфигурацию для использования различных JNDI между WebLogic и OpenEJB.Ниже приводится результат теста.
БД: WebLogic: OrderDB, OpenEJB: openejb: Resource / jdbc / OrderDB
Менеджер транзакций: WebLogic: javax.transaction.TransactionManager, OpenEJB: java: comp / TransactionManager
EJB : оба они просто ищут имя EJB без префикса