Hi,

Jay SenSharma

Jay SenSharma

WebLogic 10 And WebLogic 10.3 creates a Jar file (_wls_cls_gen.jar)while deploying our Archieved Applications (WAR files). Which includes all the contains available inside the WEB-INF/classes directory inside this jar file(_wls_cls_gen.jar). I didnot find a way to tell WebLogic Server to not to create this JAR file, because it creates many issues.

Example: if we have placed a Property file or Some XML files  inside the “WEB-INF/classes” directory with the name “test.properties” or “test.xml” then WebLogic Server will place this Property file as well inside the (_Wls_cls_gen.jar) file while deployment…

zip:C:/bea103/user_projects/domains/Test_Domain/servers/AdminServer/tmp/_WL_user/testWebApp/8j5e1y/war/WEB-INF/lib/_wl_cls_gen.jar!/test.properties

Now if we write the following code inside out application like Servlet then it won’t work and will fail while reading the Properties file:

Note: Many frameworks uses the Following techinques and Sometimes WebLogic Code causes this issue..(http://forums.oracle.com/forums/thread.jspa?messageID=4217650#4217650 AND   http://forums.oracle.com/forums/thread.jspa?threadID=2223518&tstart=105 )…which may cause our applications to fail while reading jar Archieved resources. because they uses the following techinque to read the resources available inside a JAR file:

——————————————-WRONG – APPROACH – BELOW———————

InputStream stream = null;
try {
Properties p = new Properties();
String path=Thread.currentThread().getContextClassLoader().getResource("Info.properties").getPath();
System.out.println("----------------PATH: "+path);
p.load(new java.io.FileInputStream(path));
Host = p.getProperty("Host");
Pot = p.getProperty("Port");
User = p.getProperty("User");
Passwd = p.getProperty("Passwd");
System.out.println("Property Key-Values:" +"\n"+ Host +"\n"+ Pot + "\n"+User+ "\n"+Passwd);
} catch (Exception e) {
e.printStackTrace();
}

To avoid the above issue…we need to change our code like following: most of the Frameworks also need to change their implementations…

———————— CORRECT – APPROACH – BELOW ——————-

InputStream stream = null;
System.out.println("------------------------------------");
try {
Properties p = new Properties();
stream=this.getClass().getClassLoader().getResourceAsStream("Info.properties");
p.load(stream);
Host = p.getProperty("Host");
Pot = p.getProperty("Port");
User = p.getProperty("User");
Passwd = p.getProperty("Passwd");
System.out.println("Property Key-Values:" +"\n"+ Host +"\n"+ Pot + "\n"+User+ "\n"+Passwd);
} catch (Exception e) {
e.printStackTrace();
}

The above piece of code can be used whenever we want to read a Non-Class/Class resource from inside a JAR file.

Thanks

Jay SenSharma