Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/multiDS");
connection = dataSource.getConnection();
请帮助我模拟上面的代码。
嗨,汤姆·安德森
我尝试了以下代码
@BeforeClass
public static void setUpClass() throws Exception {
// rcarver - setup the jndi context and the datasource
try {
// Create initial context
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.naming.java.javaURLContextFactory");
System.setProperty(Context.URL_PKG_PREFIXES,
"org.apache.naming");
Context ic = new InitialContext();
ic.createSubcontext("java:");
ic.createSubcontext("java:comp");
ic.createSubcontext("java:comp/env");
ic.createSubcontext("java:comp/env/jdbc");
ic.createSubcontext("java:comp/env/jdbc/multiDS");
// Construct DataSource
OracleConnectionPoolDataSource ds = new OracleConnectionPoolDataSource();
ds.setURL("jdbc:oracle:thin:@g9u0696.houston.hp.com:1525:CRNAD");
ds.setUser("uname");
ds.setPassword("pwd");
} catch (NamingException ex) {
ex.printStackTrace();
}
}
但其给出的错误为:
com.hp.corona.common.exception.CacheException: org.apache.naming.NamingContext cannot be cast to javax.sql.DataSource
请帮助我测试我只想从JNDI数据源 连接 的代码
传统的做法是更改您的代码,以便将其Context
注入(通过依赖项注入框架或手动)。然后,您只需在单元测试中传递一个模拟即可。
如果您不能执行此操作,并且您的代码必须创建IntialContext
自身,那么您将需要设置一个伪造的JNDI实现,可以在其中植入模拟。如果您在网络上搜索内存中的JNDI实现或模拟JNDI实现,则可以找到各种选项,也可以自己编写。基本上,您将需要一个实现,InitialContextFactory
该实现只返回一个合适的模拟,然后通过设置java.naming.factory.initial
system属性选择该模拟。
我在编写必要的课上有裂痕。干得好:
public class MockInitialContextFactory implements InitialContextFactory {
private static final ThreadLocal<Context> currentContext = new ThreadLocal<Context>();
@Override
public Context getInitialContext(Hashtable<?, ?> environment) throws NamingException {
return currentContext.get();
}
public static void setCurrentContext(Context context) {
currentContext.set(context);
}
public static void clearCurrentContext() {
currentContext.remove();
}
}
public class MockInitialContextRule implements TestRule {
private final Context context;
public MockInitialContextRule(Context context) {
this.context = context;
}
@Override
public Statement apply(final Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
System.setProperty(Context.INITIAL_CONTEXT_FACTORY, MockInitialContextFactory.class.getName());
MockInitialContextFactory.setCurrentContext(context);
try {
base.evaluate();
} finally {
System.clearProperty(Context.INITIAL_CONTEXT_FACTORY);
MockInitialContextFactory.clearCurrentContext();
}
}
};
}
}
用法如下:
public class FooTest {
private final Context context = mock(Context.class);
@Rule
public MockInitialContextRule mockInitialContextRule = new MockInitialContextRule(context);
@Test
public void testName() throws Exception {
// set up stubbings on the context mock
// invoke the code under test
}
}
外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计
外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”-> “外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。按住 Control 键并点按外部服务器对象列表的任意位置,然后选择“安装 postgres_fdw 扩展”。 外
外部服务器通常封装了外部数据封装器(foreign-data wrapper)用来访问一个外部数据源所需的连接信息。在主窗口中,点击 “其他”->“外部服务器”来打开外部服务器的对象列表。 若要访问外部 PostgreSQL 服务器的数据,你可以安装 postgres_fdw 扩展。右击外部服务器对象列表的任意位置并选择“安装 postgres_fdw 扩展”。 外部服务器设计器 “外部服务器设计
我知道如果我们想在外部服务器上部署Spring boot Web应用程序,我们应该排除嵌入式服务器,但如果我们不这样做会发生什么?假设我在jboss外部服务器上部署Spring boot war,但我没有排除tomcat服务器?在这种情况下,Spring boot使用jboss外部服务器,还是仍然使用嵌入式tomcat服务器?
此功能的状态是实验性的。我们欢迎您对此功能的实用性的反馈。我们可能会在未来发展这个功能,使其更加通用。虽然我们将努力确保向后兼容性,但不能保证。 场景 在某些情况下,希望能够从交易处理函数中调用REST API。这使你可以将区块链中的复杂计算移出。调用REST API允许交易处理器功能将复杂或昂贵的计算外包给中央或peer托管的服务。 调用外部REST服务 post(url,data)函数可用于交
我需要帮助在外部服务器上运行/调试我的GWT应用程序,而不是使用默认的jetty服务器。我读了几个与这个问题相关的主题,例如。 > 在哪里编写gwt-noserver选项以避免jetty? 如何使用GWT和(常规servlet)Jetty后端设置eclipse http://www.gwtproject.org/doc/latest/devguideCompilinganddebugging.ht