Wednesday, April 30, 2014

Spring JDBC Logging

# Root logger option
log4j.rootLogger=DEBUG, file, stdout

# Daily rolling file appender
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=logs/jdbc.log
log4j.appender.file.Append=true
log4j.appender.file.DatePattern='.'dd-MM-yyyy
log4j.appender.file.encoding=UTF-8
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n
#log4j.appender.file.layout.ConversionPattern=%p %t %c - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L -  %m%n`
#log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
#log4j.appender.stdout.layout.ConversionPattern=%p %t %c - %m%n

# Spring JDBC logging
log4j.logger.org.springframework.jdbc=DEBUG
log4j.logger.org.springframework.jdbc.core.JdbcTemplate=DEBUG, file
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=TRACE, file

# Spring Transaction logging
log4j.logger.org.springframework.transaction=INFO
log4j.logger.org.springframework.transaction.interceptor=TRACE
#log4j.logger.org.springframework.jdbc.datasource.DataSourceTransactionManager=DEBUG
#log4j.logger.org.springframework.orm.jpa=INFO

# Hibernate Transaction logging
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.engine.transaction=DEBUG
log4j.logger.org.springframework.orm.hibernate3.HibernateTransactionManager=DEBUG

# BoneCP Connection Pooling logging
#log4j.category.com.jolbox=DEBUG,stdout


-------------------------------------------------------------------------------
Note:
Spring JDBCTemplate is using common-logging API to log.
And if you are using log4j in your application, you will have to add
common logging bridge for the same. Add following in your pom.xml
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-jcl</artifactId>
    <version>2.0-rc1</version>
</dependency>
-------------------------------------------------------------------------------

Note: Logging Spring in IBM Websphere click -------------------------------------------------------------------------------

Thursday, April 17, 2014

ResultSet PrintColumns

package com.jini.jdbc;

import java.sql.*;
public class PrintColumns {
    public static void main(String args[]) {
        String url = "jdbc:mysql://localhost/test";
        Connection con;
        String query = "select * from STUDENT";
        Statement stmt;
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (java.lang.ClassNotFoundException e) {
            System.err.print("ClassNotFoundException: ");
            System.err.println(e.getMessage());
        }
        try {
            con = DriverManager.getConnection(url, "root", "123");
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            ResultSetMetaData rsmd = rs.getMetaData();

            PrintColumnTypes.printColTypes(rsmd);
            System.out.println("");

            int numberOfColumns = rsmd.getColumnCount();

            for (int i = 1; i <= numberOfColumns; i++) {
                if (i > 1)
                    System.out.print(",  ");
                String columnName = rsmd.getColumnName(i);
                System.out.print(columnName);
            }
            System.out.println("");

            while (rs.next()) {
                for (int i = 1; i <= numberOfColumns; i++) {
                    if (i > 1)
                        System.out.print(",  ");
                    String columnValue = rs.getString(i);
                    System.out.print(columnValue);
                }
                System.out.println("");
            }

            stmt.close();
            con.close();
        } catch (SQLException ex) {
            System.err.print("SQLException: ");
            System.err.println(ex.getMessage());
        }
    }
} // end of class

class PrintColumnTypes {
    public static void printColTypes(ResultSetMetaData rsmd)
            throws SQLException {
        int columns = rsmd.getColumnCount();
        for (int i = 1; i <= columns; i++) {
            int jdbcType = rsmd.getColumnType(i);
            String name = rsmd.getColumnTypeName(i);
            System.out.print("Column " + i + " is JDBC type " + jdbcType);
            System.out.println(", which the DBMS calls " + name);
        }
    }
} // end of class

Enabling Profiling

-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=syntw.synt.com --------------------------------------------------
set JAVA_OPTS=%JAVA_OPTS%
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
--------------------------------------------------
Websphere Profiling Using Visual VM
@ Admin Console
@ Servers->Server types->WebSphere application servers->server1->Process definition->Java Virtual Machine

@ Add the following line into the field of Generic JVM Argument :
-Djavax.management.builder.initial=
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=syntw.synt.com
-Dcom.sun.management.jmxremote.local.only=false
@ Test using netstat –a
@ Connect VisualVM !
@ Alternatively you can set the properties in the management.properties file located in the installation directory of the WebSphere application server\AppServer\java\jre\lib\magagement 
 --------------------------------------------------
Analyzing Java Memory

Spring with Log4j Initialization

import org.apache.log4j.BasicConfigurator;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class zzZZMain {
    private static ApplicationContext context = null;
    static {
        BasicConfigurator.configure();
        context = new ClassPathXmlApplicationContext("classpath*:com/jini/TESTING/application*.xml");
        }
    public static Object getBean(String beanName) {
        return context.getBean(beanName);
    }
    public static void main(String[] args) throws Exception {
        System.out.println("--------- SpRiNg and lOg4j iNiTiaLiZaTion successfull --------");
    } // end of main()
} // end of class

Beanutils CopyUtil

import java.lang.reflect.InvocationTargetException;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.beanutils.converters.DateConverter;
public class BeanPropertyCopyUtil {
        public static void copyProperties(Object src, Object dest, String... properties)
                    throws IllegalAccessException, InvocationTargetException, NoSuchMethodException
         {
            DateConverter dtConverter = new DateConverter();
            dtConverter.setPattern("dd-MMM-yyyy");
            BeanUtilsBean beanUtilsBean = BeanUtilsBean.getInstance();
            beanUtilsBean.getConvertUtils().register(dtConverter, java.util.Date.class);
           
                for (String property : properties) {
                        String[] arr = property.split(" ");
                        String srcProperty;
                        String destProperty;
                        if (arr.length == 2) {
                                srcProperty = arr[0];
                                destProperty = arr[1];
                        } else {
                                srcProperty = property;
                                destProperty = property;
                        }
                        String tmpStr = BeanUtils.getProperty(src, srcProperty).trim();
                        if(!tmpStr.equals("")){
                            //System.out.println("String is :" + tmpStr+":size:"+tmpStr.length() );
                            //BeanUtils.setProperty(dest, destProperty, BeanUtils.getProperty(src, srcProperty));
                            BeanUtils.setProperty(dest, destProperty, tmpStr);
                        }
                }
        } // end of method
}

Linear Search (Grouping)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.Data;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
class LinearSearchDemo {
      public static void main( String ... args ) {
          List list = Arrays.asList(
                                      Person.create("Oscar", 0x20),
                                      Person.create("Reyes", 0x30),
                                      Person.create("Java", 0x10),
                                      Person.create("Java", 0x20),
                                      Person.create("Java", 0x30),
                                        Person.create("Java", 0x40)
                              );
 
            // Based on Generic
           List result = searchIn(list, new Matcher() {
                public boolean matches(Person p) {
                    return p.getName().equals("Java");
                }
            });
            System.out.println("Using Generic : " + result);

            result = searchIn(list, new Matcher() {
                public boolean matches(Person p) {
                    return p.getAge() > 16;
                }
            });
            System.out.println(result);
            // Based on Guava Multimap
            ListMultimap peopleByFirstName = ArrayListMultimap.create();
            for (Person person : list) {
                peopleByFirstName.put(person.getName(), person);
            }
            System.out.println("Usign Guava : " + peopleByFirstName.get("Java"));
            // Normal Coding
            Map> map = new HashMap>();
            for (Person person : list) {
                String key = person.getName();
                if (map.get(key) == null) {
                    map.put(key, new ArrayList());
                }
                map.get(key).add(person);
            }
            System.out.println("Normal Coding :" + map.get("Java"));

      } // end of main

      public static List searchIn( List list , Matcher m ) {
          List r = new ArrayList();
          for( T t : list ) {
              if( m.matches( t ) ) {
                  r.add( t );
              }
          }
          return r;
      } // end of method

    } // end of class

    interface Matcher {
      public boolean matches( T t );
    } // end of interface

    @Data
    class Person {
      String name;
      int age;
      static Person create( String name, int age ) {
          Person p = new Person();
          p.name = name;
          p.age = age;
          return p;
      }
    } // end of class