Wednesday, December 28, 2011

MySchedule-2.4.0 release

I have released version 2.4.0 of MySchedule project, and you may get it here: http://code.google.com/p/myschedule/downloads/list 

In this release, I have added these:
* Quartz is running on Heroku! Check it out: http://stormy-flower-6956.herokuapp.com
* Added JdbcSchedulerHistoryPlugin that will record job history in DB.
* Added Cron Tool expression validation on web page.
* Added AppConfig configurable by a Properties file.
* Upgraded to quartz-2.1.1
* Fixed trigger display page.

Enjoy!

Sunday, December 11, 2011

I want to learn Fantom

I have been learning a new programming language in every few years or so. I started with C++ since my high school year, and since then, I have learned to use Perl, Java, Python, Groovy, Ruby, and Scala. Java has been the longest run among them, because most of my employers are requesting and willing to pay for it. Despite having a full time job working on Java, I still have the urge to learn something new. A new language give me new perspectives in viewing software development with different solutions. Each language has its distinct features and design goals toward some principles. Just as any tool, they are created to meet some unsatifying style, solutions, or new features in other existing programming languanges.

Recently I have stumbled upon another language that I think it worth my time to study it: it's called Fantom. Check it out at http://fantom.org

Sunday, November 20, 2011

How to build Ruby on Cygwin and setup Heroku

I like to use ruby that comes with Cygwin instead of the RubyInstaller for Windows, because the path it handles are more consistenly in Linux form. But the current Cygwin only comes with ruby-1.8.7, so to use ruby-1.9.3, I have to built it on Cygwin on my own. And when building ruby from source on Cygwin, you would also have to install gem on your own as well. Turns out there are few issues that you have to fix too. Here are the steps I got it working:

0. Ensure you have the typical Cygwin/Linux build tools (gcc, make, autoconf, libiconv, openssl and etc.)

1. Download source for the following:
  a) LibYAML 0.1.4 from http://pyyaml.org/wiki/LibYAML
  b) ruby-1.9.3-p0 source from http://ruby-lang.org
  c) rubygems-1.8.11 from http://rubygems.org


2. Unzip/tar them all in /tmp
  a) $ cd /tmp/yaml-0.1.4 
     $ ./configure && make && make install

  b) $ cd /tmp/ruby-1.9.3-p0/ext/openssl
     $ ruby extconf.rb
     $ make && make install

  c) $ cd /tmp/ruby-1.9.3-p0
     $ export CPPFLAGS=-I/usr/local/include
     $ export LDFLAGS=-L/usr/local/lib    
     $ ./configure && make && make install

  e) $ cd /tmp/rubygems-1.8.11
     $ ruby setup.rb

With these completed, you may now install Heroku client tool as ruby gem:
  c) $ gem install heroku
You would also need Git to successful push and deploy application to Heroku, but you can get Cygwin 'git' package if you haven't already done so.

NOTE: FYI, all the user built applications are usually install into /usr/local directory, while those system (comes with cygwin packages) are in /usr.

Monday, November 7, 2011

MySchedule-2.3.0 release is out

MySchedule is a web application that let you manage and run Quartz in a servlet container. You can get Quartz running and start exploring by simply dropping the war file into a web server such as Tomcat. 

Here is a short list of what's in this release: 
* Use myschedule-2.3.0 to manage Quartz-2.x 
* Use myschedule-1.6.0 to manage Quartz-1.8.x 
* Removed all unnecessary dependencies, and making the war file tiny (~ 3MB) 
* Support any Java ScriptEngine, and many examples are provided for you to script and manage the scheduler. 
* There is an independent quartz-extra jar that you may use outside of webapp, and it has been backported consistently to 1.x version as well. 
* Documentation is available on the project site. 

Try it out and let me know what you think. 

http://code.google.com/p/myschedule 

Enjoy! 

Sunday, October 23, 2011

A very lean war file for MySchedule

On the next coming MySchedule release, I've been working on removing few dependencies in the project to improve its size, but yet still keeping all the original functionality.



The result is about 70% reduction in war file size!


There are few things that I removed that resulted in a much smaller webapp.

1. Removed MySQL jdbc driver. Not every one uses Quartz with this DB, so including it in distribution is not necessary. You can easily add it into a server classpath without modifying the war.

2. Removed Groovy. I've improved the UI and the ScriptingJob component so that it works with any Java standard script engine. The JDK comes with JavaScript engine built-in! So now Groovy can be optional, and yet user can still use it by simply add it to the server classpath, and they can select the language in MySchedule UI. Without it, MySchedule will just default to JavaScript for scripting.

3. Removed Spring (MVC) Framework. Now this is a big task because MySchedule uses Spring annotations, controllers and service beans in IoC config to bootstrap the entire webapp. I've replaced it with a simple static AppConfig that wired my services together, and then used the plain Servlet API to process all http requests.



So why remove Spring? Don't get me wrong, I like working with Spring, and I think it's awesome framework. I have been working with Spring based projects for a long time, and I even have my own set of SpringMVC template to
start any web application quickly. I know where things are configured and where to add new code to make a Spring app works, and it's flexibility are fantastic for development, especially for larger projects.  But in MySchedule case, it is just a small webapp that has it's focus is on Quartz. I wanted to remove Spring to create less confusion for any one who want to look at the code. The Spring bundled with Quartz in its core, and I want to avoid (I didn't use any of that any way.) I also want to shrink the war file size. And lastly, just to 
challenge of myself that, yes there is life outside of Spring, and it still can be maintainable. :-P



So in replacing Spring, but kept very much of same coding style, I have created my tiny little web request processing library. It only has few classes, and it will allow me to use single Servlet controller to map and process all URL actions through many smaller unit of code, which I called action handler. Now MySchedule can be easily configured through one MainServlet class. Not bad!

Tuesday, October 18, 2011

Quartz Extra!

Looking for some extra goodies for Quartz Scheduler? Check out myschedule-2.2.0 release!

Besides some small update to the web UI for quartz management, this release comes with a standalone quartz-extra jar you may download. See what it can do in QuartzExtraUserGuide.

Sunday, September 25, 2011

Quartz 2.1.0 has been released!

In this release, I have helped fixed some bugs, and added a new built-in trigger type: DailyTimeIntervalTrigger. This new trigger will allow you to specify a interval time in either seconds, minutes, or hours interval on each day (Like fire every 72 mins starting at 7am everyday). And the daily start time will be reset each day regardless what time it ended in that day! You may even limit daily ending time too. And you may limit the days to run on certain weekdays only as well. You may see many examples on how this trigger is used here: http://svn.terracotta.org/fisheye/browse/Quartz/trunk/quartz/src/test/java/org/quartz/DailyTimeIntervalScheduleBuilderTest.java?r=HEAD

Another feature worthy of note in this release is the "batch" mode is finally working! You may turn this on by using "org.quartz.scheduler.batchTriggerAcquisitionMaxCount" and "org.quartz.scheduler.batchTriggerAcquisitionFireAheadTimeWindowin your quartz.properties file. See config doc here: http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration/ConfigMain
I have created number of googlecode projects in attempt to try out new codes and ideas in the past. I now have links to all of them in my consolidated playground area http://code.google.com/p/zemiandeng/

I also kept few Java project templates (Maven based) in there: http://code.google.com/p/zemiandeng/source/browse/ These can get you started a project fairly quickly. See the README.txt in each for more details. I have added:
  * java-project-template
  * servlet-project-template
  * springmvc-project-template

There is also the "java-tool" with misc command line programs that I have collected over the years.

I also have stored a more reasonable preferences with Eclipse workspace, and few more custom Cygwin/Bash scripts setup.

All these are publicly and freely available (Apache License 2.0) if you find it useful. Enjoy!
Both myschedule-2.1.2 (for Quartz-2.1.0) and myschedule-1.5.2(for Quartz-1.8.5) releases are available for download here: http://code.google.com/p/myschedule/downloads/list

I have fixed few bugs and improved the UI slightly. Both of these releases should now deployable on Tomcat6, Tomcat7, and JBossAS servers!

Sunday, July 24, 2011

MySchedule-2.0.0 released

The lastest myschedule-2.x release supports the latest Quartz 2.0 API. The Quartz 2.0 is not backward compatible to Quartz 1.8.x, so the MySchedule has matained the myschedule-1.x for the older one.

Try it out here: http://code.google.com/p/myschedule/downloads/list !

Saturday, July 23, 2011

Becoming a Quartz commiter

I started my first commit to the Quartz's svn repository yesterday. I hope to contribute some effort in helping the project. I think the Quartz is an exellent open source project to work with and it's already been use by many users. The project offer many opportunities in dealing with real world situations. The quartz project has a scheduler layer, cron expression implementation, job persistence storage layer (using JDBC), and many framework components such as plugins and listeners. Many users have integrated Quartz in various environments such in standalone JavaSE, Spring, Servlet container (Tomcat eg), or application server (JBoss eg). In helping this community, I also get a chance to expose to these programming models. It will be great experience to have.

Saturday, July 2, 2011

MySchedule-1.3.3 release

The Quartz Scheduler project is great to create any fancy and heavy duty scheduling tasks in Java project. One area it's missing is that the quartz library is very much targeted for developer, and there is not many user front end to allow end user to immediately exploring the scheduler system. This is the reason I created myschedule project. It's free, open source (Apache License 2.0) dashboard manager for Quartz. It's conveniently packaged as war file and you may deploy into any Servlet 2.5+ Web Container server to run it.

The myschedule-1.3.3 release let you manage multiple quartz schedulers on a single webapp, and you may create and delete the config right in the webapp. The myschedule will quickly let a end user to load and run jobs without doing any programming. But myschedule also comes with a Scripting tool that let power uses to schedule any jobs using Groovy programming language. The myschedule's job listing page and management of the UI has also greatly been improved since the first release.

So if you need Quartz or want any scheduling jobs, you should check it out. http://code.google.com/p/myschedule/downloads/list

Sunday, June 5, 2011

MySchedule-1.0.0 ready to use

I have made MySchedule-1.0.0 ready to use.

MySchedule is an open source web application dashboard for Quartz scheduler. Get the war file here: http://code.google.com/p/myschedule/downloads/list

It doesn't look pretty at the moment, but for those who are looking for more Quartz examples, especially on how to use Spring and run Quartz in a Web Container environment, the MySchedule project should get you jump started quickly.

If you have any issues or comments, feel free to enter them at http://code.google.com/p/myschedule/issues/list

Enjoy!

Monday, May 30, 2011

jQuery doesn't suport ajax over the file protocol

I was playing with jQueryUI today, and a simple example like this failed to update an page.

        $.get('data1.xml', function(data) {
            $('#main-panel').html(data)
        });

Running under Firefox4 locally on a PC (static local file protocols), I get errors like this inside Firebug:


Node cannot be inserted at the specified point in the hierarchy" code: "3

Turns out that this failure only occur when fetching local files because the same code works when deployed and run from a web server. Reading from a bug report here http://bugs.jqueryui.com/ticket/7225 seems to indicate that jQuery AJAX doesn't support local file protocol.

Interestingly, an IE browser works with above code! And also the jQuery's load method like $('#main-panel').load('data1.xml'); works fine with local file!

Saturday, May 28, 2011

Hello World!

Hello World!

This is my first post using "saltnlight5" in BlogSpot.

I am a Java Developer and I have keen interests in software development. I will try to post things I've learned and hopefully they can be a help for those who are looking for the same information.