Friday, November 25, 2011

SQLSTATE=42903

 I was in need to pass a max value in where condition. My folly, what i did is :

Incorrect : Select * from table_name where field = MAX(field);




Got below mentioned error in DB2

  42903(-120)[IBM][CLI Driver][DB2/SUN64] SQL0120N  Invalid use of an aggregate function or OLAP function.  SQLSTATE=42903
 (0.47 secs)

Correct :

Correct way is Inline Query

Select * from table_name where files = (Select MAX(filed) from table_name);

SQLSTATE=42601

 I was in need to fetch top n rows from a particular table in DB2. I got below mentioned error when tried with some incorrect syntax.

 42601(-104)[IBM][CLI Driver][DB2/SUN64] SQL0104N  An unexpected token "1" was found following "Select TOP ".  Expected tokens may include:  "".  SQLSTATE=42601
 (0.45 secs)

Correct Syntax :

Select * from table_name where filed = 'Some condition' order by field FETCH FIRST 10 ROWS ONLY;

SQLSTATE=42807

I got below mentioned error while updating a View in DB2.

 42807(-150)[IBM][CLI Driver][DB2/SUN64] SQL0150N  The target fullselect, view, typed table, materialized query table, or staging table in the INSERT, DELETE, UPDATE, or MERGE statement is a target for which the requested operation is not permitted.  SQLSTATE=42807

As the error suggest administrator have not given update permission to the user. Ask administrator to give access, else it would not be possible.

Tuesday, November 15, 2011

Step by step guide to install MySQL



Step 1. Download MySQL Installer (mysql-advanced-5.5.8-win32.msi) file from the website of MySQL 




Go to URL http://www.mysql.com/downloads/mysql/

MySQL Installer provides an easy to use, wizard-based installation experience for all your MySQL software needs. Included in the product are the latest versions of:

MySQL Server
All of our support connectors
Workbench and sample models
Sample databases
Documentation


Step 2. After downloading  the installer file e.g mysql-advanced-5.5.8-win32.msi

Open the file. It will start installer wizard. Please go throw the screen shot below.

Mostly you do not have to change the default setting, just continue with the wizard.








At this point, Note the port number. Default port number is 3306, If you wish you could change it else let go by default port number.




At this point, put password for security and note that password for login latter.


You are almost done...


Step 3. Now that MySQL is installed, You can confirm it by login to it.

Try through  Start - All programms - My SQL.

If you cannot start the server through  Start - All programms - My SQL

The best way to login without any problem is.
Go to command prompt. The folder where MySQL is installed.
Probably Program Files\MySQL\MySQL Server 5.5\bin
Use Command : mysql -u root -p
Put the password and you are in the database.



DB2 : Get all column name of a particular Table

Query :


SELECT TABNAME,COLNAME from SYSCAT.COLUMNS where TABNAME='table_name'


You can use above mentioned query for getting all column name of a particular table in DB2.

Could not determine current working directory

If you get below mentioned error



Error occurred during initialization of VM
java.lang.Error: Properties init: Could not determine current working directory.
        at java.lang.System.initProperties(Native Method)
        at java.lang.System.initializeSystemClass(System.java:1070)


There could be two possible reasons.

1. You have not set the proper classpath, If this the case then make sure you set JAVA_HOME path in class path.

2.  You do not have the permission to start the java process in that directory, Simply ask your UNIX / LINUX administrator to grant the access.

Also you can try running the java process from your home directory.


Connection authorization failure occurred. Reason: User ID or Password invalid.

If you get below mentioned error


Exception in thread "main" com.ibm.db2.jcc.b.bo: [jcc][t4][2013][11249][3.53.95]
 Connection authorization failure occurred.  Reason: User ID or Password invalid. ERRORCODE=-4214, SQLSTATE=28000
        at com.ibm.db2.jcc.b.bd.a(bd.java:674)
        at com.ibm.db2.jcc.b.bd.a(bd.java:60)
        at com.ibm.db2.jcc.b.bd.a(bd.java:120)
        at com.ibm.db2.jcc.t4.b.o(b.java:2018)
        at com.ibm.db2.jcc.t4.b.c(b.java:1646)
        at com.ibm.db2.jcc.t4.bb.r(bb.java:793)
        at com.ibm.db2.jcc.t4.bb.k(bb.java:349)
        at com.ibm.db2.jcc.t4.bb.c(bb.java:133)
        at com.ibm.db2.jcc.t4.b.Oc(b.java:1271)
        at com.ibm.db2.jcc.t4.b.b(b.java:1192)
        at com.ibm.db2.jcc.t4.b.B(b.java:5098)
        at com.ibm.db2.jcc.t4.b.c(b.java:750)
        at com.ibm.db2.jcc.t4.b.b(b.java:693)
        at com.ibm.db2.jcc.t4.b.a(b.java:376)
        at com.ibm.db2.jcc.t4.b.(b.java:312)
        at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:214)
        at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:224)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)


As the error suggest, The login credentials are not matching. Please make sure that user name and password are correct.

Also check for correct URL. Make sure that all login credentials are correct.

Connection authorization failure occurred. Reason: Security mechanism not supported. ERRORCODE=-4214, SQLSTATE=28000

If you get mentioned error



Exception in thread "main" com.ibm.db2.jcc.b.bo: [jcc][t4][201][11237][3.53.95]
Connection authorization failure occurred.  Reason: Security mechanism not supported. ERRORCODE=-4214, SQLSTATE=28000
        at com.ibm.db2.jcc.b.bd.a(bd.java:674)
        at com.ibm.db2.jcc.b.bd.a(bd.java:60)
        at com.ibm.db2.jcc.b.bd.a(bd.java:120)
        at com.ibm.db2.jcc.t4.b.o(b.java:1981)
        at com.ibm.db2.jcc.t4.b.a(b.java:1554)
        at com.ibm.db2.jcc.t4.bb.b(bb.java:3405)
        at com.ibm.db2.jcc.t4.bb.a(bb.java:332)
        at com.ibm.db2.jcc.t4.bb.a(bb.java:112)
        at com.ibm.db2.jcc.t4.b.l(b.java:1247)
        at com.ibm.db2.jcc.t4.b.b(b.java:1120)
        at com.ibm.db2.jcc.t4.b.c(b.java:707)
        at com.ibm.db2.jcc.t4.b.b(b.java:693)
        at com.ibm.db2.jcc.t4.b.a(b.java:376)
        at com.ibm.db2.jcc.t4.b.(b.java:312)
        at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:214)
        at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:224)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)


As the error suggest, You are not authorized to access the database. I am not sure on this, possibly this could be the one reason for the above error.


Try using different Driver,


I was using DB2 Universal Driver, when i got above error

Class.forName("com.ibm.db2.jcc.DB2Driver");
con=DriverManager.getConnection("jdbc:db2://hostname:port/Schema","username","password");

Jar file : db2jcc.jar


I switched to App JDBC Driver, and it solved the error.

Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
con=DriverManager.getConnection("jdbc:db2:Test","uername","passowrd");

Jar file : db2java.jar


To download Jar files : Click here

If still you face the issue, contact your server administrator.

DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704

If you get below mentioned error


Exception in thread "main" com.ibm.db2.jcc.b.eo: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=SCHEMA.TABLE_NAME, DRIVER=3.53.95
        at com.ibm.db2.jcc.b.bd.a(bd.java:676)
        at com.ibm.db2.jcc.b.bd.a(bd.java:60)
        at com.ibm.db2.jcc.b.bd.a(bd.java:127)
        at com.ibm.db2.jcc.b.gm.c(gm.java:2484)
        at com.ibm.db2.jcc.b.gm.d(gm.java:2461)
        at com.ibm.db2.jcc.b.gm.a(gm.java:1962)
        at com.ibm.db2.jcc.t4.db.g(db.java:138)
        at com.ibm.db2.jcc.t4.db.a(db.java:38)
        at com.ibm.db2.jcc.t4.t.a(t.java:32)
        at com.ibm.db2.jcc.t4.sb.h(sb.java:141)
        at com.ibm.db2.jcc.b.gm.bb(gm.java:1933)
        at com.ibm.db2.jcc.b.gm.a(gm.java:2799)
        at com.ibm.db2.jcc.b.gm.a(gm.java:604)
        at com.ibm.db2.jcc.b.gm.executeQuery(gm.java:588)

Possible reason could be Table do not present in that schema. Please make sure that you provide correct schema name and table name. Also check for typo in Table name or Schema name.

I got the above error when i mistakenly passed wrong table name for the schema. Hope it resolved your error.

Exception java.net.ConnectException: Error opening socket to server

If you get below mentioned error

Exception in thread "main" com.ibm.db2.jcc.b.un: [jcc][t4][2043][11550][3.53.95] Exception java.net.ConnectException: Error opening socket to server hostname/10.10.5.5 on port 3,934 with message: Connection timed out. ERRORCODE=-4499, SQLSTATE=08001
        at com.ibm.db2.jcc.b.bd.a(bd.java:319)
        at com.ibm.db2.jcc.b.bd.a(bd.java:337)
        at com.ibm.db2.jcc.t4.xb.a(xb.java:378)
        at com.ibm.db2.jcc.t4.xb.(xb.java:76)
        at com.ibm.db2.jcc.t4.a.x(a.java:263)
        at com.ibm.db2.jcc.t4.b.a(b.java:1789)
        at com.ibm.db2.jcc.b.jb.a(jb.java:530)
        at com.ibm.db2.jcc.b.jb.(jb.java:486)
        at com.ibm.db2.jcc.t4.b.(b.java:310)
        at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:214)
        at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:224)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
Caused by: java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:529)
        at com.ibm.db2.jcc.t4.y.run(y.java:34)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.ibm.db2.jcc.t4.xb.a(xb.java:372)
        ... 11 more


As the error suggest, The database server's port is not open to establish connection with your server or local machine hence it is throwing Socket error. Just verify this error by using Telnet command, If this is the case then contact your server administrator to open the port on the destination server.

I am not sure on this, possibly this could be the one reason for the above error.

DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;

If you get below mentioned error


Exception in thread "main" com.ibm.db2.jcc.b.eo: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=;;SCHEMA.TABLE_NAME;END-OF-STATEMENT, DRIVER=3.53.95
        at com.ibm.db2.jcc.b.bd.a(bd.java:676)
        at com.ibm.db2.jcc.b.bd.a(bd.java:60)
        at com.ibm.db2.jcc.b.bd.a(bd.java:127)
        at com.ibm.db2.jcc.b.gm.c(gm.java:2484)
        at com.ibm.db2.jcc.b.gm.d(gm.java:2461)
        at com.ibm.db2.jcc.b.gm.a(gm.java:1962)
        at com.ibm.db2.jcc.t4.db.g(db.java:138)
        at com.ibm.db2.jcc.t4.db.a(db.java:38)
        at com.ibm.db2.jcc.t4.t.a(t.java:32)
        at com.ibm.db2.jcc.t4.sb.h(sb.java:141)
        at com.ibm.db2.jcc.b.gm.bb(gm.java:1933)
        at com.ibm.db2.jcc.b.gm.a(gm.java:2799)
        at com.ibm.db2.jcc.b.gm.a(gm.java:604)
        at com.ibm.db2.jcc.b.gm.executeQuery(gm.java:588)




Possible reason could be SYNTAX error. Please make sure all syntax are correct upto DB2 standard. Verify the syntax of your query. Even don't add  semi-colon (;) at the end of the query.

In this case if you are using DB2 Universal Driver. 

Syntax :

Class.forName("com.ibm.db2.jcc.DB2Driver");
Connection con=DriverManager.getConnection("jdbc:db2://hostname:port/Schema","username","password");


Jar file : db2jcc.jar

To download Jar files : Click here

Monday, November 14, 2011

Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID"). SQLSTATE=08001

If you get below mentioned error


Exception in thread "main" COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL30082N  Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID").  SQLSTATE=08001


        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source)
        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(Unknown Source)
        at COM.ibm.db2.jdbc.app.DB2Connection.connect(Unknown Source)
        at COM.ibm.db2.jdbc.app.DB2Connection.(Unknown Source)
        at COM.ibm.db2.jdbc.app.DB2Driver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)


As the error suggest, The login credentials are not matching. Please make sure that user name and password are correct.

Also check for URL. Make sure that all login credentials are correct.

java.lang.UnsatisfiedLinkError: no db2jdbc in java.library.path

If you get below mentioned error


Exception in thread "main" java.sql.SQLException: java.lang.UnsatisfiedLinkError: no db2jdbc in java.library.path
        at COM.ibm.db2.jdbc.app.DB2Driver.(Unknown Source)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)


Possible reason could be you forgot to add db2java.jar file in classpath. Please cross check if the jar file db2java.jar is added in class path.

Also make sure that driver name is in proper case, as Driver name case sensitive. i.e. COM.ibm.db2.jdbc.app.DB2Driver (Note that COM is in upper case)

To download Jar file : Click here

java.lang.ClassNotFoundException: COM.ibm.db2.jdbc.app.DB2Driver

If you get below mentioned error


Exception in thread "main" java.lang.ClassNotFoundException: COM.ibm.db2.jdbc.app.DB2Driver
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)

Possible reason could be you forgot to add db2java.jar file in classpath. Please cross check if the jar file db2java.jar is added in class path.

Also make sure that driver name is in proper case, as Driver name case sensitive. i.e. COM.ibm.db2.jdbc.app.DB2Driver (Note that COM is in upper case)

To download Jar file : Click here

Friday, November 11, 2011

java.sql.SQLException: No suitable driver found

If you get below mentioned error

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:db2://localhost:3306/Test
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)


There could be two possible reasons.

1. Correct driver is not loaded, If this is the case make sure you pass correct Driver for getConnection() method.

2. URL passed is not properly constructed, If DriverManager do not understands the URL sent it throws above error.

In my case this was the issue, It was working well in my local machine but when I deploy the code on my production server (linux server) it used to throw above error. It was working on local machine because IBM client was installed on it.

You can verify on your local machine, probably on below mentioned path
C:\Program Files\IBM\SQLLIB\java

I was using App JDBC Driver :

Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
con=DriverManager.getConnection("jdbc:db2:Test","uername","passowrd");

Jar file : db2java.jar

Here local machine is able to understand alias "Test" because IBM client was installed as mentioned above. But server was not able to understand the alias hence it was throwing above error.

I solved the problem by using DB2 Universal Driver

Class.forName("com.ibm.db2.jcc.DB2Driver");
con=DriverManager.getConnection("jdbc:db2://hostname:port/Schema","username","password");

Jar file : db2jcc.jar


To download Jar files : Click here


Aslo there is one more solution for this.

Possibly there could be IBMdb2 installed on your server / local machine but while running program it is not able get the driver.

Solution is load the profile, in a .bat or .sh file as shown below.


#!/bin/ksh -x
. /apps/IBMdb2/db2v8/sqllib/db2profile 

java -classpath db2java.jar:. TestDB2

Here TestDB2 is .class file of JAVA program.

SQL0204N "SCHEMA.TABLE_NAME" is an undefined name

If you get below mentioned error

Exception in thread "main" COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/SUN64] SQL0204N  "SCHEMA.TABLE_NAME" is an undefined name.  SQLSTATE=42704
        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source)
        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source)
        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(UnknownSource)
        at COM.ibm.db2.jdbc.app.DB2Statement.execute2(Unknown Source)
        at COM.ibm.db2.jdbc.app.DB2Statement.executeQuery(Unknown Source)
        at TestDB2.main(TestDB2.java:18)


As the error suggest, Possible reason could be Table name you are trying to access is not valid for that particular schema. Please check for proper Schema and Table name combination.

UNIX/Linux : Provide jar files in classpath at run time

You may face an issue to provide .jar files in classpath at run time.

Lets say you have a Java file Test.java which requires foo.jar and bar.jar in classpath.

In Windows below mentioned command works well.

javac -cp foo.jar;bar.jar Test.java
java -cp foo.jar;bar.jar Test

Note the semi-colon(;) as jar file separator in windows.

Where as in UNIX/Linux it don't work. To run the above program in UNIX/Linux you need to use below mentioned command

javac -cp foo.jar:bar.jar Test.java
java -cp foo.jar:bar.jar Test

Note the colon(:) as as jar file separator in UNIX/Linux.

Failed to load Main-Class manifest attribute from Test.jar

If you get below mentioned error

Failed to load Main-Class manifest attribute from Test.jar

Possible reason could be you missed Entry Point of a JAR file. Make sure that Manifest.txt contains Main Class.

Main-Class: MyPackage.MyClass


In some cases if there are multiple Entry points i.e. there is not any specific Main-Class in Manifest and you need to provide main class at run time then you can use below mentioned simple method.


java -cp Test.jar MyPackage.MyClass1
 
java -cp Test.jar MyPackage.MyClass2

Invalid connection handle or connection is closed

If you get below mentioned error

Exception in thread "main" COM.ibm.db2.jdbc.DB2Exception: [IBM][JDBC Driver] CLI0600E  Invalid connection handle or connection is closed. SQLSTATE=S1000
    at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throwConnectionClosedError(Unknown Source)
    at COM.ibm.db2.jdbc.app.DB2ResultSet.checkHandlesAndIndex(Unknown Source)
    at COM.ibm.db2.jdbc.app.DB2ResultSet.next(Unknown Source)
    at com.hewitt.hre.util.Test.main(Test.java:19)

Possible reason could be you have closed the connection and trying to use Element like ResutSet. Please check the flow of your program again. Connection must be closed only after use of ResutSet.

Make sure  Connection and other resource are made free after use of all resource.

log4j:ERROR Could not parse url [file:log4j.xml]

If you get below mentioned error

log4j:WARN Fatal parsing error 15 and column 17
log4j:WARN Open quote is expected for attribute "{1}" associated with an  element type  "value".
log4j:ERROR Could not parse url [file:log4j.xml].
org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}" associated with an  element type  "value".
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:180)
    at org.apache.log4j.xml.DOMConfigurator$2.parse(DOMConfigurator.java:612)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:711)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:618)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:470)
    at org.apache.log4j.LogManager.(LogManager.java:122)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
    at org.quartz.impl.StdSchedulerFactory.(StdSchedulerFactory.java:274)
    at com.hewitt.hre.scheduler.ScheduleJob.main(ScheduleJob.java:25)
log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory).
log4j:WARN Please initialize the log4j system properly.



Possible reason could be there is a syntax error in file log4j.xml. Please check the xml syntax of the file log4j.xml. All quotes and XML tags OR values should be properly mapped.

Failed to instantiate SLF4J LoggerFactory Reported exception

if you get below mentioned error


Failed to instantiate SLF4J LoggerFactory Reported exception:
java.lang.NoClassDefFoundError: org/apache/log4j/Level
        at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
        at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
        at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
        at org.quartz.impl.StdSchedulerFactory.(StdSchedulerFactory.java:274)
        at com.hewitt.hre.scheduler.ScheduleJob.main(ScheduleJob.java:26)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 7 more
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Level
        at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
        at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
        at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
        at org.quartz.impl.StdSchedulerFactory.(StdSchedulerFactory.java:274)
        at com.hewitt.hre.scheduler.ScheduleJob.main(ScheduleJob.java:26)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 7 more



Possible reason could be you have forgot to set log4j.jar in classpath. Please try adding log4j JAR file (e.g. log4j-1.2.14.jar) in classpath.

Java : How to Run a Jar file

If you need to run a JAR file in JAVA, use below mentioned command

java -jar Test.jar

Note : In this case Manifest.txt inTest.jar should contain Entry Point i.e. Class which has main method in it.

Main-Class: MyPackage.MyClass

In some cases if there are multiple Entry points i.e. there is not any specific Main-Class in Manifest and you need to provide main class at run time then you can use below mentioned simple method.

java -cp Test.jar MyPackage.MyClass1
 
java -cp Test.jar MyPackage.MyClass2


Thursday, November 10, 2011

java.net.UnknownHostException

Exception in thread "main" javax.xml.ws.WebServiceException: Failed to access the WSDL at: https://hostname.com/testWebService?wsdl. It failed with:
    hostname.com.
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:162)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:144)
    at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:263)
    at com.sun.xml.ws.client.WSServiceDelegate.(WSServiceDelegate.java:226)
    at com.sun.xml.ws.client.WSServiceDelegate.(WSServiceDelegate.java:174)
    at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:104)
    at javax.xml.ws.Service.(Service.java:56)
    ... 3 more
Caused by: java.net.UnknownHostException: hostname.com
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)
    at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
    at sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:272)
    at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:329)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
    at java.net.URL.openStream(URL.java:1010)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.createReader(RuntimeWSDLParser.java:805)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.resolveWSDL(RuntimeWSDLParser.java:262)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:129)
    ... 8 more

No route to host: connect

Exception in thread "main" javax.xml.ws.WebServiceException: Failed to access the WSDL at: https://hostname.com/testWebService?wsdl. It failed with:
    No route to host: connect.
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:162)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:144)
    at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:263)
    at com.sun.xml.ws.client.WSServiceDelegate.(WSServiceDelegate.java:226)
    at com.sun.xml.ws.client.WSServiceDelegate.(WSServiceDelegate.java:174)
    at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:104)
    at javax.xml.ws.Service.(Service.java:56)
    ... 3 more
Caused by: java.net.NoRouteToHostException: No route to host: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:550)
    at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
    at sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:272)
    at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:329)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
    at java.net.URL.openStream(URL.java:1010)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.createReader(RuntimeWSDLParser.java:805)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.resolveWSDL(RuntimeWSDLParser.java:262)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:129)
    ... 8 more

Connection timed out: connect

If you get below mentioned error


Exception in thread "main" javax.xml.ws.WebServiceException: Failed to access the WSDL at: https://hostname.com/testWebService?wsdl. It failed with:
        Connection timed out: connect.
        at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:162)
        at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:144)
        at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:263)
        at com.sun.xml.ws.client.WSServiceDelegate.(WSServiceDelegate.java:226)
        at com.sun.xml.ws.client.WSServiceDelegate.(WSServiceDelegate.java:174)
        at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:104)
        at javax.xml.ws.Service.(Unknown Source)
        ... 3 more
Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at sun.net.NetworkClient.doConnect(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(UnknownSource)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
        at java.net.URL.openStream(Unknown Source)
        at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.createReader(RuntimeWSDLParser.java:805)
        at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.resolveWSDL(RuntimeWSDLParser.java:262)
        at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:129)
        ... 8 more



Possible reason could be network connection. Please check your network connection, whether it is working or not.

Exception in thread "main" java.lang.NoClassDefFoundError

If you get below mentioned error

Exception in thread "main" java.lang.NoClassDefFoundError: /home/test (wrong name: test)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: /home/test.  Program will exit.

Possible reason could be the class you are trying to run do not contains main method. Make sure that main method is present in the Java program which you are trying to run.

Error occurred during initialization of VM

If you get below mentioned error

Error occurred during initialization of VM
java.lang.Error: Properties init: Could not determine current working directory.
        at java.lang.System.initProperties(Native Method)
        at java.lang.System.initializeSystemClass(System.java:1070)

Possible reason could be JAVA_HOME is not set properly OR System is not able to locate JVM (JAVA) path. Make sure that JAVA_HOME is set in classpath properly.

keytool error: java.io.FileNotFoundException

If you get below mentioned error

keytool error: java.io.FileNotFoundException: keystore (Permission denied)

This may occur because you don't have access to the folder in which you are trying to create keystore.
Make sure you have access to that folder, OR Create keystore in the folder where you have access.

java.lang.UnsupportedClassVersionError: Bad version number in .class file

If you get below mentioned error

java.lang.UnsupportedClassVersionError: Bad version number in .class file
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main"


This may occur because, You have complied Java files in higher version and trying it to run in lower version.
Make sure you compile and run in same version of JAVA.

Eclipse : String cannot be resolved to a type

If you get below mentioned error in Eclipse

String cannot be resolved to a type

You might have deleted JREs reference from the project OR Eclipse installed JREs might lost. Check it again.

Add JREs reference or Simply recreate your project folder and move your codes in the new folder.

Wednesday, November 9, 2011

Simple DB2 JDBC program

To run this example you need to set db2java.jar in your classpath

Below is the tested code, you can directly run this program, Just provide correct login credentials and table name.

/* TestDB2.java */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class TestDB2
{
    public static void main(String[] args) throws Exception
    {
        Connection con;
        Statement stat;
        Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");//Step 1: Loading Drivers

        con=DriverManager.getConnection("jdbc:db2:YOURSCHEMA","username","password");//Step 2: Making Connection

        stat=con.createStatement();//Step 3: Creating JDBC Statement

        String query = "select COLUMN_NAME from USER_NAME.TABLE_NAME;";

        ResultSet rset=stat.executeQuery(query);//Step 4: Execute the Statement

        while(rset.next())//Step 5: Looping through the ResultSet
        {
            System.out.println(rset.getString(1));
        }
        stat.close();//step 6: Close the Connection and Statement
        con.close();
    }
}


Below are the known exceptions, Please follow proper steps to avoid below exceptions.


Exception in thread "main" COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL3
0082N  Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID").  SQLSTATE=08001

        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source)
        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(UnknownSource)
        at COM.ibm.db2.jdbc.app.DB2Connection.connect(Unknown Source)
        at COM.ibm.db2.jdbc.app.DB2Connection.(Unknown Source)
        at COM.ibm.db2.jdbc.app.DB2Driver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at TestDB2.main(TestDB2.java:13)

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc/YOURSCHEMA
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at TestDB2.main(TestDB2.java:13)

Exception in thread "main" COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/
SUN64] SQL0204N  "USER_NAME.TABLE_NAME" is an undefined name.  SQLSTATE=42704
        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source)
        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source)
        at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(UnknownSource)
        at COM.ibm.db2.jdbc.app.DB2Statement.execute2(Unknown Source)
        at COM.ibm.db2.jdbc.app.DB2Statement.executeQuery(Unknown Source)
        at TestDB2.main(TestDB2.java:19)

Saturday, November 5, 2011

Eclpse Step by Step : Simple example using Quartz Plug-Ins

Create Project

File -> New -> Java Project -> Enter desire project name -> Finish



Add JAR files

Right click on project -> Properties -> Java build path -> Libraries -> Add External JARs -> browse jar files -> OK

Add below mentioned JAR files

quartz-2.1.0.jar
log4j-1.2.14.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
jta-1.1.jar
























Create Java Files

Create SimpleQuartzExample.java

To get the source code of SimpleQuartzExample.java files, click here

Right click on src -> New -> Class -> Enter package name , Enter class name , Check box for main method -> Finish


Similarly create SimpleJob.java which will implement org.quartz.Job interface

To get the source code of SimpleJob.java files, click here  



Add other files
Add file quartz.properties, quartz_data.xml, log4j.xml on root folder

To get the source code of quartz.properties, quartz_data.xml, log4j.xml files, click here


Add system parameters

Add below mentioned system parameters

-Dorg.quartz.properties=quartz.properties -Dlog4j.configuration=file:log4j.xml

Right click on project -> Properties -> Run/Debug Settings -> New -> Java Application -> Arguments -> VM arguments (add the parameters) -> Apply / OK


To get the source code of all files, click here

Run the project

Now Press Ctr + F11 for running the project.



Please get the codes from, click here

Java : Simple example using Quartz Plug-Ins

Basics

What is Quartz?  Enterprise Job Scheduler

Quartz is a full-featured, open source job scheduling service that can be integrated with, or used along side virtually any Java EE or Java SE application - from the smallest stand-alone application to the largest e-commerce system. Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs; jobs whose tasks are defined as standard Java components that may execute virtually anything you may program them to do. The Quartz Scheduler includes many enterprise-class features, such as JTA transactions and clustering.

To know more : http://quartz-scheduler.org

About the example

This a basic stand-alone Quartz Scheduler, which uses the quartz.properties file to configure quartz to use the quartz_data.xml file for job configuration. You can decide to specify a log4j.properties file to control logging output (optional). In our example we have a SimpleJob.java which will print date after every 1 second, you can customize it according to your requirement.

In our example we used latest version of Quartz i.e. Quartz 2.1.0, Download quartz-2.1.0.tar.gz here

Below mentioned .jar files need to be added on classpath

quartz-2.1.0.jar
log4j-1.2.14.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
jta-1.1.jar


Lets see the source code

SimpleQuartzExample.java


/* SimpleQuartzExample.java */

import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.Scheduler;
import org.quartz.SchedulerMetaData;

import org.quartz.SchedulerException;

public class SimpleQuartzExample
{
    public static void main(String[] args) throws SchedulerException
    {
        System.out.println("Initializing..");

        // First we must get a reference to a scheduler
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        System.out.println("Initialization Complete..");

        System.out.println("Not Scheduling any Jobs - relying on XML definitions..");

        // start the schedule
        sched.start();

        System.out.println("Scheduler Started..");

        // wait 5 second to give our jobs a chance to run
        try {
            Thread.sleep(5L * 1000L);
        } catch (Exception e) {
        }
       
        System.out.println("Shutting Down..");
        // shut down the scheduler
        sched.shutdown(true);

        SchedulerMetaData metaData = sched.getMetaData();
        System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
    }
}

SimpleJob.java


/* SimpleJob.java */

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class SimpleJob implements Job
{
    // Required public empty constructor for job initialization
    public SimpleJob() {
    }
   
    /* execute() method is called by the org.quartz.Scheduler when a org.quartz.Trigger
    * fires that is associated with the org.quartz.Job
    */
    public void execute(JobExecutionContext context) throws JobExecutionException {
       
        System.out.println("Running SimpleJob now :: "+new java.util.Date());
    }
}


quartz.properties

#============================================================================
# Configure Main Scheduler Properties 
#============================================================================

org.quartz.scheduler.instanceName: TestScheduler
org.quartz.scheduler.instanceId: AUTO

org.quartz.scheduler.skipUpdateCheck: true

#============================================================================
# Configure ThreadPool 
#============================================================================

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 3
org.quartz.threadPool.threadPriority: 5

#============================================================================
# Configure Plugins
#============================================================================

org.quartz.plugin.triggHistory.class: org.quartz.plugins.history.LoggingJobHistoryPlugin

org.quartz.plugin.jobInitializer.class: org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames: quartz_data.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound: true
org.quartz.plugin.jobInitializer.scanInterval: 120
org.quartz.plugin.jobInitializer.wrapInUserTransaction: false


quartz_data.xml

<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
    version="1.8">
   
    <pre-processing-commands>
        <delete-jobs-in-group>*</delete-jobs-in-group>  <!-- clear all jobs in scheduler -->
        <delete-triggers-in-group>*</delete-triggers-in-group> <!-- clear all triggers in scheduler -->
    </pre-processing-commands>
   
    <processing-directives>
        <!-- if there are any jobs/trigger in scheduler of same name (as in this file), overwrite them -->
        <overwrite-existing-data>true</overwrite-existing-data>
        <!-- if there are any jobs/trigger in scheduler of same name (as in this file), and over-write is false, ignore them rather then generating an error -->
        <ignore-duplicates>false</ignore-duplicates>
    </processing-directives>
   
    <schedule>
        <job>
            <name>Job1</name>
            <job-class>SimpleJob</job-class>
        </job>
       
        <trigger>
            <simple>
                <name>Trigger1</name>
                <job-name>Job1</job-name>
                <repeat-count>-1</repeat-count> <!-- repeat indefinitely  -->
                <repeat-interval>1000</repeat-interval>  <!--  every 1 seconds -->
            </simple>
        </trigger>

    </schedule  
</job-scheduling-data>


log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

  <appender name="default" class="org.apache.log4j.ConsoleAppender">
    <param name="target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p] %d{dd MMM hh:mm:ss.SSS aa} %t [%c]%n%m%n%n"/>
    </layout>
  </appender>


 <logger name="org.quartz">
   <level value="off" /> <!-- set to "debug" or "info" if you want to enable logs-->
 </logger>

  <root>
    <level value="debug" />
    <appender-ref ref="default" />
  </root>

 
</log4j:configuration>


How to run this example

Simple way is to add all of the above codes in a particular folder.



Compile :

javac -cp quartz-2.1.0.jar SimpleJob.java
javac -cp quartz-2.1.0.jar SimpleQuartzExample.java

Run :

java -Dorg.quartz.properties=quartz.properties -Dlog4j.configuration=file:log4j.xml -cp quartz-2.1.0.jar;slf4j-log4j12-1.6.1.jar;slf4j-api-1.6.1.jar;log4j-1.2.14.jar;jta-1.1.jar;. SimpleQuartzExample


Console Output

Initializing..
Initialization Complete..
Not Scheduling any Jobs - relying on XML definitions..
Scheduler Started..
Running SimpleJob now :: Sat Nov 05 16:37:57 IST 2011
Running SimpleJob now :: Sat Nov 05 16:37:58 IST 2011
Running SimpleJob now :: Sat Nov 05 16:37:59 IST 2011
Running SimpleJob now :: Sat Nov 05 16:38:00 IST 2011
Running SimpleJob now :: Sat Nov 05 16:38:01 IST 2011
Shutting Down..
Running SimpleJob now :: Sat Nov 05 16:38:02 IST 2011
Executed 7 jobs.


Below are the lists of known Errors and Exceptions which I faced while writing this example.

1.
Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/UserTransaction
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
    at java.lang.Class.privateGetPublicMethods(Class.java:2547)
    at java.lang.Class.getMethods(Class.java:1410)
    at java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1280)
    at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1154)
    at java.beans.Introspector.getBeanInfo(Introspector.java:405)
    at java.beans.Introspector.getBeanInfo(Introspector.java:164)
    at org.quartz.impl.StdSchedulerFactory.setBeanProps(StdSchedulerFactory.java:1356)
    at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1028)
    at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1482)
    at com.QuartzExample.main(QuartzExample.java:36)
Caused by: java.lang.ClassNotFoundException: javax.transaction.UserTransaction
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 12 more

Solution : Set jta-1.1.jar in classpath

2.
Exception in thread "main" java.lang.NoClassDefFoundError: SimpleQuartzExample
Caused by: java.lang.ClassNotFoundException: SimpleQuartzExample
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: SimpleQuartzExample.  Program will exit.

Solution : Use below mentioned command to run the program
java -Dorg.quartz.properties=quartz.properties -Dlog4j.configuration=file:log4j.xml -cp quartz-2.1.0.jar;slf4j-log4j12-1.6.1.jar;slf4j-api-1.6.1.jar;log4j-1.2.14.jar;jta-1.1.jar;. SimpleQuartzExample

3.
 Exception in thread "main" java.lang.NullPointerException
        at java.lang.String.startsWith(Unknown Source)
        at java.lang.String.startsWith(Unknown Source)
        at java.util.jar.JarFile.isKnownToNotHaveClassPathAttribute(Unknown Source)
        at java.util.jar.JarFile.hasClassPathAttribute(Unknown Source)
        at java.util.jar.JavaUtilJarAccessImpl.jarFileHasClassPathAttribute(Unknown Source)
        at sun.misc.URLClassPath$JarLoader.getClassPath(Unknown Source)
        at sun.misc.URLClassPath.getLoader(Unknown Source)
        at sun.misc.URLClassPath.access$000(Unknown Source)
        at sun.misc.URLClassPath$1.next(Unknown Source)
        at sun.misc.URLClassPath$1.hasMoreElements(Unknown Source)
        at java.net.URLClassLoader$3$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader$3.next(Unknown Source)
        at java.net.URLClassLoader$3.hasMoreElements(Unknown Source)
        at sun.misc.CompoundEnumeration.next(Unknown Source)
        at sun.misc.CompoundEnumeration.hasMoreElements(Unknown Source)
        at org.slf4j.LoggerFactory.singleImplementationSanityCheck(LoggerFactory.java:216)
        at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:110)
        at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
        at org.quartz.impl.StdSchedulerFactory.(StdSchedulerFactory.java:274)
        at SimpleQuartzExample(SimpleQuartzExample.java:47) 


4. 
Exception in thread "main" java.lang.Error: Can't find java.home ??
    at java.util.logging.LogManager.readConfiguration(LogManager.java:626)
    at java.util.logging.LogManager$2.run(LogManager.java:268)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.util.logging.LogManager.readPrimordialConfiguration(LogManager.java:266)
    at java.util.logging.LogManager.getLogManager(LogManager.java:249)
    at java.util.logging.Logger.(Logger.java:220)
    at java.util.logging.LogManager$RootLogger.(LogManager.java:958)
    at java.util.logging.LogManager$RootLogger.(LogManager.java:955)
    at java.util.logging.LogManager$1.run(LogManager.java:181)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.util.logging.LogManager.(LogManager.java:158)
    at java.util.logging.Logger.getLogger(Logger.java:273)
    at sun.awt.AppContext.(AppContext.java:114)
    at java.beans.Introspector.getBeanInfo(Introspector.java:157)
    at org.quartz.impl.StdSchedulerFactory.setBeanProps(StdSchedulerFactory.java:1329)
    at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:773)
    at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1460)
    at com.PlugInExample.run(PlugInExample.java:50)
    at com.PlugInExample.main(PlugInExample.java:86)
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: Could not initialize class java.util.logging.LogManager
    at java.util.logging.LogManager$Cleaner.run(LogManager.java:212)


5. 
Exception in thread "main" org.quartz.SchedulerException: Properties file: 'quartz.properties' could not be found.
    at org.quartz.impl.StdSchedulerFactory.initialize(StdSchedulerFactory.java:375)
    at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1445)
    at com.PlugInExample.run(PlugInExample.java:50)
    at com.PlugInExample.main(PlugInExample.java:86)


6. 
Exception in thread "main" org.quartz.SchedulerException: File named 'quartz_data.xml' does not exist.
    at org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin$JobFile.initialize(XMLSchedulingDataProcessorPlugin.java:411)
    at org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin$JobFile.(XMLSchedulingDataProcessorPlugin.java:361)
    at org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin.initialize(XMLSchedulingDataProcessorPlugin.java:208)
    at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1276)
    at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1482)
    at com.PlugInExample.run(PlugInExample.java:55)
    at com.PlugInExample.main(PlugInExample.java:94)


7. 
[ERROR] 04 Nov 07:04:22.265 PM main [org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin]
Failed to start UserTransaction for plugin: jobInitializer

org.quartz.SchedulerException: UserTransactionHelper could not lookup/create UserTransaction. [See nested exception: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial]
    at org.quartz.ee.jta.UserTransactionHelper$UserTransactionWithContext.(UserTransactionHelper.java:149)
    at org.quartz.ee.jta.UserTransactionHelper.lookupUserTransaction(UserTransactionHelper.java:109)
    at org.quartz.plugins.SchedulerPluginWithUserTransactionSupport.startUserTransaction(SchedulerPluginWithUserTransactionSupport.java:175)
    at org.quartz.plugins.SchedulerPluginWithUserTransactionSupport.start(SchedulerPluginWithUserTransactionSupport.java:142)
    at org.quartz.core.QuartzScheduler.startPlugins(QuartzScheduler.java:2335)
    at org.quartz.core.QuartzScheduler.start(QuartzScheduler.java:519)
    at org.quartz.impl.StdScheduler.start(StdScheduler.java:143)
    at com.PlugInExample.run(PlugInExample.java:67)
    at com.PlugInExample.main(PlugInExample.java:94)
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at org.quartz.ee.jta.UserTransactionHelper$UserTransactionWithContext.(UserTransactionHelper.java:146)
    ... 8 more


8. 
log4j:ERROR Could not parse url [file:C:/../log4j.xml].
java.io.FileNotFoundException: C:\..\log4j.xml (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.(FileInputStream.java:106)
    at java.io.FileInputStream.(FileInputStream.java:66)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:653)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:180)
    at org.apache.log4j.xml.DOMConfigurator$2.parse(DOMConfigurator.java:612)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:711)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:618)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:470)
    at org.apache.log4j.LogManager.(LogManager.java:122)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
    at com.PlugInExample.run(PlugInExample.java:39)
    at com.PlugInExample.main(PlugInExample.java:94)
log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory).
log4j:WARN Please initialize the log4j system properly.


9. 
Exception in thread "main" org.quartz.SchedulerException: Properties file: 'C:/../quartz.properties' could not be found.
    at org.quartz.impl.StdSchedulerFactory.initialize(StdSchedulerFactory.java:388)
    at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1467)
    at com.PlugInExample.run(PlugInExample.java:55)
    at com.PlugInExample.main(PlugInExample.java:94)


10. 
log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory).
log4j:WARN Please initialize the log4j system properly.


11. 
log4j:ERROR Could not parse url [file:log4j.xml].
java.io.FileNotFoundException: log4j.xml (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.(FileInputStream.java:106)
    at java.io.FileInputStream.(FileInputStream.java:66)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:653)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:180)
    at org.apache.log4j.xml.DOMConfigurator$2.parse(DOMConfigurator.java:612)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:711)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:618)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:470)
    at org.apache.log4j.LogManager.(LogManager.java:122)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:242)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
    at org.quartz.impl.StdSchedulerFactory.(StdSchedulerFactory.java:274)
    at com.PlugInExample.run(PlugInExample.java:54)
    at com.PlugInExample.main(PlugInExample.java:94)
log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory).
log4j:WARN Please initialize the log4j system properly.
 


12. 
Exception in thread "main" org.quartz.SchedulerException: SchedulerPlugin class 'SimpleQuartzExample' could not be instantiated. [See nested exception: java.lang.ClassCastException: com.PlugInExample cannot be cast to org.quartz.spi.SchedulerPlugin]
    at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1022)
    at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1482)
    at com.PlugInExample.run(PlugInExample.java:55)
    at com.PlugInExample.main(PlugInExample.java:91)
Caused by: java.lang.ClassCastException: com.PlugInExample cannot be cast to org.quartz.spi.SchedulerPlugin
    at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1019)
    ... 3 more



Note :
Please follow the proper steps to avoid above errors and exceptions. Also if possible use IDE like Eclipse, My Eclipse or Net Beans to make it faster. The above example I made is without IDE.

If  you are using IDE make sure to add, below mentioned parameters.
 -Dorg.quartz.properties=quartz.properties -Dlog4j.configuration=file:log4j.xml 

Right click on project -> Properties -> Run/Debug Settings -> New -> Java Application -> Arguments -> VM arguments (add above parameters) -> Apply / OK