Friday, July 27, 2012

How to read properties file using ANT

Suppose You have to access some properties (from a file), which are already defined in my build file. To be able to access the properties We can use the build attribute of the property task. 

build.properties

#Release information 
#Thu Oct 14 16:25:12 CEST 2004
build.number=115
release.version=0.4
release.name=framework
 
Ant Example Target

<target name="read.properties">    
  <!-- Read the properties from the release of the framework -->
  <property file="build.properties" prefix="build"/>
  <echo message="${build.build.number}"/>
  <echo message="${build.release.version}"/>
  <echo message="${build.release.name}"/>    
</target> 
 
Output

Buildfile: C:\build.xml
read.properties:
  [echo] 115
  [echo] 0.4
  [echo] framework
BUILD SUCCESSFUL
Total time: 3 seconds

Monday, July 23, 2012

chkconfig Command Examples

chkconfig command is used to setup, view, or change services that are configured to start automatically during the system startup.

chkconfig has five distinct functions: adding new services for management, removing services from management, listing the current startup information for services, changing the startup information for services, and checking the startup state of a particular service.

chkconfig --list [name]
chkconfig --add name
chkconfig --del name
chkconfig [--level levels] name <on|off|reset>
chkconfig [--level levels] name 

OPTIONS

--level levels
Specifies the run levels an operation should pertain to. It is given as a string of numbers from 0 to 7. For example, --level 35 specifies runlevels 3 and 5.
--add name
This option adds a new service for management by chkconfig.
--del name
The service is removed from chkconfig management.
--list name
This option lists all of the services which chkconfig knows about, and whether they are stopped or started in each runlevel. If name is specified, information in only display about service name
 
Example : 

1 .  How to add any scripts in the chkconfig ?

You have to modify the script a little bit to make it work at boot time. Just add the following lines at the beginning of the file

#!/bin/sh
#chkconfig: 2345 80 30 
#description: Service Description


This says that the random script should be started in levels 2, 3, 4, and 5, that its start priority should be 80, and that its stop priority should be 30. You should be able to figure out what the description says; the \ causes the line to be continued. The extra space in front of the line is ignore
Note : There is no space in between '#' and 'chkconfig'.

2.  Copy your scripts into init.d folder.
    copy the scripts file to /etc/init.d.

3. How to add service to the startup

   chkconfig --add service_name

4. How to view status of startup services
     chkconfig --list
     To view particular service : chkconfig --list | grep service_name
   
 5. How to remove a service from startup list
   chkconfig --del service_name

6. How to Turn-on or Turn-off a service for a selected Run level
   Sometimes you might not want to delete the whole service. Instead, you might just want to turn the  flag on or off for a particular run level (for a particular service).
   chkconfig --level 3 service_name on/off 

 7. How to check service startup status from shell script
    create a file check.sh
    vi check.sh
    chkconfig service_name && echo "${service_name} service is configured"
    chkconfig service_name --level 3 && echo "${service_name} service is configured for level 3"
  
   ./check.sh


NOTE:

 - Run level 0 – /etc/rc.d/rc0.d/
 - Run level 1 – /etc/rc.d/rc1.d/
 - Run level 2 – /etc/rc.d/rc2.d/
 - Run level 3 – /etc/rc.d/rc3.d/
 - Run level 4 – /etc/rc.d/rc4.d/
 - Run level 5 – /etc/rc.d/rc5.d/
 - Run level 6 – /etc/rc.d/rc6.d/

 - Under the /etc/rc.d/rc*.d/ directories, you would see programs that start with S and K.
 - Programs starts with S are used during startup. S for startup.
 - Programs starts with K are used during shutdown. K for kill.
 - There are numbers right next to S and K in the program names. Those are the sequence number in which the programs should be started or killed.


Sunday, July 15, 2012

Embedding Jetty Tutorial

Jetty :

Jetty is an open source servlet container, which means it serves Java-based web content such as servlets and JSPs. Jetty is written in Java and its API is available as a set of JARs. Developers can instantiate a Jetty container as an object, instantly adding network and web connectivity to a stand-alone Java app.

Jetty has a slogan, "Don't deploy your application in Jetty, deploy Jetty in your application." What this means is that as an alternative to bundling your application as a standard WAR to be deployed in Jetty, Jetty is designed to be a software component that can be instantiated and used in a Java program just like any POJO. Put another way, running Jetty in embedded mode means putting an HTTP module into your application, rather than putting your application into an HTTP server. 

To embed a Jetty server, the following steps are typical:
  1. Create the server
  2. Add/Configure Connectors
  3. Add/Configure Handlers
  4. Add/Configure Servlets/Webapps to Handlers
  5. Start the server
  6. Wait (join the server to prevent main exiting)

Creating a Server 

public class SimpleServer {
    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);
        server.start();
        server.join();
    }
}
 
This runs an HTTP server on port 8080.  It is not a very useful server as it has no handlers and 
thus returns a 404 error for every request. 
 

Writing Handlers

To produce a response to a request, Jetty requires a Handler to be set on the server. 

public class SimpleHandler extends AbstractHandler {
    public void handle(String target,Request baseRequest,HttpServletRequest
          request, HttpServletResponse response)  
          throws IOException, ServletException {
        response.setContentType("text/html;charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        response.getWriter().println("<h1>Hello World</h1>");
    }
}
 
The parameters passed to the handle method are:
  • target–the target of the request, which is either a URI or a name from a named dispatcher.
  • baseRequest–the Jetty mutable request object, which is always unwrapped.
  • request–the immutable request object, which might have been wrapped.
  • response–the response, which might have been wrapped. 

how a Jetty server can use this handler: 

public static void main(String[] args) throws Exception {
    Server server = new Server(8080);
    server.setHandler(new HelloHandler());
    server.start();
    server.join();
}

Some of the handlers available in Jetty in the org.eclipse.jetty.server.handler package.  

Configuring Connectors

To configure the HTTP connectors that the server uses, you can set one or more connectors on the server. You can configure each connector with details such as interface, port, buffer sizes, timeouts, thread pool etc.

How to set and configure multiples connectors :

public class MultipleConnectors {
    public static void main(String[] args) throws Exception {
  
        Server server = new Server();
 
        SelectChannelConnector connector0 = new SelectChannelConnector();
        connector0.setPort(8080);
        connector0.setMaxIdleTime(30000);
        connector0.setRequestHeaderSize(8192);
 
        SelectChannelConnector connector1 = new SelectChannelConnector();
        connector1.setHost("127.0.0.1");
        connector1.setPort(8888);
        connector1.setThreadPool(new QueuedThreadPool(20));
        connector1.setName("Thread Name");
 
        SslSelectChannelConnector ssl_connector = new SslSelectChannelConnector();
        String jetty_home = 
          System.getProperty("jetty.home","../jetty-distribution/target/distribution");
        System.setProperty("jetty.home",jetty_home);
        ssl_connector.setPort(8443);
        SslContextFactory cf = ssl_connector.getSslContextFactory();
        cf.setKeyStore(jetty_home + "/etc/keystore");
        cf.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
        cf.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
 
        server.setConnectors(new Connector[]{ connector0, connector1, ssl_connector });
        server.setHandler(new HelloHandler());
 
        server.start();
        server.join();
    }
}

Setting a Web Application Context 

A Web Applications context is a variation of ServletContextHandler that uses the standard layout and web.xml to configure the servlets, filters and other features:  

public class SimpleWebApp {
    public static void main(String[] args) throws Exception {
        String jetty_home = System.getProperty("jetty.home","..");
 
        Server server = new Server(8080);
 
        WebAppContext webapp = new WebAppContext();
        webapp.setContextPath("/");
        webapp.setWar(jetty_home+"/webapps/test.war");
        server.setHandler(webapp);
 
        //If you have not assembled your application into a WAR file,  
        /*  
        WebAppContext context = new WebAppContext();
        context.setDescriptor(webapp+"/WEB-INF/web.xml");
        context.setResourceBase("../test-jetty-webapp/src/main/webapp");
        context.setContextPath("/");
        context.setParentLoaderPriority(true);
 
        server.setHandler(context);*/
 
        //How to set ThreadPool
        QueueThreadPool pool = new QueueThreadPool();
        pool.setMaxthreads(20);
        pool.setMinthreads(5);
        server.setThread(pool);
 
        server.start();
        server.join();
    }
}
 
Important URL:
Download jetty link

 References :
 

 Tutorial :

 Very soooon... 

 


Friday, July 6, 2012

How to find default thread pool size programmatically

To find out jetty thread pool size programmatically :

ThreadPool tp = (ThreadPool) server.getThreadPool();
if(tp instanceof QueuedThreadPool) {
QueuedThreadPool qtp = (QueuedThreadPool) tp;
int minThreads = qtp.getMinThreads();
int maxThreads = qtp.getMaxThreads();
LOG.info("minThreads : " + minThreads + "\t maxThreads :" + maxThreads)
}

How TOPT Works: Generating OTPs Without Internet Connection

Introduction Have you ever wondered how authentication apps like RSA Authenticator generate One-Time Passwords (OTPs) without requiring an i...