Thanks Russ. Yes, we are doing exactly the same thing.
driverClass = context.getProperty(DRIVER_CLASS).getValue();
queueName = context.getProperty(QUEUE_NAME).getValue();
databaseSchema = context.getProperty(DATABASE_SCHEMA).getValue();
consumerName = context.getProperty(CONSUMER_NAME).getValue();
eventName = context.getProperty(EVENT_NAME).getValue();
DBCPService connection =
context.getProperty(JDBC_CONNECTION_POOL).asControllerService(DBCPService.class);
Connection conn = connection.getConnection();
* aqSession = AQDriverManager.createAQSession(connection);*
The underlined code above fails as it does not like the connection object
that is returned by the DBCPService.
Regards
Anil
On Tue, Mar 14, 2017 at 2:43 PM, Russell Bateman <[email protected]>
wrote:
> Anil,
>
> Typically, your custom processor should have a property, something like
>
> public static final PropertyDescriptor DBCP_SERVICE = new
> PropertyDescriptor.Builder()
> .name("Database Connection Pooling Service")
> .description("The Controller Service that is used to obtain
> connection to database")
> .required(true)
> .identifiesControllerService(DBCPService.class)
> .build();
>
> When your NiFi user sets up the flow, he or she puts a reference to NiFi's
> DBCPConnectionPool in it. In configuring that (a ControllerService, you
> tell it that it's Oracle, location, etc.)
>
> Then, your onTrigger() code would do something like this:
>
> final DBCPService dbcpService = context.getProperty(DBCP_SERVI
> CE).asControllerService(DBCPService.class);
>
>
> and later...
>
>
> try (final Connection connection = dbcpService.getConnection())
> {
> try (final Statement stmt =
> connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,
> ResultSet.CONCUR_READ_ONLY))
>
> etc.
>
> Does this help?
>
> Russ
>
>
>
> On 03/14/2017 11:54 AM, Anil Rai wrote:
>
>> We have a use case to connect to oracle database and subscribe to Advanced
>> Queuing (https://docs.oracle.com/cd/A58617_01/server.804/a58241/ch_aq.htm
>> ).
>> Below is the java snippet to establish this connection from a java client.
>> We can run this in eclipse and consume message from the advanced queue.
>> **************
>> Class.forName("oracle.jdbc.driver.OracleDriver");
>> connection = DriverManager.getConnection("
>> jdbc:oracle:thin:@xxx-yyy.zzz.com:1521/DB1","user", "pwd");
>> connection.setAutoCommit(true);
>> Class.forName("oracle.AQ.AQOracleDriver");
>> aqSession = AQDriverManager.createAQSession(connection);
>> System.out.println("AQ Session --->" + aqSession);
>> ********************
>>
>> We have created a custom processor in Nifi. This processor is getting the
>> connection string using getConnection function of Standard DBCP service.
>> The problem is, the connection object that is retrieved from eclipse
>> versus
>> what is returned from DBCP service is different. We have made sure we are
>> referring to the same jar both in eclipse and Nifi (ojdbc7.jar)
>> It fails @ aqSession = AQDriverManager.createAQSession(connection);
>> The connection object that comes from DBCP is not what is expected by
>> AQDriverManager.
>>
>> Any help is greatly appreciated.
>>
>> Thanks
>> Anil
>>
>>
>