Tuesday, August 10, 2010

In Java, you can create a String object as below : String str = "abc"; & String str = new String("abc"); Why cant a button object be created as : Button bt = "abc"? Why is it compulsory to create a button object as: Button bt = new Button("abc"); Why this is not compulsory in String’s case?

Button buttonObj = "Submit"; It is because "Submit" is a literal string (slightly different than a String object)
 and buttonObj is a Button object. That simple. The only object in Java that can be assigned a literal String is java.lang.String.
 Important to not that you are NOT calling a java.lang.String constuctor when you type String s = "Submit";
 For example String a = "Submit"; String b = "Submit"; refer to the same object. While String a1 = new String("Submit");
String b1 = new String("Submit"); refer to two different objects.

Thursday, August 5, 2010

Get the currently logged in users

This code example shows how to get  details of currently logged  users in a web application.

import java.util.HashSet;
import java.util.Set;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class UserCounterListener implements ServletContextListener,
                                            HttpSessionAttributeListener {
    public static final String COUNT_KEY = "userCounter";
    public static final String USERS_KEY = "userNames";
    private final transient Log log = LogFactory.getLog(UserCounterListener.class);
    private transient ServletContext servletContext;
    private int counter;
    private Set users;

    public synchronized void contextInitialized(ServletContextEvent sce) {
        servletContext = sce.getServletContext();
        servletContext.setAttribute((COUNT_KEY), Integer.toString(counter));
    }

    public synchronized void contextDestroyed(ServletContextEvent event) {
        servletContext = null;
        users = null;
        counter = 0;
    }

    synchronized void incrementUserCounter() {
        counter =
            Integer.parseInt((String) servletContext.getAttribute(COUNT_KEY));
        counter++;
        servletContext.setAttribute(COUNT_KEY, Integer.toString(counter));

        if (log.isDebugEnabled()) {
            log.debug("User Count: " + counter);
        }
    }

    synchronized void decrementUserCounter() {
        int counter =
            Integer.parseInt((String) servletContext.getAttribute(COUNT_KEY));
        counter--;

        if (counter < 0) {
            counter = 0;
        }

        servletContext.setAttribute(COUNT_KEY, Integer.toString(counter));

        if (log.isDebugEnabled()) {
            log.debug("User Count: " + counter);
        }
    }

    synchronized void addUsername(Object user) {
        users = (Set) servletContext.getAttribute(USERS_KEY);

        if (users == null) {
            users = new HashSet();
        }

        if (log.isDebugEnabled()) {
            if (users.contains(user)) {
                log.debug("User already logged in, adding anyway...");
            }
        }

        users.add(user);
        servletContext.setAttribute(USERS_KEY, users);
        incrementUserCounter();
    }

    synchronized void removeUsername(Object user) {
        users = (Set) servletContext.getAttribute(USERS_KEY);

        if (users != null) {
            users.remove(user);
        }

        servletContext.setAttribute(USERS_KEY, users);
        decrementUserCounter();
    }

    public void attributeAdded(HttpSessionBindingEvent event) {
        if (event.getName().equals("loggedinUser")) {
            addUsername(event.getValue());
        }
    }

    public void attributeRemoved(HttpSessionBindingEvent event) {
        if (event.getName().equals("loggedinUser")) {
            removeUsername(event.getValue());
        }
    }

    public void attributeReplaced(HttpSessionBindingEvent event) {
    }
}


 add declare listener class in web.xml .


   <listener>
      <listener-class>UserCounterListener</listener-class>
   </listener>



The list of logged in users will be in session  with attribute "userNames".

Wednesday, August 4, 2010

About this blog

Hi All
I am currently working  as java system analyst in a company in technopark,Trivandrum.This blog was to share my knowledge in java with you.

This blog contains 
  • Java Tips
  • Java code samples
  • Java Interview Questions
  • Java certification Tips