Friday, 19 September 2014

Capgemini Interview Questions and Answers for Java 3-8 Year Experience

Experience Java/J2ee interview Questions asked by Capgemini.



1. Tell me about yourself ?

Ans : Give your brief introduction.

2. Explain about your current project?

Ans : It’s quite easy to describe your projects and your key role on this project. But, be careful and get ready about the functionality when you are describing your working module / part of the project. Show your confidence that you have done the major part and you can face challenges in future.

3. How many types of literals are there in JAVA ?

Ans : The literals means the value you are assigning to variable. You can specify the below types of literal in java.As per the primitive data types(int,short,long,float,double,boolean,char ,etc there is respective literal. Some literal needs to be ended with a specific character.Read More.

           long var=20L; //specify L or l for long literal
int var=20; // If not mentioned any character then its can be short or int
char var=’A’;
float var=10.44f; //specify f or F for float literal
double var=10.44;
boolean var=true; //or false
               

4. What is meant by Garbage collection ?

Ans :  Garbage collection is a automatic feature of java for cleaning the unused object from heap. It helps to developer for releasing the reserved memory without any extra effort by developer. It helps developer to save time and extra mental tension for handling object allocation in memory. When there is no reference to an object found, it will clean that object from memory . You can run the garbage collection explicitly by using System.gc() .    

5. Diffference between string s= new string (); and string s = "Hi Dude"; ?

Ans : Both statements are different to each other. Always ‘new’ keyword is used to create object.

String s=new String(); // This statement creates new object in heap. S is the object here.
String s=”Hi Dude” ; // This statement do not create object, its creating reference and its storing in String Constant Pool.S is the reference here.


6. What is singleton class? where is it used ?


7. What is the difference between JSP and Servlets ?

Ans : As simple JSP is pre-compiled but Servlets are not. JSP is specially use for displaying/populating the data on browser. If we take an example of MVC architecture JSP plays the role of View (V). But, Servlets are used to handle the request and process the business logic. In MVC architecture Servlets are knows as Controller (C) .

8. What is the difference in using request.getRequestDispatcher() and context.getRequestDispatcher()?

Ans : Both are taking String parameter, but request.getRequestDispatcher() will dispatch the request inside the application. Where as context.getRequestDispatcher() will dispatch the request outside the context also. If you are using absolute path for dispatching then both are similar.

9. How the JSP file will be executed on the Server side ?

Ans : First its converted to java file. Then its compiled  by java compiler and creates the .class file.Now once you get the .class file you can execute it. Internally a JSP converts into respective servlet.

Conversion => Compilation => Execution

10. What is ActionServlet ?

Ans : ActionServlet provides the controller in struts application with MVC (Model-View-Controller) Model 2. 
ActionServlet is a sub class of javax.servlet.http.HttpServlet.It has few methods like
doGet(),doPost(),destroy(),etc.


11. What is Struts Validator Framework ?
Ans : Struts provides a convenient way to validate. Basically we are using two xml configuration file for configuring such as Validator.xml and validation-rule.xml . validation-rule.xml defines the rule of validation like number format validation,email validation. Apart from this ActionForm having validate() method which we can implement for validating the form data.


12. What is the difference between the Session and SessionFactory in hibernate ?

Ans : Session and SessionFactory are playing a prominent role in hibernate. SessionFactory is used to create Session  and its created once during starting of the application. You can have only one SessionFactory per application. SessionFactory is also called 2ndlevel cache. But, Session could be many per application. Session is being created by using SessionFactory object.Session is called 1st level cache.

13. What is HQL ? 

Ans : HQL stands for Hibernate Query Language. Its fully object oriented and quite similar with SQL.It supports association and joins for effective entity relationship.



Wednesday, 17 September 2014

STUCK Thread in weblogic server - Hogging Thread

 As we all know facing issue with you job is casual. But, its too difficult, if you stuck somewhere and eat your own head and goooooogle all expected sites for solutions. Such kind of issues which you don't know what might be the root cause for this issue. For any issue we need application logs and if logs are not sufficient then you might go for bit deep level like thread dump.

Hogging thread in weblogic server is most often issue, but there is no such direct solution you found from internet.

What is a Hogging Thead ?



Hogging thread is thread which never back or never release the resource. Its a STUCK thread. When a thread starts an execution, it should return or complete the task and release the thread.But, hogging thread occurs when a thread wait for more than StuckThreadMaxTime.The normal time setting for StuckThreadMaxTime is 600sec.When a thread wait more than StuckThreadMaxTime , its known as hogging thread. 

 I faced such hogging thread issue in my project ,when support team reported that there are many hogging threads on server. From that time , it started eating the head.Below error log shows my issue.

Error log :-
<11/08/2014 4:50:00 PM EST> <Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: '452' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "697" seconds working on the request "Workmanager: default, Version: 1, Scheduled=true, Started=true, Started time: 697198 ms
[
POST /centre_service/CentreService HTTP/1.1
Content-Type: text/xml; charset=utf-8
CorID: C3C7E9100AFF811A5C061CD2BE603C85,1:1:1:1,0,0,esb02.srv.xxx.com|WebLogic|esb_server2|OSB|BusinessServices|customer_centre/business_services/centre_service_biz_bs,6,AgAAA7xIQgAAAAFGAAAAAQAAABFqYXZhLnV0aWwuSGFzaE1hcAAAAAxIQgAAAAJGAAAAAgAAABBqYXZhLmxhbmcuU3RyaW5nABFBcHBNYXBDYWxsZXJBZ2VudEhCAAAAA0UAAAACABJlc2Jfb25saW5lX3NlcnZlcjJIQgAAAARFAAAAAgAWQXBwTWFwQ2FsbGVyTWV0aG9kTmFtZUhCAAAABUUAAAACABxIdHRwVHJhbnNwb3J0U2VydmxldHxzZXJ2aWNlSEIAAAAGRQAAAAIAClR4blRyYWNlSWRIQgAAAAdFAAAAAgAgQzNDN0U5MzhDNjhFNzYxNDIyQkZDMzNGMjQ5NTBBRkFIQgAAAAhFAAAAAgAQQXBwTWFwQ2FsbGVyVHlwZUhCAAAACUUAAAACAAdTZXJ2bGV0SEIAAAAKRQAAAAIAEHByZXZfa1R4blRyYWNlSWRIQgAAAAtFAAAAAgAkQzNDNzk1QkNDNjhFNzYxNDIyQkZDMzNGOUFCQzgwQjA0MjY3SEIAAAAMRQAAAAIAD0NhbGxlclRpbWVzdGFtcEhCAAAADUUAAAACAA0xNDA3NzM4OTY0MjgwSEIAAAAORQAAAAIAEEFwcE1hcENhbGxlckhvc3RIQgAAAA9FAAAAAgAbejJlc2IwMi5zeWQub3B0dXNuZXQuY29tLmF1SEIAAAAQRQAAAAIAE0FwcE1hcENhbGxlclByb2Nlc3NIQgAAABFFAAAAAgAIV2ViTG9naWNIQgAAABJFAAAAAgALTkJUaHJlYWRUeG5IQgAAABNFAAAAAgAFZmFsc2VIQgAAABRFAAAAAgAXcHJldl9rVHhuVHJhY2VTdGFydFRpbWVIQgAAABVFAAAAAgANMTQwNzczODk2NDI2NUhCAAAAFkUAAAACAA5BcHBNYXBBcHBOYW1lc0hCAAAAF0YAAAADAAAAE2phdmEudXRpbC5BcnJheUxpc3QAAAAFSEIAAAAYRQAAAAIAClVSTCBNYXBwZXJIQgAAABlFAAAAAgAPVmlnbmV0dGUgUG9ydGFsSEIAAAAaRQAAAAIAD0N1c3RvbWVyIENlbnRyZUhCAAAAG0UAAAACABRjdXN0b21lcmFwcC1zZXJ2aWNlc0hCAAAAHEUAAAACADljdXN0b21lcl9jZW50cmVfc2VydmljZS9wcm94eV9zZXJ2aWNlcy9jdXN0b21lcl9jZW50cmVfcHNIQgAAAB1FAAAAAgAIQlNfc2VxSWRIQgAAAB5FAAAAAgAHMToxOjE6MQ==
SOAPAction: "http://services.centreservice.bservice.com/getCustomersByAccountNameList"
Transfer-Encoding: chunked
User-Agent: Java1.6.0_71
Accept: text/html, image/gif, image/jpeg, */*; q=.2
Connection: Keep-Alive

]", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace:
Thread-87420 "[STUCK] ExecuteThread: '452' for queue: 'weblogic.kernel.Default (self-tuning)'" <alive, suspended, blocked, priority=1, DAEMON> {
    -- Blocked trying to get lock: weblogic.jdbc.common.internal.GenericConnectionPool@23cd753b[thin lock]
    weblogic.common.resourcepool.ResourcePoolImpl.reserveResourceInternal(ResourcePoolImpl.java:385)
    weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:343)
    weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:330)
    weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:469)
    weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:363)
    weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:125)
    weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:158)
    weblogic.jdbc.pool.Driver.connect(Driver.java:132)
    weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:658)
    weblogic.jdbc.jts.Driver.connect(Driver.java:127)
    weblogic.jdbc.common.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:533)
    weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:498)
    weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:491)
    org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
    org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
    org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
    org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
    org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
    org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354)
    org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:555)
    org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)
    org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    com.sun.proxy.$Proxy235.getCustomerByAccountNameList(Unknown Source)
    au.com.xxx.mv.srv.bizservice.centreservice.service.ws.jws.JwsCentreService.getCustomersByAccountNameList(JwsCentreService.java:611)
    sun.reflect.GeneratedMethodAccessor1108.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:92)
    weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:74)
    com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:151)
    com.sun.xml.ws.server.sei.EndpointMethodHandlerImpl.invoke(EndpointMethodHandlerImpl.java:268)
    com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:100)
    com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:866)
    com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:815)
    com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:778)
    com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:680)
    ^-- Holding lock: com.sun.xml.ws.api.pipe.Fiber@2779e7db[thin lock]
    com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:403)
    com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:539)
    com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:253)
    com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:140)
    weblogic.wsee.jaxws.WLSServletAdapter.handle(WLSServletAdapter.java:171)
    weblogic.wsee.jaxws.HttpServletAdapter$AuthorizedInvoke.run(HttpServletAdapter.java:708)
    weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    weblogic.security.service.SecurityManager.runAs(SecurityManager.java:146)
    weblogic.wsee.util.ServerSecurityHelper.authenticatedInvoke(ServerSecurityHelper.java:103)
    weblogic.wsee.jaxws.HttpServletAdapter$3.run(HttpServletAdapter.java:311)
    weblogic.wsee.jaxws.HttpServletAdapter.post(HttpServletAdapter.java:336)
    weblogic.wsee.jaxws.JAXWSServlet.doRequest(JAXWSServlet.java:99)
    weblogic.servlet.http.AbstractAsyncServlet.service(AbstractAsyncServlet.java:99)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
    weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
    weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    com.jamonapi.JAMonFilter.doFilter(JAMonFilter.java:57)
    weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)
    weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
    weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
    weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
    weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
    weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
}
After lot of analysis I got few points , where I can stand and try for any possible solution.As per my investigation there are many reason behind hogging thread.

Possible cause for hogging thread :-


  1. Network issue
  2. Application issue (If connections are not closed properly)
  3. Dependent service has problem (upstream and downstream )
  4. Heavy Server Load

Possible Solution :-


If your application is OK, then you can check other possible key point for this issue. In my issue , we are working on OSB (Oracle Service Bus) . Normally its related to working with proxy service and business service.

1. First and initial solution is check the Connection timeout and Read timeout  for business service. Whether those settings are fine or not.If possible configured that to as expected standard time is 30 sec .You can configure this more than 30sec.
 
2. As second solutions , you need to create a separate work manager for per each thread.By default my proxy was using default work manager. I applied with separate work manager and it worked.



Hope it will help you.





Follow for more details on Google+ and @Facebook!!!

Find More :-

Sunday, 14 September 2014

Many-to-One relationship in hibernate - @ManyToOne Example

As we all know Hibernate is an easy and fast framework for work with any Database using Java language. This example show how to work with Many-To-One relationship in Hibernate.


I have used MySQL as database (Download Here) and Hibernate 3 jar files (Download Here). Also for applying Many-To-One relation we have used annotation. Even you can do this by using .xml config also, but that's too old and no one is using that now-a-days.

Create table department and employee :-

 Table department :
CREATE TABLE `department` (
  `deptid` int(11) NOT NULL,
  `deptname` varchar(100) default NULL,
  PRIMARY KEY  (`deptid`)
) ENGINE=InnoDB DEFAULT CHARSET=big5;


Table employee :
CREATE TABLE `employee` (
  `empid` int(11) NOT NULL,
  `empname` varchar(50) default NULL,
  `deptno` int(11) default NULL,
  PRIMARY KEY  (`empid`),
  KEY `deptno` (`deptno`),
  CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`deptno`) REFERENCES `department` (`deptid`)
) ENGINE=InnoDB DEFAULT CHARSET=big5;
In this above both table , many employee could be from one department and implements Many-to-One relationship.


hibernate.cnf.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   <session-factory>
        <!-- Adding mysql dialect -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
           <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- Here jdeveloperguidedb is the database name -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jdeveloperguidedb</property>
           <property name="hibernate.connection.username">root</property>
           <property name="hibernate.connection.password">root</property>
           <!-- show_sql property will help you to show the generated hibernate query on console -->          
           <property name="show_sql" >true</property> 
           <!-- Mapping entity class to hibernate -->
           <mapping class="com.jdeveloperguide.lab.Employee"></mapping> 
           <mapping class="com.jdeveloperguide.lab.Department"></mapping> 
    </session-factory>
</hibernate-configuration>

In this hibernate.cnf.xml file we have configure the initial setup for db , and it will help us to interact with db using hibernate.

Department.java

package com.jdeveloperguide.lab;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="department")
public class Department {

    @Id
    @Column(name="deptid")
    private int deptid;
   
    private String deptname;
   
    public int getDeptid() {
        return deptid;
    }
    public void setDeptid(int deptid) {
        this.deptid = deptid;
    }
    public String getDeptname() {
        return deptname;
    }
    public void setDeptname(String deptname) {
        this.deptname = deptname;
    }
}
Here Department.java is the entity class which we are going to persist or save into db.We have used few annotation here like @Entity ,@Table , @Id , @Column , etc. This entity class looks like a helper class.

@Entity - This annotation will help you to define entity in RDBMS.

@Table - This annotation will help you to define a database table (entity) by specifying name.

 i.e. @Table(name="department").

@Id - This annotation will help you to define the id column , it means the primary key.

@Column - This annotation will help you to define the column name by specifying the column name. If your column name and java variable name are different the you can specify by name. In this example our database column name and variable name are same so, not required specify the column name. Hibernate will automatically match and take care this. But I have used because for better understanding.




Employee.java

package com.jdeveloperguide.lab;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="employee")
public class Employee {

@Id   
@Column(name="empid")
private int empid;

@Column(name="empname")
private String empname;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="deptno")
private Department dept;

public int getEmpid() {
    return empid;
}

public void setEmpid(int empid) {
    this.empid = empid;
}

public String getEmpname() {
    return empname;
}

public void setEmpname(String empname) {
    this.empname = empname;
}

public Department getDept() {
    return dept;
}

public void setDept(Department dept) {
    this.dept = dept;
}   
}


 Here Employee.java is the entity class which we are going to persist or save into db along with Department.We have used few more new annotations here like @ManyToOne , @JoinColumn, etc.
Here we have mapped many-to-one , means many employee from one department.

@ManyToOne - Mapping many-to-one relation with hibernate.

@JoinColumn - This annotation is used for map the reference foreign key for any entity. This indicates the association with entity/table.

 CreateSessionFactory.java

package com.jdeveloperguide.lab;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class CreateSessionFactory {
    //Single point of access for SessionFactory
    private static final SessionFactory sessionFactory;
    static {
        try {
            //create sesson factory using the config file
            sessionFactory = new AnnotationConfiguration().configure("hibernate.cnf.xml").buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }
   
    //Static method for exposing the session
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

This class will help to create the SessionFactory object using .xml config file. This class having static method with we can call from any part of this application for getting SessionFactory object.Because , we will create Session object from SessionFactory

MainClass.java

package com.jdeveloperguide.lab;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;


public class MainClass {

    /**
     * @param args
     */
    public static void main(String[] args)throws Exception {
        MainClass mainObject=new MainClass();;
        Employee employee=new Employee();
        Department department=new Department();
        department.setDeptid(7);
        department.setDeptname("Computer Science");
       
        employee.setDept(department);
        employee.setEmpid(8);
        employee.setEmpname("Mr. JDeveloper");
        mainObject.saveEmployee(employee);
    }
   
    public void saveEmployee(Employee employee)throws Exception{
        Transaction transaction=null;
        Session session=null;
       
        try{
        //Create and open session
        session = CreateSessionFactory.getSessionFactory().openSession();
        //Create Transaction for maintain a user session
        transaction=session.beginTransaction();
        //Save the employee
        //Also it will save department ,because we have used cascade=CascadeType.ALL in employee
        session.save(employee);
        transaction.commit();
        }catch(HibernateException hibernateException){
            transaction.rollback();
            System.out.println("Error during save into DB :::"+hibernateException);
        }finally{
            session.close();
        }
    }
}

 This MainClass.java is the starting point of this example. Here we will execute our hibernate Many-to-One example and it will persist the data into DB.

Hibernate Generated SQL :-

Hibernate: select department_.deptid, department_.deptname as deptname1_ from department department_ where department_.deptid=?
Hibernate: insert into department (deptname, deptid) values (?, ?)
Hibernate: insert into employee (empname, deptno, empid) values (?, ?, ?)
When we will execute the MainClass.java class , it will generate these above queries by hibernate and these are auto generated. Its generating and showing because, we have mentioned in .xml config file show_sql is true.


Result in DB :-

Department Table











Employee Table






















Hope it will help you.