为什么 OpenLiberty 数据源在单元测试中不可用?

发布于 2025-01-11 19:55:58 字数 955 浏览 0 评论 0原文

OpenLiberty 正在开发模式下运行。 在我的代码中的某个地方,我使用

Context initContext = new InitialContext();
DataSource ds = (DataSource) initContext.lookup("app/myDB");

在网络服务器中配置的数据源:

<dataSource id="mssql" jndiName="app/myDB">
    <connectionManager maxPoolSize="20000" minPoolSize="2"/>

    <jdbcDriver libraryRef="MSSQL"/>
    <properties.microsoft.sqlserver databaseName="myDB" serverName="xxx.xxx.xxx.xxx" portNumber="1433" user="X" password="Y"/>
</dataSource>

到目前为止,这工作正常,直到我尝试运行我的单元测试。

当尝试按需运行测试时,某处调用此代码:

Context initContext = new InitialContext();
DataSource ds = (DataSource) initContext.lookup("app/myDB");

my webapp 失败并显示

javax.naming.NoInitialContextException

那么为什么单元测试没有初始上下文呢?我可以以某种方式告诉 OpenLiberty 为测试范围提供该资源吗?或者我必须模拟初始上下文吗?我是编写单元/集成测试的初学者。如果我需要提供更多信息,请告诉我。

编辑:添加了开发模式和一般说明

OpenLiberty is running in dev-mode.
Somewhere in my code i use

Context initContext = new InitialContext();
DataSource ds = (DataSource) initContext.lookup("app/myDB");

with a datasource configured in the webserver:

<dataSource id="mssql" jndiName="app/myDB">
    <connectionManager maxPoolSize="20000" minPoolSize="2"/>

    <jdbcDriver libraryRef="MSSQL"/>
    <properties.microsoft.sqlserver databaseName="myDB" serverName="xxx.xxx.xxx.xxx" portNumber="1433" user="X" password="Y"/>
</dataSource>

This works fine so far, until i try to run my units tests.

When trying to run the tests on demand, that somewhere call this code:

Context initContext = new InitialContext();
DataSource ds = (DataSource) initContext.lookup("app/myDB");

my webapp fails with

javax.naming.NoInitialContextException

So why do the unit tests do not have the initial context? Can i somehow tell OpenLiberty to provide that resource for test scope? Or do i have to mock the initialContext? I am a beginner in writing unit/integration test. If i need to provide additional information please tell me.

edit: added dev-mode and general clarification

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆伤 2025-01-18 19:55:58

为了使 DataSource 可用于 Liberty 中的 JNDI 查找,您需要运行 Liberty 服务器并启用 jndi-1.0 功能部件,并启用 jdbc-4.x 功能部件之一。例如,在 server.xml 中,

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

    ...
</server>

In order for a DataSource to be made available for JNDI lookups in Liberty, you need to have the Liberty server running and the jndi-1.0 feature enabled, and one of the jdbc-4.x features enabled. For example, in server.xml,

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

    ...
</server>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文