Fantastic.  Thank you very much.

Brad

On Fri, Apr 8, 2016 at 11:06 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:

> Hi
>
> I logged a ticket
> https://issues.apache.org/jira/browse/CAMEL-9843
>
> And did a quick first implementation, a few things to irony out
>
> https://github.com/apache/camel/commit/18f3e27d847abe2fc39cc66cc4edd230cbecfc83
>
> But it shows how you can setup it in a splitter with streaming mode.
>
>
>
>
> On Fri, Apr 8, 2016 at 1:41 AM, Ranx <brad.john...@mediadriver.com> wrote:
> > Claus,
> > Please forgive all the @ in here as that was the only way I could post
> this
> > to get around the spam filter.
> >
> > Just to get this working for me so I can start refactoring my code to
> accept
> > and process individual items from the unmarshaling of the multi-line
> beanio
> > beans I hacked this bit of code.  I don't want to use it but it let's me
> > proceed until I can get something like this to work with the Camel file
> > endpoint.
> >
> > As you can see I'm injecting a seda queue in here to drop the individual
> > items on and a directory w@tcher to w@tch for incoming files.  My unit
> test
> > copies a file over into the directory and I can see the results.  I have
> to
> > put the exclusive lock mechanics in there or the bean reader would try to
> > read the file before it was truly available.  But I don't want to
> replicate
> > all the mechanics that are already baked in and hardened in the Camel
> File
> > endpoint.
> >
> > Doing it this way though changes this from a pull mechanism to a
> > push/publish mechanism that I prefer.
> >
> > I have a couple of questions about how I might proceed with this.  I'm
> fine
> > with reading the Beanio stream/definition from my blueprint bundle with
> > getResourceAsStream and foregoing the use of the Camel marsahaler itself.
> > If I do that, what mecahnics would I use to get a notification from the
> File
> > endpoint that a new file has been dropped into the directory.  Just a
> > standard Camel Processor?
> >
> > You'd mentioned an iterator/reader object and noticed some in the BeanIO
> > code itself but I don't think I saw anything in Camel itself.
> >
> > I did try just chunking the raw text but the problem with that is if I
> read
> > in a chunk of 100 records the 100th might well fall in the middle of a
> > record.
> >
> > Thanks for any insights.
> >
> > @EndpointInject(uri = "seda:process")
> >         private ProducerTemplate process;
> >
> >         Logger logger = Logger.getLogger(AHSBatchReader.class);
> >
> >         private StreamFactory factory;
> >         private w@tchService w@tcher;
> >         Path dir;
> >
> >         public void init() throws IOException {
> >                 logger.info("Starting stream factory...");
> >                 // create a StreamFactory
> >                 factory = StreamFactory.newInstance();
> >                 // load the mapping file...switch to use
> getResourceAsStream from bundle.
> >
>  factory.load("src/main/resources/dataformats/beanio-ahs-in.xml");
> >
> >                 w@tcher = FileSystems.getDefault().neww@tchService();
> >                 dir = FileSystems.getDefault().getPath("/test/in");
> >                 dir.register(w@tcher, ENTRY_CREATE, ENTRY_DELETE,
> ENTRY_MODIFY);
> >                 new Thread(this).start();
> >         }
> >
> >         public void run() {
> >                 while (true) {
> >                         w@tchKey key;
> >                         try {
> >                                 key = w...@tcher.take();
> >
> >                                 for (w@tchEvent<?> event :
> key.pollEvents()) {
> >                                         w...@tchevent.kind kind =
> event.kind();
> >                                         w@tchEvent<Path> ev =
> cast(event);
> >                                         Path name = ev.context();
> >                                         Path child = dir.resolve(name);
> >
> >                                         // print out event
> >                                         System.out.format("%s: %s\n",
> event.kind().name(), child);
> >                                         if (event.kind() ==
> ENTRY_MODIFY) {
> >                                                 File file =
> child.toFile();
> >                                                 boolean
> exclusivelyLocked = false;
> > //Get an exclusive lock on the file if we can.  If we can't then the
> system
> > is still using and it we delay start of beanio reading.
> >                                                 while
> (!exclusivelyLocked) {
> >                                                         try {
> >
>  FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
> >                                                                 FileLock
> lock = null;
> >                                                                 try {
> >
>  lock = channel.tryLock();
> >
> >
>  System.out.println(lock);
> >
>  System.out.println(lock.isShared());
> >
>  System.out.println(lock.isValid());
> >
>  exclusivelyLocked = lock.isValid() && !lock.isShared();
> >                                                                 } catch
> (Exception e) {
> >
>  // File is open by someone else
> >
>  Thread.sleep(500);
> >                                                                 }
> > //Release them now so that Beanio can grab them.
> >
>  lock.close();
> >
>  channel.close();
> >                                                         } catch
> (Exception e) {
> >                                                         }
> >                                                 }
> > //Start processing the beanio stream.
> >                                                 execute(file);
> >
> >                                         }
> >                                 }
> >
> >                         } catch (InterruptedException x) {
> >                         }
> >                 }
> >
> >         }
> >
> >         @SuppressWarnings("unchecked")
> >         static <T> w@tchEvent<T> cast(w@tchEvent<?> event) {
> >                 return (w@tchEvent<T>) event;
> >         }
> >
> >         private void execute(File file) {
> >
> >                 BeanReader in = factory.createReader("myInputStream",
> > file.getAbsoluteFile());
> >                 Object o;
> >                 while ((o = in.read()) != null) {
> >                         //Send these to the SEDA queue
> >                         process.sendBody(o);
> >                 }
> >
> >                 in.close();
> >                 file.delete();
> >
> >         }
> >
> > }
> >
> >
> >
> >
> > --
> > View this message in context:
> http://camel.465427.n5.nabble.com/Beanio-stream-tp5780468p5780717.html
> > Sent from the Camel - Users mailing list archive at Nabble.com.
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
>

Reply via email to