OK.. So I attached the override to my route... but Camel execution now 
complains I do not have a valid DataSource:



public class MyRouteBuilder extends RouteBuilder {    @Override
    public void configure() throws Exception {
                 BasicDataSource basicDataSource = new BasicDataSource();
                 
basicDataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                 
basicDataSource.setUrl("jdbc:sqlserver://XXXXXX:52739;databaseName=XXXX;");
                 basicDataSource.setUsername("XXXX");
                 basicDataSource.setPassword("XXXXX");

                 SqlComponent sqlComponent = new SqlComponent();
                 sqlComponent.setDataSource(basicDataSource);

                 getContext().addComponent("psoft-sql", sqlComponent);


        from("mllp://XXXXXX:8888")
        .log("..Received HL7 message with control id 
${header.CamelMllpMessageControlId}")
        .convertBodyTo(String.class)
        .unmarshal()
        .hl7(false)
        .process(new Processor() {
          public void process(Exchange exchange) throws Exception {
          Message message = exchange.getIn().getBody(Message.class);
          ca.uhn.hl7v2.util.Terser terser = new Terser(message);
          String obx5 = terser.get("/.OBX-5-5");
          String EDMId = terser.get("/.OBR-3") + ".pdf";
          String voucher = terser.get("/.OBR-2");

          byte[] decoded = Base64.getDecoder().decode(obx5);
          exchange.getOut().setBody(decoded);
          exchange.getOut().setHeader("voucher", voucher);
          exchange.getOut().setHeader("CamelFileName", EDMId );
            }
          } )
       .log("..Processed voucher ${header.voucher} to file 
${header.CamelFileName}")
       .to("file:target/messages/others")
       .to("sql:INSERT INTO lawsonprod.PeopleSoftVCR (Voucher, Facility, image) 
VALUES ('12345', '1', 'something')?dataSource=#psoft-sql" )
       ;

    }

}


error is:
 No bean could be found in the registry for: psoft-sql of type: 
javax.sql.DataSource


    On Tuesday, July 31, 2018, 2:04:32 PM EDT, John F. Berry 
<[email protected]> wrote:  
 
 Nevermind... found to import org.apache.camel.component.sql.SqlComponent

On Tuesday, July 31, 2018, 1:27:58 PM EDT, John F. Berry 
<[email protected]> wrote: 

Also, in compiling in maven, it doesn't find "SQLComponent".  Isn't that part 
of camel-sql?  or am I configuring a different entity?

    On Tuesday, July 31, 2018, 12:29:49 PM EDT, John F. Berry 
<[email protected]> wrote:  


Sorry, that was a bit of an incomplete thought:
In another java IDE that came with a product of ours we use this driver:
com.microsoft.sqlserver.jdbc.SQLServerDriver
as well as this URI:
jdbc:sqlserver://blablabla:52739;databaseName=dbName;

So what is the choice of using a "derby" driver?  I cannot find a writeup about 
it.

On Tuesday, July 31, 2018, 12:17:09 PM EDT, John F. Berry <[email protected]> 
wrote: 

Thanks again Quinn,
What is the "derby" element in this solution?  I can't seem to find information 
in this in my searches.
I'm trying to analyze the parameter string in the .setURL line and the values 
within.

On Tuesday, July 31, 2018, 10:55:42 AM EDT, Quinn Stevenson 
<[email protected]> wrote: 

Forgot to mention to make sure that when you use this component, use the 
component name that you register it with - in this example I used “my-sql”.  

> On Jul 31, 2018, at 8:49 AM, Quinn Stevenson <[email protected]> 
> wrote:
> 
> There’s a few ways to go about this, but I’d probably start out with doing it 
> in the configure method of the RouteBuilder - something like the following 
> (note - I didn’t test this so I don’t even know if it compiles).
> 
> @Override
> public void configure() throws Exception {
>  BasicDataSource basicDataSource = new BasicDataSource();
>  basicDataSource.setDriverClassName("org.apache.derby.jdbc.EmbeddedDriver");
>  basicDataSource.setUrl("jdbc:derby:memory:orders;create=true");
>  basicDataSource.setUsername("");
>  basicDataSource.setPassword("");
> 
>  SqlComponent sqlComponent = new SqlComponent();
>  sqlComponent.setDataSource(basicDataSource);
>  
>  getContext().addComponent("my-sql", sqlComponent);
>  
>  from()
>      ... 
> }
> HTH
> 
>> On Jul 30, 2018, at 9:45 AM, John F. Berry <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Thanks Quinn for the helping hand.
>> 
>> I've been looking for examples of how to declare the servername/instance 
>> name, username password to utilize a MS SQL endpoint.  Looking at the Apache 
>> Camel: SQL Component page, it shows utilizing  the declared object like 
>> "mydbconnection" that is the named DataSource option, and shows all on what 
>> you can throw through that connection... except seems to skip over how to 
>> specify connection criteria.  It does reference the DataSource option as a 
>> pointer to look up in the "registry" but I don't know if that is an 
>> inherited existing entity it's talking about or the need to declare a new 
>> registry and import a form of camel registry or something.  The only 
>> examples where I've seen servername, un/pw declared in an example was in a 
>> Spring one.  I don't know if we want to "un-translate" a Spring example, but 
>> point me in the direction of where I should natively set these things in 
>> Java DSL.  The above mentioned page even says "This component uses 
>> spring-jdbc behind the scenes for the actual SQL handling", so I figured 
>> that is why I cannot seem to get away from Spring.
>> When I look at the Apache Camel: SQL Example( 
>> http://camel.apache.org/sql-example.html 
>> <http://camel.apache.org/sql-example.html> )  page, it talks about "In the 
>> camel-context.xml file in the src/main/resources/META-INF/spring folder we 
>> have the Spring XML file to setup and configure the database" 
>> 
>> I see connection parameters set like in this other example:
>> 
>> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" 
>> destroy-method="close"> 
>> < property  name = "driverClassName"  value = 
>> "org.apache.derby.jdbc.EmbeddedDriver" /> 
>> 
>> < property  name = "url"  value = "jdbc:derby:memory:orders;create=true" /> 
>> 
>> < property  name = "username"  value = "" /> 
>> 
>> < property  name = "password"  value = "" /> 
>> 
>> </bean>
>> 
>>    
>> but not declared in the Java DSL, if that's even possible.. Perhaps 
>> .setheaders() ?  but then.. what are the paramater names?
>> 
>> 
>> Sorry.. I know it's a bit of a "thrashing" response...
>> 
>> 
>> 
>> On Monday, July 30, 2018, 10:43:34 AM EDT, Quinn Stevenson 
>> <[email protected] <mailto:[email protected]>> wrote: 
>> 
>> 
>> 
>> 
>> 
>> From my experience, I’ve always been able to to more with the Java DSL than 
>> with Spring.  I think routes written using the Spring XML are easier to read 
>> than routes written the Java DSL, but that’s just me.
>> 
>> If you could post you’re Spring XML that you’re trying to translate, I’m 
>> sure we can help with that.
>> 
>>> On Jul 30, 2018, at 8:00 AM, John F. Berry <[email protected] 
>>> <mailto:[email protected]>> wrote:

>>> 
>>> I've been perusing ways to declare connection to a MS SQL server.  There 
>>> are plenty of Spring examples.. but how about Java DSL?  I have been 
>>> attempting to utilizing the JDBC endpoint provided though camel-sql.. but I 
>>> cannot seem to either find documentation of how to place a configuration 
>>> file with an unknown name in an unknown location in the project, or declare 
>>> it in-line.  Been looking at setting it first in the "camel registry", but 
>>> no luck so far.  
>>> I did not include any code, since I have nothing functional or "in 
>>> progress" to show for my efforts.  I'm not to the point I need to form any 
>>> sort of SQL statement yet, since I cannot establish a connection.It seems 
>>> so simple, but I cannot find how to simply declare server:port, un/pw 
>>> without bringing a Spring context into the mix.  If that is needed to 
>>> satisfy the camel vanilla SQL endpoint needs, how do I tie that into the 
>>> Java DSL route I've already got going?  I went the Java DSL route simply 
>>> because some other endpoints didn't have a straight forward Camel Spring 
>>> solution to them.  Is this mixed environment normal?  Is there really not a 
>>> choice to keep a route "clean" in one coding style or the other?
>>> Thanks!
>    

Reply via email to