Клиент EJB не может найти источник данных, который успешно тестируется в консоли администратора WebLogic - PullRequest
1 голос
/ 19 мая 2010

Отказ от ответственности: я совершенно новичок в Java EE / EJB и всё такое, так что терпите меня.

У меня есть простой EJB, который я могу успешно развернуть, используя интегрированный сервер JDeveloper 11g WebLogic и удаленное соединение с базой данных (JDBC). У меня есть источник данных с именем «PGY2», определенный в WebLogic, и я могу успешно проверить его с консоли администратора.

Вот код клиента, с которым я пытаюсь его протестировать (полностью сгенерированный JDev, за исключением трех вызовов метода на adminManager):

public class AdminManagerClient {
    public static void main(String [] args) {
        try {
            final Context context = getInitialContext();
            AdminManager adminManager = (AdminManager)context.lookup("Uran-AdminManager#hu.elte.pgy2.BACNAAI.UranEJB.AdminManager");
            adminManager.addAdmin("root", "root", "Kovács Isten");
            adminManager.addStudent("BACNAAI", "matt", "B Cs", 2005);
            adminManager.addTeacher("SIPKABT", "patt", "S P", "numanal", "Dr.");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private static Context getInitialContext() throws NamingException {
        Hashtable env = new Hashtable();
        // WebLogic Server 10.x connection details
        env.put( Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory" );
        env.put(Context.PROVIDER_URL, "t3://127.0.0.1:7101");
        return new InitialContext( env );
    }
}

Но когда я пытаюсь запустить это, я получаю следующую ошибку в строке с adminManager.addAdmin (то есть после поиска):

javax.ejb.EJBException: EJB Exception: ; nested exception is: 
    Exception [EclipseLink-4002] (Eclipse Persistence Services - 1.0.2 (Build 20081024)): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Internal error: Cannot obtain XAConnection Creation of XAConnection for pool PGY2 failed after waitSecs:30 : java.sql.SQLException: Data Source PGY2 does not exist.

Почему клиент не может найти источник данных и как мне его найти?


РЕДАКТИРОВАТЬ: Я внимательно посмотрел на вывод WebLogic во время развертывания, и я нашел это. Я понятия не имею, что это значит, но это может быть актуально:

<2010.05.20. 0:50:43 CEST> <Error> <Deployer> <BEA-149231> <Unable to set the activation state to true for the application 'PGY2'.
weblogic.application.ModuleException: 
    at weblogic.jdbc.module.JDBCModule.activate(JDBCModule.java:349)
    at weblogic.application.internal.flow.ModuleListenerInvoker.activate(ModuleListenerInvoker.java:107)
    at weblogic.application.internal.flow.DeploymentCallbackFlow$2.next(DeploymentCallbackFlow.java:411)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.activate(DeploymentCallbackFlow.java:74)
    Truncated. see log file for complete stacktrace
weblogic.common.ResourceException:  is already bound
    at weblogic.jdbc.common.internal.RmiDataSource.start(RmiDataSource.java:387)
    at weblogic.jdbc.common.internal.DataSourceManager.createAndStartDataSource(DataSourceManager.java:136)
    at weblogic.jdbc.common.internal.DataSourceManager.createAndStartDataSource(DataSourceManager.java:97)
    at weblogic.jdbc.module.JDBCModule.activate(JDBCModule.java:346)
    at weblogic.application.internal.flow.ModuleListenerInvoker.activate(ModuleListenerInvoker.java:107)
    Truncated. see log file for complete stacktrace
> 

1 Ответ

1 голос
/ 20 мая 2010

На самом деле, не EJB-клиент не может найти DataSource, это код, работающий внутри контейнера и использующий JPA. Точнее, провайдер JPA - EclipseLink здесь - не может его найти. Дважды проверьте, что имя источника данных, определенное в вашем persistence.xml<jta-data-source>), совпадает с именем JNDI источника данных PGY2.

WebLogic предоставляет браузер JNDI (для просмотра дерева JNDI), при необходимости используйте его, чтобы узнать, под каким именем регистрируется ваш источник данных.

Обновление: Не могли бы быть разрывы строк в поле имени JNDI источника данных (см. этот пост )?

...