ERROR : Data sync from oracle to solace with golden gate via jms handler

Owen
Owen Member Posts: 10
edited April 2021 in Connectors & Integrations #1

*Hi Experts,

I am new on solace and using oracle golden gate for bigdata JMS handler to sync message from oracle database to solace (docker)

I can receive message though the try me! module on topic topic/solace/q1

but after starting ogg replication process then met below can not found topic error, please kindly help suggestion.*

my properties configuration

gg.handlerlist=oggjms

#jndi setting
java.naming.provider.url=smf://132.3.32.2:55555
java.naming.factory.initial=com.solacesystems.jndi.SolJNDIInitialContextFactory
java.naming.security.principal=default@default
java.naming.security.credentials=default

#OGG JMS handler
gg.handler.oggjms.type=jms
gg.handler.oggjms.useJndi=true
gg.handler.oggjms.destinationType=topic
gg.handler.oggjms.destination=topic/solace/q1
gg.handler.oggjms.connectionFactory=/jms/cf/default
gg.handler.oggjms.localTX=false
gg.handler.oggjms.persistent=true
gg.handler.oggjms.mode=op
gg.handler.oggjms.format=json

gg.log.level=debug
gg.log=log4j

gg.classpath=/home/opc/ogg4bd/soljmslib/*

error message

INFO: Channel Closed (smfclient 5)
=ERROR 2021-04-20 08:35:51.000287 [main] - Problem sending JMS message via handler='oggjms
javax.naming.NameNotFoundException: JNDI lookup of "topic/solace/q1" failed - not found
        at com.solacesystems.jndi.SolJNDIInitialContextFactory$SolJNDIInitialContextImpl.lookup(SolJNDIInitialContextFactory.java:241) ~[sol-jms-10.10.0.jar:?]
        at javax.naming.InitialContext.lookup(InitialContext.java:417) ~[?:1.8.0_192]
        at javax.naming.InitialContext.lookup(InitialContext.java:417) ~[?:1.8.0_192]
        at oracle.goldengate.messaging.JMSSender.getProducer(JMSSender.java:716) ~[ggjms-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.messaging.JMSSender.sendTextMessage(JMSSender.java:550) ~[ggjms-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.send(JMSNgFormattedHandler.java:931) [ggjms-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.deliver(JMSNgFormattedHandler.java:824) [ggjms-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.messaging.handler.JMSNgFormattedHandler$RetryDelivery.action(JMSNgFormattedHandler.java:816) [ggjms-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.util.retry.RetryAction.execute(RetryAction.java:49) [ggutil-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.deliverMessage(JMSNgFormattedHandler.java:786) [ggjms-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.operationAdded(JMSNgFormattedHandler.java:729) [ggjms-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.datasource.DsEventManager$4.send(DsEventManager.java:450) [ggdbutil-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.datasource.DsEventManager.distributeEvent(DsEventManager.java:115) [ggdbutil-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.datasource.DsEventManager.fireOperationAdded(DsEventManager.java:459) [ggdbutil-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.datasource.AbstractDataSource.fireOperationAdded(AbstractDataSource.java:482) [ggdbutil-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.datasource.UserExitDataSource.addOperationToTransactionAndFireEvent(UserExitDataSource.java:2329) [ggdbutil-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.datasource.UserExitDataSource.createOperation(UserExitDataSource.java:1636) [ggdbutil-19.1.0.0.5.007.jar:19.1.0.0.5.007]
        at oracle.goldengate.datasource.UserExitDataSource.createOperation(UserExitDataSource.java:1393) [ggdbutil-19.1.0.0.5.007.jar:19.1.0.0.5.007]
=ERROR 2021-04-20 08:35:51.000288 [main] - JMSNgHandler faild with exception oracle.goldengate.util.GGException: Exception while attempting to deliver message: JNDI lookup of "topic/solace/q1" failed - not found
Apr 20, 2021 8:35:51 AM com.solacesystems.jndi.SolJNDIInitialContextFactory list
SEVERE: list is not supported
java.lang.Exception
        at com.solacesystems.jndi.SolJNDIInitialContextFactory$SolJNDIInitialContextImpl.list(SolJNDIInitialContextFactory.java:394)
        at javax.naming.InitialContext.list(InitialContext.java:461)
        at javax.naming.InitialContext.list(InitialContext.java:461)
        at oracle.goldengate.messaging.JMSSender.printInitialContext(JMSSender.java:427)
        at oracle.goldengate.messaging.JMSSender.getInitialContext(JMSSender.java:285)
        at oracle.goldengate.messaging.JMSSender.initialize(JMSSender.java:407)
        at oracle.goldengate.messaging.JMSSender.getTextMessage(JMSSender.java:506)
Tagged:

Best Answer

Answers

  • amackenzie
    amackenzie Member, Employee Posts: 260 Solace Employee
    #3 Answer ✓

    You need to add your Topic to the JNDI registry as JMS doesn't know how to find the endpoint without looking it up.

    The following should help:

    https://docs.solace.com/Configuring-and-Managing/Managing-Solace-JNDI-Objects.htm#mc-main-content

  • swenhelge
    swenhelge Member, Employee Posts: 77 Solace Employee

    There also seems to be an option to avoid JNDI lookups in the Oracle GG JMS adapter ... that may mean you can avoid setting up the JNDI entries - gg.handler.name.useJndi

    "Set to false, then JNDI is not used to configure the JMS client. Instead, factories and connections are explicitly constructed."

    https://docs.oracle.com/en/middleware/goldengate/big-data/19.1/gadbd/using-jms-handler.html#GUID-9B7F0892-DE5B-4098-9567-D965714A32A4

  • Owen
    Owen Member Posts: 10

    thanks @amackenzie @swenhelge
    the "can not found topic error" has be fixed after configure JNDI registry and solace can receive message from ogg. and keep gg.handler.oggjms.useJndi=true
    but another error "SEVERE: list is not supported" still there. what cause this issue and how to fix it . though this not impact push message so far

    Apr 21, 2021 9:27:14 AM com.solacesystems.jndi.SolJNDIInitialContextFactory list
    SEVERE: list is not supported
    java.lang.Exception
            at com.solacesystems.jndi.SolJNDIInitialContextFactory$SolJNDIInitialContextImpl.list(SolJNDIInitialContextFactory.java:394)
            at javax.naming.InitialContext.list(InitialContext.java:461)
            at javax.naming.InitialContext.list(InitialContext.java:461)
            at oracle.goldengate.messaging.JMSSender.printInitialContext(JMSSender.java:427)
            at oracle.goldengate.messaging.JMSSender.getInitialContext(JMSSender.java:285)
            at oracle.goldengate.messaging.JMSSender.initialize(JMSSender.java:407)
            at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.initJmsSender(JMSNgFormattedHandler.java:945)
            at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.init(JMSNgFormattedHandler.java:651)
            at oracle.goldengate.datasource.AbstractDataSource.addDataSourceListener(AbstractDataSource.java:592)
            at oracle.goldengate.datasource.factory.DataSourceFactory.getDataSource(DataSourceFactory.java:161)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
            at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    
    
  • Owen
    Owen Member Posts: 10

    thanks @amackenzie @swenhelge
    the "can not found topic error" has be fixed after configure JNDI registry and solace can receive message from ogg. and keep gg.handler.oggjms.useJndi=true
    but another error "SEVERE: list is not supported" still there. what cause this issue and how to fix it . though this not impact push message so far

    Apr 21, 2021 9:27:14 AM com.solacesystems.jndi.SolJNDIInitialContextFactory list
    SEVERE: list is not supported
    java.lang.Exception
            at com.solacesystems.jndi.SolJNDIInitialContextFactory$SolJNDIInitialContextImpl.list(SolJNDIInitialContextFactory.java:394)
            at javax.naming.InitialContext.list(InitialContext.java:461)
            at javax.naming.InitialContext.list(InitialContext.java:461)
            at oracle.goldengate.messaging.JMSSender.printInitialContext(JMSSender.java:427)
            at oracle.goldengate.messaging.JMSSender.getInitialContext(JMSSender.java:285)
            at oracle.goldengate.messaging.JMSSender.initialize(JMSSender.java:407)
            at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.initJmsSender(JMSNgFormattedHandler.java:945)
            at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.init(JMSNgFormattedHandler.java:651)
            at oracle.goldengate.datasource.AbstractDataSource.addDataSourceListener(AbstractDataSource.java:592)
            at oracle.goldengate.datasource.factory.DataSourceFactory.getDataSource(DataSourceFactory.java:161)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
            at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBea
    nFactory.java:1178)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.ja
    va:1072)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511
    )
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
            at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1080)
            at oracle.goldengate.datasource.DataSourceLauncher.<init>(DataSourceLauncher.java:168)
            at oracle.goldengate.datasource.UserExitMain.main(UserExitMain.java:124)
    
  • Owen
    Owen Member Posts: 10

    thanks @amackenzie @swenhelge
    the "can not found topic error" has be fixed after configure JNDI registry and solace can receive message from ogg. and keep gg.handler.oggjms.useJndi=true
    but another error "SEVERE: list is not supported" still there. what cause this issue and how to fix it . though this not impact push message so far

    Apr 21, 2021 9:27:14 AM com.solacesystems.jndi.SolJNDIInitialContextFactory list
    SEVERE: list is not supported
    java.lang.Exception
            at com.solacesystems.jndi.SolJNDIInitialContextFactory$SolJNDIInitialContextImpl.list(SolJNDIInitialContextFactory.java:394)
            at javax.naming.InitialContext.list(InitialContext.java:461)
            at javax.naming.InitialContext.list(InitialContext.java:461)
            at oracle.goldengate.messaging.JMSSender.printInitialContext(JMSSender.java:427)
            at oracle.goldengate.messaging.JMSSender.getInitialContext(JMSSender.java:285)
            at oracle.goldengate.messaging.JMSSender.initialize(JMSSender.java:407)
            at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.initJmsSender(JMSNgFormattedHandler.java:945)
            at oracle.goldengate.messaging.handler.JMSNgFormattedHandler.init(JMSNgFormattedHandler.java:651)
            at oracle.goldengate.datasource.AbstractDataSource.addDataSourceListener(AbstractDataSource.java:592)
            at oracle.goldengate.datasource.factory.DataSourceFactory.getDataSource(DataSourceFactory.java:161)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
            at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBea
    nFactory.java:1178)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.ja
    va:1072)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511
    )
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481)
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
            at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1080)
            at oracle.goldengate.datasource.DataSourceLauncher.<init>(DataSourceLauncher.java:168)
            at oracle.goldengate.datasource.UserExitMain.main(UserExitMain.java:124)
    
  • amackenzie
    amackenzie Member, Employee Posts: 260 Solace Employee

    Hi. I am looking into this exception but it looks to me like there is a JNDI API (list()) that we don't support and throw when we see it. The JNDI built into the Solace broker is tuned to the needs of using messaging on the brokers. Not all JNDI features may be implemented.

    In looking at this method from the JNDI spec, I wonder why Oracle GG needs to list all classes from the registry anyway. The JMSSender.printInitialContext() seems to be the culprit. I am not sure why it would need a list of classes when you have already told it what Topic is being published to in the config.

    I will update this thread when I get feedback from our dev team but it looks like it's working for you and this is only an issue for your logs.

  • Owen
    Owen Member Posts: 10

    Hi @amackenzie thanks for update.
    I am referencing this oracle doc Using the Java Message Service Handler .BTW I also tried ActiveMQ with OGG JMS handler there is no such similar error.