【问题标题】:get datasource connection in websphere liberty在 websphere liberty 中获取数据源连接
【发布时间】:2020-08-21 21:25:16
【问题描述】:

我能够在 websphere liberty 中设置数据源并通过 REST API 对其进行验证。 如何在java代码中获取数据源连接。我正在尝试这种方式

InitialContext please = new InitialContext();

DataSource ds = (DataSource)please.lookup("jdbc/aces2/testdatasource"); 连接connection = ds.getConnection();

并在下面出现错误。请帮我解决这个问题

com.ibm.websphere.naming.WsnInitialContextFactory (initialization failure) 
at java.lang.J9VMInternals.initializationAlreadyFailed(J9VMInternals.java:98)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-2)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:83)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57)
at java.lang.reflect.Constructor.newInstance(Constructor.java:437)
at

【问题讨论】:

  • 您确定您使用的是new InitialContext(); 而不是new InitialContext(properties)?因为此类 com.ibm.websphere.naming.WsnInitialContextFactory 用于 WebSphere 传统,而不是 LIberty。而不是使用直接查找,我建议在您的课程中使用注释,例如:@Resource(jndiName="/jdbc/aces2/estdatasource") Datasource ds;

标签: websphere-liberty


【解决方案1】:

Liberty 中的 JNDI 查找由 jndi-1.0 功能提供。尝试将此功能添加到您的 server.xml 中,看看是否可以解决问题。例如,

<server>
  <featureManager>
    <feature>jndi-1.0</feature>
    <feature>jdbc-4.2</feature>
    ... other features
  </featureManager>

  ...
</server>

【讨论】:

  • 我相信在进行这样的直接查找时,您不需要使用完全限定名称DataSource ds = (DataSource)please.lookup("java:comp/env/jdbc/aces2/testdatasource");
  • “不需要”?你不是说“需要”吗?
  • 但我的代码在初始上下文阶段本身抛出异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多