首页 文章

从master-datasources.xml访问Carbon数据源

提问于
浏览
0

我想在Java应用程序中使用Carbon数据源创建数据库连接 . 我得到以下异常

javax.naming.NameNotFoundException:com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:116)中的jdbc,位于com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:124)在org.wso2.ApiInvocationHnadler.DBConnection.testJndiDataSource(DBConnection.java:77)的javax.naming.InitialContext.lookup(InitialContext.java:411)org.wso2.ApiInvocationHnadler.ApiInvocationHandler.handleRequest(ApiInvocationHandler.java:35)at at Org.apache.synapse.rest.API.process(API.java:284)org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:83)org.apache.synapse.rest.RESTRequestHandler.process( RESTRequestHandler.java:64)org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220)org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83)at org org.wso2.carbon.core.multitenancy.MultitenantMessageReceive中的.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) r.processRESTRequest(MultitenantMessageReceiver.java:558)org.wso2.carbon.core.multitenancy.MultitenantMessageReceiver.doNhttpREST(MultitenantMessageReceiver.java:498)at org.wso2.carbon.core.multitenancy.MultitenantMessageReceiver.doREST(MultitenantMessageReceiver.java: 317)org.wso2.carbon.core.multitenancy.MultitenantMessageReceiver.processRequest(MultitenantMessageReceiver.java:210)org.wso2.carbon.core.multitenancy.MultitenantMessageReceiver.receive(MultitenantMessageReceiver.java:77)at org.apache.axis2 .engine.AxisEngine.receive(AxisEngine.java:180)org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:344)org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker) .java:168)在java.util的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)的org.apache.axis2.transport.base.threads.NativeWorkerPool $ 1.run(NativeWorkerPool.java:172) .concurrent.ThreadPoolExecutor $ Worker.run(Threa dPoolExecutor.java:603)在java.lang.Thread.run(Thread.java:722)

这是master-datasources.xml

<datasource>

<名称> TEST_DB </名称>
<description>用于</ description>的数据源
<jndiConfig>
<名称> JDBC / TEST_DB </名称>
</ jndiConfig>
<definition type =“RDBMS”>
<结构>
<URL> JDBC:MySQL的://本地主机:3306 / TEST_DB autoReconnect的=真</ URL>
<用户名>根</用户名>
<密码>根</密码>
<driverClassName> com.mysql.jdbc.Driver </ driverClassName>
<maxActive> 50 </ maxActive>
<MAXWAIT> 60000 </ MAXWAIT>
<testOnBorrow>真</ testOnBorrow>
<validationQuery> SELECT 1 </ validationQuery>
<validationInterval> 30000 </ validationInterval>
</配置>
</定义>
</数据源>

Java代码

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,“com.sun.jndi.rmi.registry.RegistryContextFactory”);
env.put(Context.PROVIDER_URL,“rmi:// localhost:2199”);
InitialContext ctx = new InitialContext(env);
DataSource ds =(DataSource)ctx.lookup(“jdbc / test_db”);

我如何解决这个问题?

2 回答

  • 0

    我想指出一个我用来创建该数据源的代码 . 你可以从here找到它 . 只需使用默认构造函数创建 InitialContext ,我可以从 master-datasources.xml 文件加载数据源 .

    dataSource =(DataSource)InitialContext.doLookup(dataSourceName);`

  • 0

    问题是由于租户流程,必须获得超级租户流并查找数据源

相关问题