2 Replies Latest reply on Apr 25, 2019 4:09 PM by dines

    Active Directory Datasource

    dines

      Hi all.

       

      I'm in the process of setting up a Teiid server between two domains, such that it can perform analysis of users and permissions between the two domains. The installation went well, but I have been unable to actually establish a connection to the domain controllers.

       

      Windows 2012 R2

      Wildfly with Teiid 11.2

      Teiid Development Studio 11.2.1

       

      Within the development studio I am able to ping the servers, as well as build the source model. I have created the following resource adapter:

       

                      <resource-adapter id="PlantModel">
                          <module slot="main" id="org.jboss.teiid.resource-adapter.ldap"/>
                          <transaction-support>NoTransaction</transaction-support>
                          <connection-definitions>
                              <connection-definition class-name="org.teiid.resource.adapter.ldap.LDAPManagedConnectionFactory" jndi-name="java:/PlantModel" enabled="true" pool-name="PlantModel">
                                  <config-property name="LdapAdminUserDN">
                                      Domain/Account
                                  </config-property>
                                  <config-property name="LdapContextFactory">
                                      com.sun.jndi.ldap.LdapCtxFactory
                                  </config-property>
                                  <config-property name="LdapAdminUserPassword">
                                      Password
                                  </config-property>
                                  <config-property name="LdapUrl">
                                      ldaps://DomainControllerHost:389
                                  </config-property>
                              </connection-definition>
                          </connection-definitions>
                      </resource-adapter>
      

       

      Where Domain\Account is a valid service account for the domain in question. When I attempt to actually extract data from the tables, I get the following errors:

       

      20:15:39,114 WARN  [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (Worker3_QueryProcessorQueue8) OVrt7m+ZAvT2 IJ000604: Throwable while attempting to get a new connection: null: javax.resource.ResourceException: Initializing LDAP directory context failed. Please check LDAP connection properties, including username and password: simple bind failed: DomainControllerHost:389
      at org.teiid.resource.adapter.ldap.LDAPConnectionImpl.initializeLDAPContext(LDAPConnectionImpl.java:151)
      at org.teiid.resource.adapter.ldap.LDAPConnectionImpl.<init>(LDAPConnectionImpl.java:78)
      at org.teiid.resource.adapter.ldap.LDAPManagedConnectionFactory$1.getConnection(LDAPManagedConnectionFactory.java:45)
      at org.teiid.resource.adapter.ldap.LDAPManagedConnectionFactory$1.getConnection(LDAPManagedConnectionFactory.java:39)
      at org.teiid.resource.spi.BasicManagedConnectionFactory.createManagedConnection(BasicManagedConnectionFactory.java:67)
      at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.createConnectionEventListener(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:1327)
      at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:499)
      at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:632)
      at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:604)
      at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:624)
      at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:597)
      at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:789)
      at org.teiid.resource.spi.WrappedConnectionFactory.getConnection(WrappedConnectionFactory.java:54)
      at org.teiid.translator.ExecutionFactory.getConnection(ExecutionFactory.java:180)
      at org.teiid.translator.ExecutionFactory.getConnection(ExecutionFactory.java:201)
      at org.teiid.dqp.internal.datamgr.ConnectorWorkItem.execute(ConnectorWorkItem.java:354)
      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.teiid.dqp.internal.datamgr.ConnectorManager$1.invoke(ConnectorManager.java:229)
      at com.sun.proxy.$Proxy37.execute(Unknown Source)
      at org.teiid.dqp.internal.process.DataTierTupleSource.getResults(DataTierTupleSource.java:302)
      at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:108)
      at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:104)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at org.teiid.dqp.internal.process.FutureWork.run(FutureWork.java:61)
      at org.teiid.dqp.internal.process.DQPWorkContext.runInContext(DQPWorkContext.java:278)
      at org.teiid.dqp.internal.process.ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:115)
      at org.teiid.dqp.internal.process.ThreadReuseExecutor$3.run(ThreadReuseExecutor.java:206)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at java.lang.Thread.run(Thread.java:748)
      Caused by: javax.naming.CommunicationException: simple bind failed: <DomainController>:389 [Root exception is java.net.SocketException: Connection reset]
      at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:219)
      at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2791)
      at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:319)
      at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
      at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
      at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
      at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)
      at org.jboss.as.naming.InitialContext.getDefaultInitCtx(InitialContext.java:116)
      at org.jboss.as.naming.InitialContext.init(InitialContext.java:101)
      at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154)
      at org.jboss.as.naming.InitialContext.<init>(InitialContext.java:91)
      at org.jboss.as.naming.InitialContextFactory.getInitialContext(InitialContextFactory.java:43)
      at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
      at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
      at javax.naming.InitialContext.init(InitialContext.java:244)
      at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154)
      at org.teiid.resource.adapter.ldap.LDAPConnectionImpl.initializeLDAPContext(LDAPConnectionImpl.java:148)
      ... 32 more
      Caused by: java.net.SocketException: Connection reset
      at java.net.SocketInputStream.read(SocketInputStream.java:210)
      at java.net.SocketInputStream.read(SocketInputStream.java:141)
      at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
      at sun.security.ssl.InputRecord.read(InputRecord.java:503)
      at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
      at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
      at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:750)
      at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
      at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
      at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
      at com.sun.jndi.ldap.Connection.writeRequest(Connection.java:443)
      at com.sun.jndi.ldap.Connection.writeRequest(Connection.java:416)
      at com.sun.jndi.ldap.LdapClient.ldapBind(LdapClient.java:359)
      at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:214)
      ... 48 more
      
      
      20:15:39,145 WARN  [org.teiid.CONNECTOR] (Worker3_QueryProcessorQueue8) OVrt7m+ZAvT2 Connector worker process failed for atomic-request=OVrt7m+ZAvT2.0.0.0: org.teiid.translator.TranslatorException: TEIID60000 javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/PlantModel
      at org.teiid.translator.ExecutionFactory.getConnection(ExecutionFactory.java:182)
      at org.teiid.translator.ExecutionFactory.getConnection(ExecutionFactory.java:201)
      at org.teiid.dqp.internal.datamgr.ConnectorWorkItem.execute(ConnectorWorkItem.java:354)
      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.teiid.dqp.internal.datamgr.ConnectorManager$1.invoke(ConnectorManager.java:229)
      at com.sun.proxy.$Proxy37.execute(Unknown Source)
      at org.teiid.dqp.internal.process.DataTierTupleSource.getResults(DataTierTupleSource.java:302)
      at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:108)
      at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:104)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at org.teiid.dqp.internal.process.FutureWork.run(FutureWork.java:61)
      at org.teiid.dqp.internal.process.DQPWorkContext.runInContext(DQPWorkContext.java:278)
      at org.teiid.dqp.internal.process.ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:115)
      at org.teiid.dqp.internal.process.ThreadReuseExecutor$3.run(ThreadReuseExecutor.java:206)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at java.lang.Thread.run(Thread.java:748)
      Caused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/PlantModel
      at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:690)
      at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:597)
      at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:789)
      at org.teiid.resource.spi.WrappedConnectionFactory.getConnection(WrappedConnectionFactory.java:54)
      at org.teiid.translator.ExecutionFactory.getConnection(ExecutionFactory.java:180)
      ... 19 more
      Caused by: javax.resource.ResourceException: Initializing LDAP directory context failed. Please check LDAP connection properties, including username and password: simple bind failed: <DomainController>:389
      at org.teiid.resource.adapter.ldap.LDAPConnectionImpl.initializeLDAPContext(LDAPConnectionImpl.java:151)
      at org.teiid.resource.adapter.ldap.LDAPConnectionImpl.<init>(LDAPConnectionImpl.java:78)
      at org.teiid.resource.adapter.ldap.LDAPManagedConnectionFactory$1.getConnection(LDAPManagedConnectionFactory.java:45)
      at org.teiid.resource.adapter.ldap.LDAPManagedConnectionFactory$1.getConnection(LDAPManagedConnectionFactory.java:39)
      at org.teiid.resource.spi.BasicManagedConnectionFactory.createManagedConnection(BasicManagedConnectionFactory.java:67)
      at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.createConnectionEventListener(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:1327)
      at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:499)
      at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getSimpleConnection(AbstractPool.java:632)
      at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:604)
      at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:624)
      ... 23 more
      Caused by: javax.naming.CommunicationException: simple bind failed: <DomainController>:389 [Root exception is java.net.SocketException: Connection reset]
      at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:219)
      at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2791)
      at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:319)
      at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192)
      at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210)
      at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153)
      at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83)
      at org.jboss.as.naming.InitialContext.getDefaultInitCtx(InitialContext.java:116)
      at org.jboss.as.naming.InitialContext.init(InitialContext.java:101)
      at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154)
      at org.jboss.as.naming.InitialContext.<init>(InitialContext.java:91)
      at org.jboss.as.naming.InitialContextFactory.getInitialContext(InitialContextFactory.java:43)
      at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
      at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
      at javax.naming.InitialContext.init(InitialContext.java:244)
      at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154)
      at org.teiid.resource.adapter.ldap.LDAPConnectionImpl.initializeLDAPContext(LDAPConnectionImpl.java:148)
      ... 32 more
      Caused by: java.net.SocketException: Connection reset
      at java.net.SocketInputStream.read(SocketInputStream.java:210)
      at java.net.SocketInputStream.read(SocketInputStream.java:141)
      at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
      at sun.security.ssl.InputRecord.read(InputRecord.java:503)
      at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
      at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
      at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:750)
      at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
      at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
      at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
      at com.sun.jndi.ldap.Connection.writeRequest(Connection.java:443)
      at com.sun.jndi.ldap.Connection.writeRequest(Connection.java:416)
      at com.sun.jndi.ldap.LdapClient.ldapBind(LdapClient.java:359)
      at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:214)
      ... 48 more
      
      
      20:15:39,165 WARN  [org.teiid.PROCESSOR] (Worker0_QueryProcessorQueue9) OVrt7m+ZAvT2 TEIID30020 Processing exception for request OVrt7m+ZAvT2.0 'TEIID30504 PlantModel: TEIID60000 javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/PlantModel'. Originally TeiidProcessingException 'Connection reset' SocketInputStream.java:210. Enable more detailed logging to see the entire stacktrace.
      20:15:39,524 INFO  [org.teiid.RUNTIME.VDBLifeCycleListener] (MSC service thread 1-4)  TEIID40120 VDB PREVIEW-511d572f-73bc-48a1-b150-a55c42127293.1.0.0 will be removed from the repository
      20:15:39,524 INFO  [org.teiid.RUNTIME.VDBLifeCycleListener] (MSC service thread 1-4)  TEIID40119 VDB PREVIEW-511d572f-73bc-48a1-b150-a55c42127293.1.0.0 removed from the repository
      20:15:39,556 INFO  [org.teiid.RUNTIME] (MSC service thread 1-4)  TEIID50026 VDB "PREVIEW-511d572f-73bc-48a1-b150-a55c42127293.1.0.0[PlantModel{PlantModel=PlantModel, ldap, java:/PlantModel}]" undeployed.
      20:15:39,587 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-4)  WFLYSRV0028: Stopped deployment PREVIEW-511d572f-73bc-48a1-b150-a55c42127293-vdb.xml (runtime-name: PREVIEW-511d572f-73bc-48a1-b150-a55c42127293-vdb.xml) in 63ms
      20:15:39,634 INFO  [org.jboss.as.repository] (management-handler-thread - 5)  WFLYDR0002: Content removed from location C:\Teiid\Servers\teiid-11.2.2\standalone\data\content\cf\67f7452b10c0b15472bac7fda069cce4c39869\content
      20:15:39,634 INFO  [org.jboss.as.server] (management-handler-thread - 5)  WFLYSRV0009: Undeployed "PREVIEW-511d572f-73bc-48a1-b150-a55c42127293-vdb.xml" (runtime-name: "PREVIEW-511d572f-73bc-48a1-b150-a55c42127293-vdb.xml")
      

       

      I suspect that Teiid is attempting to connect using my credentials, rather than the ones I've added for the resource adapter, but I cannot find a log file to validate this hypothesis.

       

      Best Wishes

      Dines Madsen

        • 1. Re: Active Directory Datasource
          rareddy

          No, it will use the credentials in the resource-adapter definition. It looks like from where the Teiid server is located it can not reach your AD. I suggest you use any other LDAP client on that machine to make sure it is reachable. May be you can start with pinging the AD server first.

          • 2. Re: Active Directory Datasource
            dines

            Hi Ramesh.

             

            Thank you for your reply. I am able to both ping and telnet the domain controller host on port 389 - So I am fairly it can be reached. Is there any additional logging I can enable to get additional hints?

             

            Best Wishes

            Dines Madsen