Friday, January 30, 2009

Dynamic PL/SQL and Bulk Collect

Today was the first time that I needed to use dynamic sql with BULK COLLECT. It was due to a distributed database system that used dblinks from a master reporting database. I programmed this on Oracle 10g but it should work on 9i or later.


declare

TYPE table1Type is TABLE OF table1%ROWTYPE
index by binary_integer;
v_results table1Type ;

begin
v_sql := 'SELECT *
FROM table1@' || v_dblink || '
WHERE mydate_dttm > sysdate - 1';

EXECUTE IMMEDIATE v_sql BULK COLLECT INTO v_results;
end;



That's it... This loaded all of the records into the v_results PL/SQL table and you can loop through the results like a array.



Saturday, January 24, 2009

Notes from Houston Techfest, Part 2

After lunch we had three more sessions.

Darin Marple
Topic: Using java to solve capacity issues


What can we do from a design perspective to identify or prevent capacity issues.

Transaction Model: Move transactions to as low of level as possible. Avoid two phase commits. Consolidate transactions at the db layer with stored procedures or DAO patterns.

Dependency Management: primary concern is dependency is not available at the time its needed Solutions caching dependency using any of the caching methods Workflow management: Provide alternative business path to using the data using possible older data.

Application Metrics:
Metrics via JMX: Monitoring with logging, JMX can publish metrics for mbeans

Persisting Metrics: Save metrics for analysis over time. Preferably to a database for persistence. Watch for extra load on database. Can output logs to file then batch load them into the database.

Validation: Load testing with LoadRunner: Validates application will work on a test system. Allows capture of true SLA and ability to tune and retest. Try to simulate real load as close as possible.

Deployment
Horizontal Scalability. Use JMS Distributed Batch. Use singleton at low level and workers at a higher level to pass information to the lower level.

---------------------------------
David Neal
Topic: Coding Considerations for Production Support: Instrumenting your code to reduce your support headaches

Carnegie Mellon University's Software Engineering Institute
Capacity Maturity Model

Avoid the standalone application mindset. Use useful error message. Dynamic adjusted diagnostic levels, Use progressive level of detail. If your using threading applications make sure that you include a key to be able to get the output back out of the logs for that one. Check log4j to output thread information. Log4j can also watch the logging level and if it changes in the properties it will update.

Aggregate the data from the method level to the caller level. Make sure that the context of the work is logged. If you return 100 records or 1M records put that in the logging so another user will know what the context of the results are.

Recoverable: Make sure the processing has the ability to recover preferably in stages especially for the larger jobs that need to be completed. Fuego is used for common recovery procedures.

JP Morgan uses a dashboard system to aggregate the data from the monitoring systems and that needs to demonstrate SLA. That also gives the ability to drill down into various problems.

--------------------------
John Teague
Topic: Principals of Object Oriented Design

Principals based on Robert's Martin's book.

High Cohesion and Low Coupling helps to make a solid OO design.

Makes code: Maintainable, Easier to test, Less resistant to change, reduce repetition, allows for continuous improvement, allows for agile development with vertical design.

If your going to mock it put an interface around it.






SOLID

Notes from Houston Techfest, Part 1

Notes from Houston Techfest:

Keynote Sang Shin from Sun Microsystems
Topic: Having fun in building Web applications with Ruby/JRuby/Rails

Notes: Not real instested in Ruby or JRuby. My Personal feelings is this is a fad language and will disappear the way of cobol in a few years. However, Sang gave a good presentation about the Ruby basics and how to get started doing web development. His web site http://www.javapassion.com/ looks like it has jump start guide. I just don't see this as mature a development framework as Spring or other DI design patterns.

--------------------------------------------
The next session that I attended was by Brian K Oxley from JP Morgan
http://binkley.blogspot.com/
Topic: Fluent Interfaces for testing in Java

Basically this shows how to add testing to Java code using code that look like english sentences. Proponent of static imports.

org.hamcrest.matchers testing library looks promising. Need to check into that library more.

Building fluent interfaces promotes the Builder Pattern to implement a testing interface for the code. So this creates an additional layer between the use case test and the code to be tested. This layer abstracts the test building so more syntactically correct English can be used to create the tests.


Even though I can understand the benefits for creating a more English like structure to create the tests it looks like with this additional layer of code that there is more code to test. What tests the test interface and what if the test interface is wrong or introduces a new bug that hides a bug in the code. This can happen in single level testing also but I'm not convinced that adding an additional layer to the testing will streamline code testing.

Brian also plugged Ron Coffin from Improving Enterprises


---------------------------------

William J Ferris
Topic: Topics in ava Concurrency

Recommended:
Brian Goetz, Java Concurrency in Practice
Herb Sutter, DDJ March 05: Free Lunch is Over

Why do we need to work on concurrency. Increasing need for threading because of multiple cores. Biggest threat to programming concurrency race condition when you expect one thread to finish first all the time or one thread accesses a object after another thread read it but before it writes to it. Other threats are deadlock and starvation. Deadlock is when two or more resources are waiting on resources. Starvation is when a thread cannot get cpu time.

To fix race condition: Concurrent Solutons
1. Elimination: Don't share the object if possible
2. Dynamic Exclusion: Use locks and barriers
3. Structural Exclusion: Code with immutable objects and confinement,isolate variables to specific threads

#2 Locks Intrinsic use synchronized keyword, Synchronized locks on getter and setters doesn't work!

Explicit locks java.util.concurrency.locks

Atomic new in java. Creates thread safe objects. Uses new methods to access the object.

Atomic best preforming, then explicit locks. Synchronized and fair share model are the slowest when more threads are added.

Maps are not thread safe, ConcurrentMap is threadsafe.




---------------------------------
Next was lunch -> See part 2....

Wednesday, January 21, 2009

Houston Tech Fest this weekend!

Looking forward to the Houston Tech Fest this weekend. It will be good to see some friends again and learn some new stuff. I noticed on the agenda that some spots are still open. I guess that some presenters backed out. Hope they get some more to fill in the spots.

Anyone else going? Let me know so we can meet up at the event.

Sunday, January 11, 2009

Dallas Techfest 2009 Postponed

I just read in Tim's Blog that the Dallas Techfest 2009 has been postponed and will not happen by March as originally planned. This is due to the last of sponsors for the event. If anyone has additional contacts to get support let Tim know or contact me and I'll pass the information on.

Saturday, January 10, 2009

Houston Tech Fest

Houston tech fest is only two week away now. I'll be blogging about it that night or when I get back to Dallas. Check out the tech fest lineup at http://www.houstontechfest.com/.

You can also find links to all of the techfests at http://techfests.com.