Archive for the ‘Development’ Category
Java CompletionService example
Friday, December 4th, 2020
Main.java
package com.lstierneyltd; public class Main { public static void main(String[] args) throws Exception { final CompletionServiceExample completionServiceExample = new CompletionServiceExample(); completionServiceExample.runDemo(); } }
CompletionServiceExample.java
package com.lstierneyltd; import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; public class CompletionServiceExample { private static final int NUMBER_OF_THREADS = 3; private final List<Callable<String>> callables = new ArrayList<>(); private final ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(NUMBER_OF_THREADS); public CompletionServiceExample() { initCallables(); } public void runDemo() throws Exception { final long startTime = System.currentTimeMillis(); processCallableTasks(); System.out.println("That took " + (System.currentTimeMillis() - startTime)/1000 + " seconds"); shutdownThreadPoolExecutor(); } private Callable<String> getCallable(int id) { final Callable<String> callable = () -> { System.out.println("Starting Callable " + id); final long taskStartTime = System.currentTimeMillis(); TimeUnit.MILLISECONDS.sleep(10000); System.out.println("CallableTask " + id + " took " + (System.currentTimeMillis() - taskStartTime)/1000 + " seconds"); return "Callable completed"; }; return callable; } private void initCallables() { callables.add(getCallable(1)); callables.add(getCallable(2)); callables.add(getCallable(3)); } private void processCallableTasks() throws InterruptedException, ExecutionException { final CompletionService<String> completionService = new ExecutorCompletionService<String>(threadPoolExecutor); for(Callable<String> callable : callables) { completionService.submit(callable); } int received = 0; while(received < NUMBER_OF_THREADS) { Future<String> resultFuture = completionService.take(); // blocks if none available String result = resultFuture.get(); System.out.println("Future done " + result); received++; } } private void shutdownThreadPoolExecutor() { threadPoolExecutor.shutdown(); try { if (!threadPoolExecutor.awaitTermination(800, TimeUnit.MILLISECONDS)) { threadPoolExecutor.shutdownNow(); } } catch (InterruptedException e) { threadPoolExecutor.shutdownNow(); } } }
Output
Starting Callable 1 Starting Callable 2 Starting Callable 3 CallableTask 3 took 10 seconds CallableTask 1 took 10 seconds CallableTask 2 took 10 seconds Future done Callable completed Future done Callable completed Future done Callable completed That took 10 seconds
Tags: java, threads
Posted in Development, Examples | No Comments »
Linux: Cowsay and Fortune
Sunday, October 4th, 2020
So I got a “new” laptop which onto which I’ve installed Ubuntu 20.04 LTS (Focal Fossa).
What’s the first thing I needing done? Docker? Node? Even plain old Java? Nope, Cowsay and Fortune!
Takes my login from
:~$
to
___________________________________ / Be security conscious -- National \ \ defense is at stake. / ----------------------------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || :~$
Oh and…
:~$ tail -1 ~/.bashrc fortune -s | cowsay
Tags: linux, ubuntu
Posted in quick tips | No Comments »
Oracle XML DB – extracting relational data using XMLTables
Wednesday, April 22nd, 2015
Background
So say you’ve got some XML in an XMLType table. You want to get the data into a “normal” relational table (maybe for faster reporting etc)
The XML looks like this:
<!-- this is one row in the XML table (xml_table) --> <mxrecords> <mxrecord> <sysurn></sysurn> <description></description> </mxrecord> <mxrecord> <sysurn></sysurn> <description></description> </mxrecord> <mxrecord> <sysurn></sysurn> <description></description> </mxrecord> </mxrecords> <!-- this is another row in the XML table --> <mxrecords> <mxrecord> <sysurn></sysurn> <description></description> </mxrecord> <mxrecord> <sysurn></sysurn> <description></description> </mxrecord> <mxrecord> <sysurn></sysurn> <description></description> </mxrecord> <mxrecord> <sysurn></sysurn> <description></description> </mxrecord> </mxrecords>
The relational table looks like this:
create table reporting( sysurn varchar2(50), description varchar2(4000) );
Lets rip the XML into the relational table:
insert into reporting select mxrecord.* from xml_table xt, XMLTABLE( '/mxrecords/mxrecord' passing xt.OBJECT_VALUE columns mxrecord XMLTYPE PATH '/mxrecord') mxrecords, XMLTABLE( '/mxrecord' passing mxrecords.mxrecord columns sysurn varchar2(50) PATH '/mxrecord/sysurn', description varchar2(4000) PATH '/mxrecord/description') mxrecord
Tags: oracle, xml, xmldb, xmltable, xmltype
Posted in How to's, Oracle | No Comments »
Oracle XML DB – Inserting XML
Friday, March 20th, 2015
Background
So following on from my previous post about creating XMLType tables in Oracle (either CLOB or schema based), here’s a few quick notes on getting data into the tables.
Inserting Data into XMLType Table
-- Create XMLType Table CREATE TABLE XML_TABLE OF XMLType -- create an Oracle directory to hold the XML (readable by Oracle) CREATE OR REPLACE DIRECTORY XML as '/home/foo/bar/xml' -- insert the record (reading from filesystem) -- filename.xml would be in directory you created above INSERT INTO XML_TABLE(SELECT XMLTYPE(bfilename('XML', 'filename.xml'), nls_charset_id('UTF8')) FROM dual);
Of course you could easily write some PL/SQL to iterate all files in the directory.
You can also insert XML directly via SQL:
INSERT INTO XML_TABLE VALUES(XMLType('<mxrecords> <mxrecord> <sysurn>sysurn1</sysurn> <eventid>eventid1</eventid> </mxrecord> <mxrecord> <sysurn>sysurn2</sysurn> <eventid>eventid2</eventid> </mxrecord> </mxrecords>' ));
Tags: oracle, xml, xmldb, xmltype
Posted in Examples, How to's, Oracle | No Comments »
Oracle XML DB – XMLType table creation
Wednesday, March 18th, 2015
Background
So I’ve been doing some Oracle XML work again. I’d lost my notes from last time (nice touch) so here are my notes from this time:
XMLType Table Creation
CREATE TABLE xml_table OF XMLType
This will create “an xml table” into which you can insert XML. It will check that the XML is well formed before insertion. It will not validate that all documents inserted are the same or that elements contain valid data.
For that we need to create a table based upon an XML Schema/XSD
-- create an Oracle directory where the schema can be stored create or replace directory XSD as '/home/foo/bar/oracle/xsd' -- copy your Schema into the directory -- then BEGIN DBMS_XMLSCHEMA.registerSchema(SCHEMAURL => 'http://www.foobar.com/xsd/my_schema.xsd', SCHEMADOC => bfilename('XSD','my_schema.xsd')); END; -- Note: the SCHEMAURL can be basically anything. Oracle uses it as a unique identifier -- Create the table CREATE TABLE matter OF xml_table XMLSCHEMA "http://www.foobar.com/xsd/my_schema.xsd" ELEMENT "nameOfTheRootXmlElement";
There are many overloaded versions of DBMS_XMLSCHEMA.registerSchema so you can shortcut some of the steps above. For example:
BEGIN DBMS_XMLSCHEMA.registerSchema( http://www.foobar.com/xsd/my_schema.xsd', bfilename('XSD','my_schema.xsd'), TRUE, -- generate required Oracle types. Default = true TRUE, -- generate javabeans. Default = false FALSE, -- generate errors when registering schema. True = do not TRUE -- generate table ); END;
Full docs for the DBMS_XMLSCHEMA package are here
here
Tags: oracle, schema, xml, xmldb, xmltype, xsd
Posted in Development, Examples, How to's | No Comments »