Wednesday, October 22, 2014

Redis notes

KEYS * - Returns all keys matching pattern.
FLUSHDB - Delete all the keys of the currently selected DB
FLUSHALL - Delete all the keys of all the existing databases, not just the currently selected one.


Hashes

Hashes are maps between string fields and string values, so they are the perfect data type to represent objects
(eg: A User with a number of fields like name, surname, age, and so forth)
HGETALL key - lists all fields


Sets

Sets are an unordered collection of Strings.
SMEMBERS key - Get all the members in a set


Sorted Sets

Sorted Sets are, similarly to Redis Sets, non repeating collections of Strings. The difference is that every member of a Sorted Set is associated with score, that is used in order to take the sorted set ordered, from the smallest to the greatest score. While members are unique, scores may be repeated.
ZCARD key - Get the number of members in a sorted set
ZRANGE key start stop [WITHSCORES] - Return a range of members in a sorted set, by index

Ref:
Redis homepage
Redis for the real world (IBM - Java development 2.0)

Tuesday, October 21, 2014

Quartz notes

The key interfaces of the Quartz API are:

Scheduler - the main API for interacting with the Scheduler.
Job - an interface to be implemented by components that you want the Scheduler to execute.
JobDetail - used to define instances of Jobs.
The JobDataMap can be used to hold any amount of (serializable) data objects which you wish to have made available to the job instance when it executes.
Trigger - a component that defines the schedule upon which a given Job will be executed.
(Quartz ships with a handful of different trigger types, but the most commonly used types are SimpleTriggerand CronTrigger.)
JobBuilder - used to define/build JobDetail instances, which define instances of Jobs.
TriggerBuilder - used to define/build Trigger instances.

Misfire Instructions

A misfire occurs if a persistent trigger misses its firing time because of the scheduler being shutdown, or because there are no available threads in Quartz's thread pool for executing the job.
The different trigger types have different misfire instructions available to them. By default they use a 'smart policy' instruction - which has dynamic behavior based on trigger type and configuration. When the scheduler starts, it searches for any persistent triggers that have misfired, and it then updates each of them based on their individually configured misfire instructions.

For CronTriggers: The 'smart policy' instruction is interpreted as MISFIRE_INSTRUCTION_FIRE_NOW

Note that if a trigger's time to fire arrives, and there isn't an available thread, Quartz will block (pause) until a thread comes available, then the Job will execute some number of milliseconds later than it should have.
This may even cause the thread to misfire if there is no available thread for the duration of the scheduler's configured “misfire threshold”.

Listeners

Listeners are objects that you create to perform actions based on events occurring within the scheduler.
As indicated by their names, TriggerListeners receive events related to triggers, and JobListeners receive events related to jobs.
Trigger-related events include: trigger firings, trigger misfirings, and trigger completions (the jobs fired off by the trigger is finished).

JobDataMap

JobDetail contains various property settings for the job, as well as a JobDataMap, which can be used to store state information or provide properties/configuration for a given instance of your Job class.
Triggers may also have a JobDataMap associated with them. A JobDataMap is useful for passing to a job parameters that are specific to the firings of the trigger.

The JobDataMap that is found on the JobExecutionContext during Job execution serves as a convenience.
It is a merge of the JobDataMap found on the JobDetail and the one found on the Trigger, with the values in the latter overriding any same-named values in the former.

If you add setter methods to your job class that correspond to the names of keys in the JobDataMap, then Quartz's default JobFactory implementation will automatically call those setters when the job is instantiated, thus preventing the need to explicitly get the values out of the map within your execute method.

JobStores

JobStores are responsible for keeping track of all the work data you give to the scheduler: jobs, triggers, calendars, and so forth.



How to fire scheduled job asap?

Example:

select * from qrtz_triggers;
           trigger_name           | trigger_group |           job_name           | job_group | is_volatile | description | next_fire_time | prev_fire_time | priority |
trigger_state | trigger_type |  start_time   | end_time | calendar_name | misfire_instr | job_data
----------------------------------+---------------+------------------------------+-----------+-------------+-------------+----------------+----------------+----------+-
--------------+--------------+---------------+----------+---------------+---------------+----------
 portReconciliationProcessTrigger | DEFAULT       | portReconciliationProcessJob | DEFAULT   | f           |             |  1426579200000 |  1426492800000 |        5 |
WAITING       | CRON         | 1378612922000 |        0 |               |             0 | \x


next fire time:     1426579200000 -> http://www.epochconverter.com/ ->
GMT: Tue, 17 Mar 2015 08:00:00 GMT
Your time zone: 3/17/2015, 9:00:00 AM GMT+1:00

Fire it in near future: 13.3.2015 15:00 -> converter ->
Epoch timestamp: 1426518000
Timestamp in milliseconds: 1426518000000

Update db
UPDATE qrtz_triggers SET next_fire_time = '1426518000000' WHERE trigger_name = 'portReconciliationProcessTrigger';

Delete triggers from db
delete from qrtz_cron_triggers;
delete from qrtz_triggers;
delete from qrtz_job_details;

Ref:
Quartz_Scheduler_Developer_Guide v2.2.1
Quartz scheduler misfire instructions explained

Quartz 1.8.x to Quartz 2.0 Migration Guide
Spring - Task Execution and Scheduling

Friday, October 17, 2014

svn tips

status

$ svn status

update

$ svn up

revert

$ svn revert *

revert to previous version (undo commit)

$ svn merge -r HEAD:12345 .

ignore files

$ svn propset svn:ignore "someFile" .

link to another/external directory as part of your project

set property:
$ svn propset svn:externals https://myServer/build/common common

checkout

$ svn checkout repositoryURL destinationDirectory

Ref

How do I ignore files in Subversion?
Revert to a Previous Version in Subversion