Helidon-MP启用UCP连接时启动出现ONS服务器超时问题咨询
Helidon-MP中UCP连接的ONS服务器超时问题处理
在Helidon-MP环境启用UCP连接时,服务器启动会出现ONS超时警告,但API仍能正常通过UCP连接数据库。
已引入的依赖(pom.xml)
<dependency> <groupId>io.helidon.integrations.cdi</groupId> <artifactId>helidon-integrations-cdi-datasource-ucp</artifactId> </dependency>
配置参数(microprofile-config.properties)
oracle.ucp.jdbc.PoolDataSource.ds1.connectionFactoryClassName=oracle.jdbc.pool.OracleDataSource
oracle.ucp.jdbc.PoolDataSource.ds1.URL=jdbc:oracle:thin:@walletName
oracle.ucp.jdbc.PoolDataSource.ds1.user=db_user
oracle.ucp.jdbc.PoolDataSource.ds1.password=passwordxyz
oracle.net.tns_admin=wallet file location
启动时的警告信息
2023.08.24.15:22:55 | WARN | oracle.ucp | :::failed to start ONS: Server time out 2023.08.24.15:22:55 | WARN | oracle.ucp | :::failed to start ONS with the following exception: [oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:379), oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:347), oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:361), oracle.ucp.common.ONSDriver.start(ONSDriver.java:113), oracle.ucp.common.Topology.onsDriver(Topology.java:531), oracle.ucp.common.CoreConnectionImpl.<init>(CoreConnectionImpl.java:110), oracle.ucp.common.CoreConnectionImpl.create(CoreConnectionImpl.java:76), oracle.ucp.common.Service.create(Service.java:890), oracle.ucp.common.Service.create(Service.java:617), oracle.ucp.common.Topology.create(Topology.java:164), oracle.ucp.common.Core.growBorrowed(Core.java:1254), oracle.ucp.common.UniversalConnectionPoolImpl.helpGrowBorrowed(UniversalConnectionPoolImpl.java:407), oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionWithoutCountingRequests(UniversalConnectionPoolImpl.java:350), oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionAndValidateHelper(UniversalConnectionPoolImpl.java:206), oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionAndValidate(UniversalConnectionPoolImpl.java:166), oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnection(UniversalConnectionPoolImpl.java:139), oracle.ucp.jdbc.JDBCConnectionPool.borrowConnection(JDBCConnectionPool.java:185), oracle.ucp.jdbc.oracle.OracleJDBCConnectionPool.borrowConnection(OracleJDBCConnectionPool.java:611), oracle.ucp.jdbc.oracle.OracleConnectionConnectionPool.borrowConnection(OracleConnectionConnectionPool.java:119), oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:1856), oracle.ucp.jdbc.PoolDataSourceImpl.access$300(PoolDataSourceImpl.java:223), oracle.ucp.jdbc.PoolDataSourceImpl$3.build(PoolDataSourceImpl.java:3999), oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:1801), oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:1756), oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:1742), java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method), java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62), java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43), java.base/java.lang.reflect.Method.invoke(Method.java:566), org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38), org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:106), oracle.ucp.UniversalConnectionPoolAdapter$CommonDataSource$DataSource$ObjectFactory$PoolDataSource$Referenceable$Serializable$Wrapper$$Proxy$_$$_WeldClientProxy.getConnection(Unknown Source), io.helidon.integrations.jta.jdbc.JtaDataSource.getConnection(JtaDataSource.java:571), io.helidon.integrations.jta.jdbc.JtaDataSource.getConnection(JtaDataSource.java:392), org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122), org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:181), org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68), org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35), org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101), org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:272), org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:246), org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:223), org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:175), org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:295), org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:252), org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:223), org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:173), org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:127), org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460), org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494), org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:141), org.hibernate.jpa.HibernatePersistenceProvider$Proxy$_$$_WeldClientProxy.createContainerEntityManagerFactory(Unknown Source), io.helidon.integrations.cdi.jpa.EntityManagerFactories.createContainerManagedEntityManagerFactory(EntityManagerFactories.java:189), io.helidon.integrations.cdi.jpa.JpaExtension.lambda$addContainerManagedEntityManagerFactoryBeans$1(JpaExtension.java:1104), org.jboss.weld.bootstrap.events.configurator.BeanConfiguratorImpl$CreateCallback.create(BeanConfiguratorImpl.java:372), org.jboss.weld.bootstrap.events.configurator.BeanConfiguratorImpl$CreateCallback.access$700(BeanConfiguratorImpl.java:339), org.jboss.weld.util.Observers.notify(Observers.java:166), org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:285), org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:273), org.jboss.weld.event.EventImpl.fire(EventImpl.java:96), io.helidon.microprofile.cdi.HelidonContainerImpl.doStart(HelidonContainerImpl.java:341), io.helidon.common.context.Contexts.runInContext(Contexts.java:137), io.helidon.microprofile.cdi.HelidonContainerImpl.start(HelidonContainerImpl.java:251), io.helidon.microprofile.server.ServerImpl.start(ServerImpl.java:76), com.oracle.retail.rsc.ipo.Application.init(Application.java:56), com.oracle.retail.rsc.ipo.Application.main(Application.java:44)]
问题分析与解决
ONS(Oracle Notification Service)是UCP用于监听数据库事件(如节点故障)的组件,该警告说明UCP尝试连接ONS服务器超时,但不影响基础数据库连接,因此API仍能正常工作。
可通过以下方式消除警告:
- 禁用ONS:在
microprofile-config.properties中添加配置强制关闭ONS功能:oracle.ucp.jdbc.PoolDataSource.ds1.onsConfiguration=ons_disabled=true - 配置正确ONS地址:若需使用ONS功能,检查并配置正确的ONS服务器地址:
oracle.ucp.jdbc.PoolDataSource.ds1.onsConfiguration=ons_address=host:port - 检查网络连通性:启用ONS时,确保应用服务器能访问ONS服务器端口(默认6200),验证防火墙、网络策略是否允许通信。
内容的提问来源于stack exchange,提问作者nagesha c
相关产品推荐
相关产品推荐

