JNDI DB连接从WSO2数据源失败,但在context.xml中工作
我正在编写一个小型Web服务,它将数据持久化到数据库中。我正在使用WSO2应用服务器5.2.1和Oracle数据库XE 11g,并在Windows 7上进行开发/测试 当我在[AppServerHome]/repository/conf/tomcat/context.xml中创建一个资源时,代码是有效的。相反,当我在管理控制台下创建一个数据源并将其作为JNDI数据源公开时,getConnection调用失败,并出现SQLException 如果我使用管理控制台中创建的数据源通过管理控制台创建数据服务,那么数据服务也可以工作。因此,这应该表明数据源是有效的和工作的 我尝试了jdbc url的不同变体: jdbc:oracle:thin:@localhost:1521:xe jdbc:oracle:thin:@localhost:1521/xe jdbc:oracle:thin:@localhost:1521:XE jdbc:oracle:thin:@localhost:1521/XE jdbc:oracle:thin:@localhost:1521:xe jdbc:oracle:thin:@localhost:1521/xe jdbc:oracle:thin:@localhost:1521:XE jdbc:oracle:thin:@localhost:1521/XE 我也尝试过检查“使用数据源工厂”选项,但并不真正了解它的功能。它也没有明显的效果 我试着按照当时的指示去做,但也没有效果 有人能解释为什么数据源不适用于webapp,而context.xml资源适用于webapp吗?我需要让数据源正常工作,以便在context.xml文件中没有纯文本密码,并且严格通过WSO2管理控制台管理数据源和密码 context.xml中有效的资源是:JNDI DB连接从WSO2数据源失败,但在context.xml中工作,wso2,wso2as,Wso2,Wso2as,我正在编写一个小型Web服务,它将数据持久化到数据库中。我正在使用WSO2应用服务器5.2.1和Oracle数据库XE 11g,并在Windows 7上进行开发/测试 当我在[AppServerHome]/repository/conf/tomcat/context.xml中创建一个资源时,代码是有效的。相反,当我在管理控制台下创建一个数据源并将其作为JNDI数据源公开时,getConnection调用失败,并出现SQLException 如果我使用管理控制台中创建的数据源通过管理控制台创建数据
<Resource name="jdbc/db1" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
maxActive="100" maxIdle="30" maxWait="10000"
url="jdbc:oracle:thin:@localhost:1521:xe"
username="user" password="aPasswordGoesHere"/>
我在管理控制台下创建的数据源包含以下信息:
Data Source Type: RDBMS
Name: MyDB
Data Source Provider: default
Driver: oracle.jdbc.OracleDriver
URL: jdbc:oracle:thin:@localhost:1521:xe
Username: user
Password: aPasswordGoesHere
Expose as a JNDI Data Source:
Name: jdbc/db1
Use Data Source Factory: unchecked
JNDI Properties: none set
Data Source Configuration Parameters:
(No changes made)
数据源类型:RDBMS
姓名:MyDB
数据源提供程序:默认值
驱动程序:oracle.jdbc.OracleDriver
URL:jdbc:oracle:thin:@localhost:1521:xe
用户名:user
密码:ApassWordGoesher
作为JNDI数据源公开:
名称:jdbc/db1
使用数据源工厂:未选中
JNDI属性:未设置
数据源配置参数:
(未作任何更改)
以及META-INF/context.xml中的匹配资源链接
<ResourceLink name="jdbc/db1" global="jdbc/db1" type="javax.sql.DataSource" />
用于获取数据源的代码是:
Connection conn;
try
{
DataSource ds;
Context ctx;
Object obj;
ctx = new InitialContext();
obj = ctx.lookup(jndiName);
ds = (DataSource) PortableRemoteObject.narrow(obj, DataSource.class);
conn = ds.getConnection();
}
catch (NamingException e)
{
throw new DBException("Failed to get data source from JNDI directory: " + e.getMessage(), e);
}
catch (SQLException e)
{
throw new DBException("Unable to get connection from connection pool: " + e.getMessage(), e);
}
连接接头;
尝试
{
数据源ds;
上下文ctx;
对象对象对象;
ctx=新的InitialContext();
obj=ctx.lookup(jndiName);
ds=(DataSource)PortableRemoteObject.窄带(obj,DataSource.class);
conn=ds.getConnection();
}
捕获(NamingE例外)
{
抛出新的DBException(“未能从JNDI目录获取数据源:”+e.getMessage(),e);
}
捕获(SQLE异常)
{
抛出新的DBException(“无法从连接池获取连接:”+e.getMessage(),e);
}
我在wso2carbon.xml中得到的错误是:
TID: [0] [AS] [2016-02-04 15:14:57,007] ERROR {POCDAO} - A DBException occurred {POCDAO}
DBException: Unable to get connection from connection pool: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
)
at JNDIConnectionDescriptor.getConnection(JNDIConnectionDescriptor.java:159)
at JNDIConnectionDescriptor.getConnectionRO(JNDIConnectionDescriptor.java:49)
at ConnectionManager.getConnectionRO(ConnectionManager.java:179)
at BaseDAO.getConnection(BaseDAO.java:66)
at server.POCServer.savePocs(POCServer.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
at org.apache.cxf.jaxws.JAXWSMethodInvoker.performInvocation(JAXWSMethodInvoker.java:66)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:232)
at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:85)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:74)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$2.run(ServiceInvokerInterceptor.java:126)
at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:131)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:180)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:293)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.wso2.carbon.statistics.webapp.RequestIntercepterValve.invoke(RequestIntercepterValve.java:43)
at org.wso2.carbon.bam.webapp.stat.publisher.WebAppStatisticPublisherValve.invoke(WebAppStatisticPublisherValve.java:104)
at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:178)
at org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
at org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:56)
at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:141)
at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:156)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:52)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at JNDIConnectionDescriptor.getConnection(JNDIConnectionDescriptor.java:97)
... 58 more
Caused by: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
... 61 more
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:275)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:264)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1452)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496)
... 68 more
TID:[0][AS][2016-02-04 15:14:57007]错误{POCDAO}-发生了数据库异常{POCDAO}
DBException:无法从连接池获取连接:无法创建PoolableConnectionFactory(侦听器拒绝了连接,出现以下错误:
ORA-12505,TNS:侦听器目前不知道连接描述符中给出的SID
)
位于JNDIConnectionDescriptor.getConnection(JNDIConnectionDescriptor.java:159)
在JNDIConnectionDescriptor.getConnectionRO(JNDIConnectionDescriptor.java:49)
在ConnectionManager.getConnectionRO(ConnectionManager.java:179)
在BaseDAO.getConnection(BaseDAO.java:66)
位于server.POCServer.savePocs(POCServer.java:47)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于org.apache.cxf.service.invoker.AbstractInvoker.PerformInvoke(AbstractInvoker.java:180)
位于org.apache.cxf.jaxws.JAXWSMethodInvoker.performInvoke(JAXWSMethodInvoker.java:66)
位于org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
位于org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:232)
位于org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:85)
位于org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:74)
位于org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于org.apache.cxf.interceptor.ServiceInvokerInterceptor$2.run(ServiceInvokerInterceptor.java:126)
位于org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
位于org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:131)
位于org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
位于org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
位于org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:251)
位于org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
位于org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
位于org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
位于org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:180)
位于org.apache.cxf.transport.servlet.AbstractHTTPServlet.HandlerRequest(AbstractHTTPServlet.java:293)
位于org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:212)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
位于org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:268)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationO