lsof and Unclosed file handlers
After checking out a blog entry about analyzing Classpath of a running Java program by Thilina Mahesh Buddhika, i decided to try the command on the Java Web server used at my organization. To my surprise, i was able to find unclosed file handlers in the application hosted on the Web server.

The command lsof -p lists all open sockets, files and pipes. By analyzing the output of the command, i was able to check all the files opened by the application and able to reason why it was open by going through the application code. This also helped me in fixing unclosed file handlers.
Try out the command and try figuring out why the files are referred to. This gives an insight to functioning of the application.
Check out the usage of the command @ following link http://sial.org/howto/debug/unix/lsof/
Generating the DDL(Create and DROP) Statements of JPA Entities in EclipseLink
This blog is about generating the DDL Statements (CREATE and DROP DDL) for the entities managed by the JPA. The JPA implementation used here is EclipseLink.
I have used the following Person class to be managed as Entity.
package com.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
int id;
String fName;
String lName;
int age;
//the setter, getter, methods for each of the attributes, toString,
//hashCode, equals and default constructor are not shown here.
}
The persistence.xml file is as follows.
<?xml version="1.0" encoding="UTF-8"?> <persistence:persistence version="1.0" xmlns:persistence="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence ../../persistence_1_0.xsd "> <persistence:persistence-unit name="simplePersistenceUnit"> <persistence:provider>org.eclipse.persistence.jpa.PersistenceProvider</persistence:provider> <persistence:class>com.entities.Person</persistence:class> <persistence:properties> <persistence:property name="eclipselink.jdbc.driver" value="com.mysql.jdbc.Driver"/> <persistence:property name="eclipselink.jdbc.url" value="jdbc:mysql://localhost:3306/default"/> <persistence:property name="eclipselink.jdbc.user" value="root"/> <persistence:property name="eclipselink.jdbc.password" value="developer"/> </persistence:properties> </persistence:persistence-unit> </persistence:persistence>
The persistence.xml contains information about the database.
The DDL generation information is provided to the persistence manager via a java.util.Map object.
package com.test;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.junit.Before;
import org.junit.Test;
public class TestExampleJPA {
EntityManager em;
@Test
public void testDDLGeneration() {
Map<String, String> persistProperties = new HashMap<String, String>();
persistProperties.put(PersistenceUnitProperties.DDL_GENERATION, "create-tables");
persistProperties.put(PersistenceUnitProperties.DDL_GENERATION_MODE, "sql-script");
persistProperties.put(PersistenceUnitProperties.APP_LOCATION, "C:\MyFolder\temp");
EntityManagerFactory emf = Persistence.createEntityManagerFactory( "simplePersistenceUnit", persistProperties);
em = emf.createEntityManager();
}
}
I have specified the database information in the persistence.xml file and DDL generation information into a Map object and providing it at runtime when creating the EntityManagerFactory object. Both the information can be provided fully either as part of persistence.xml or Map object. I have combined both approaches for providing configuration information to JPA.
On executing the above test case the following sql files which contains the DDL for CREATE and DROP are created in C:\MyFolder\temp folder.

References:
http://wiki.eclipse.org/EclipseLink/Examples/JPA/OutsideContainer
http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)
Unix Script + Java = Solve tasks easily.
The example given below shows the way the unix scripts and other programs (in this case, it is java program) can be combined to tackle simple problems.
The example script calls a java program to check the status of a URL. The Shell script gets the list of all URLs that needs to be checked via a file urlList and checks the status of each of the URL via the java program com.util.GetHttpResponse and then if the response is not equal to 200, sends a mail.
The java program to check the status of the URL can be replaced by any program that provides the same functionality. This program shows how unix shell scripts can be combined effortlessly to solve tasks.
There are a numerous way to get the status code of a HTTP URL. The post shows using Java. This simple tool can be used to check the status of a list of URLs and if down send information to the concerned person. This script can be invoked through cron to regularly check the state of URLs. This can be extended to check the state of other protocols also.
The unix shell script.
#!/bin/ksh
# Visit http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html for
# more information in HTTP Status Response Code
# Response of 200 specifies successful Request
for eachUrl in `cat urlList`
do
responseStatusCode=`java com.util.GetHttpResponse $eachUrl`
echo "URL: $eachUrl RESPONSE CODE: $responseStatusCode"
if [[ $responseStatusCode != "200" ]]
then
mailx -s "The URL $eachUrl did not return successful
request status. The HTTP response status is
$responseStatusCode. Please Check."
someone@somewhere.com
fi
done
The java Class com.util.GetHttpResponse.
package com.util;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class GetHttpResponse {
public static void main(String[] args) {
new GetHttpResponse().getWebPage(args[0]);
}
public void getWebPage(String pageUrl) {
if (pageUrl == null) {
throw new IllegalArgumentException("pageUrl cannot be null");
}
try {
URL webPageUrl = new URL(pageUrl);
HttpURLConnection conn = (HttpURLConnection) webPageUrl.openConnection();
conn.setRequestMethod("GET");
System.out.println(conn.getResponseCode());
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
For Complete details on HTTP Status response code, visit
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=a3c97381-e882-4723-9acb-56dc5cbcc1d3)

![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=b4430830-8678-489f-953e-fa3abc4c44eb)


leave a comment