gpt4 book ai didi

java - EJB 客户端找不到在 WebLogic 管理控制台中测试成功的数据源

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:23 31 4
gpt4 key购买 nike

免责声明:我对 Java EE/EJB 等完全陌生,所以请耐心等待。

我有一个简单的 EJB,可以使用 JDeveloper 11g 的集成 WebLogic 服务器和远程数据库连接 (JDBC) 成功部署它。我在 WebLogic 中定义了一个名为“PGY2”的数据源,我可以从管理控制台成功测试它。

这是我尝试测试的客户端代码(完全由 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
>

最佳答案

实际上,并不是EJB客户端找不到DataSource,而是容器内运行并使用JPA的代码。更准确地说,是 JPA 提供者(此处为 EclipseLink)找不到它。仔细检查 persistence.xml 中定义的数据源名称(在 <jta-data-source> 中)与 PGY2 数据源的 JNDI 名称匹配。

WebLogic 提供了一个 JNDI 浏览器(用于浏览 JNDI 树),如果需要的话可以使用它来查看您的数据源以哪个名称注册。

更新:数据源的 JNDI 名称字段中是否有换行符(请参阅 this blog post )?

关于java - EJB 客户端找不到在 WebLogic 管理控制台中测试成功的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865758/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com