Friday, June 15, 2012

How to get the HttpSession, HttpServletRequest in JSF. Set the attribute in the session or get a parameter from session.

Here is a snippet to show how can we get the HttpSession, HttpServletRequest in JSF. Set the attribute in the session or get a parameter from session.
 
FacesContext context = FacesContext.getCurrentInstance(); 
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest(); 
HttpSession httpSession = request.getSession(false); 

// To get the attribute
String testParam= (String) httpSession.getAttribute("testParam");

// To set the param
httpSession.setAttribute("testParam", "testValue");

Thursday, June 14, 2012

org.apache.openjpa.persistence.ArgumentException: There is no query with the name "getEmpployeesData" defined for any of the known persistent classes

Exception while trying a add a new Persistent Entity.

I added a new table in the database for Employee records. Created a bean for the same with a named query as shown below.

 @Entity
@NamedQuery(name = "getEmployeeData", query = "select EmployeeEntity from EMPLOYEE  EmployeeEntity where EmployeeEntity.DEPT=:deptId")
@Table(name = "EMPLOYEE")
public class EmployeeEntity {

}
Code to invoke this query.

EntityManager em;
....
....
Query getEmployeeDataQuery = em.createNamedQuery("getEmployeeData");
getEmployeeDataQuery.setParameter("deptId", deptId);           
ArrayList<Employee> employeeList= getEmployeeDataQuery .getResultList();



While trying to invoke this query I am getting following exception : 



SEVERE: Exception Occured : EJB Exception: ; nested exception is:
        <openjpa-1.1.1-SNAPSHOT-r422266:1172209 fatal user error> org.apache.openjpa.persistence.ArgumentException: There is no query with the name "getEmpployeesData" defined for any of the known persistent classes: [com.test.EmployeeEntity,com.test.EmployeeEntity].; nested exception is: <openjpa-1.1.1-SNAPSHOT-r422266:1172209 fatal user error> org.apache.openjpa.persistence.ArgumentException: There is no query with the name "getEmpployeesData" defined for any of the known persistent classe
com.test.EmployeeEntity]
javax.ejb.EJBException: EJB Exception: ; nested exception is:
        <openjpa-1.1.1-SNAPSHOT-r422266:1172209 fatal user error> org.apache.openjpa.persistence.ArgumentException: There is no query with the name "getEmpployeesData" defined for any of the known persistent classes: [com.test.EmployeeEntity, com.test.EmployeeEntity].; nested exception is: <openjpa-1.1.1-SNAPSHOT-r422266:1172209 fatal user error> org.apache.openjpa.persistence.ArgumentException: There is no query with the name "getEmpployeesData" defined for any of the known persistent classe
s: [com.test.EmployeeEntity].
<openjpa-1.1.1-SNAPSHOT-r422266:1172209 fatal user error> org.apache.openjpa.persistence.ArgumentException: There is no query with the name "getEmpployeesData" defined for any of the known persistent classes: [com.test.EmployeeEntity]
        at org.apache.openjpa.meta.MetaDataRepository.getQueryMetaData(MetaDataRepository.java:1596)
        at org.apache.openjpa.persistence.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:895)
        at org.apache.openjpa.persistence.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:77)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at weblogic.deployment.BasePersistenceContextProxyImpl.invoke(BasePersistenceContextProxyImpl.java:111)
        at weblogic.deployment.TransactionalEntityManagerProxyImpl.invoke(TransactionalEntityManagerProxyImpl.java:78)
        at weblogic.deployment.BasePersistenceContextProxyImpl.invoke(BasePersistenceContextProxyImpl.java:92)
        at weblogic.deployment.TransactionalEntityManagerProxyImpl.invoke(TransactionalEntityManagerProxyImpl.java:18)
        at $Proxy178.createNamedQuery(Unknown Source)
        at services.EmployeeDataServiceBean.getEmpployeesData(EmployeeDataServiceBean.java:295)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
        at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at com.oracle.pitchfork.spi.MethodInvocationVisitorImpl.visit(MethodInvocationVisitorImpl.java:34)
        at weblogic.ejb.container.injection.EnvironmentInterceptorCallbackImpl.callback(EnvironmentInterceptorCallbackImpl.java:54)
        at com.oracle.pitchfork.spi.EnvironmentInterceptor.invoke(EnvironmentInterceptor.java:42)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
        at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at $Proxy183.getEmpployeesData(Unknown Source)
        at services.EmployeeDataService_4op81c_EmployeeDataServiceImpl.__WL_invoke(Unknown Source)
        at weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:40)
        at services.EmployeeDataService_4op81c_EmployeeDataServiceImpl.getEmpployeesData(Unknown Source)
        at services.EmployeeDataService_4op81c_EmployeeDataServiceImpl_CBV.getEmpployeesData(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:85)
        at $Proxy179.getEmpployeesData(Unknown Source)



Solution to the problem :

I forgot to add the persistent entity in my persistence.xml file. It resolved the issue,

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="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 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit transaction-type="JTA" name="TestDataService">
        <jta-data-source>TestDataService</jta-data-source>       
        <class>com.test.DeptEntity</class>
        <class>com.test.EmployeeEntity</class>
        <properties>
            <property name="showSql" value="true"/>
            <property name="formatSql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

Tuesday, June 12, 2012

In a JSF page I needed to hide a div component on the basis of a certain condition.

Here is an example of the Dept and Employee records. We have a  Div which displays the employee records when the "Show Employee Records" button is clicked. The div will be hidden if the dept object has no employees.

Following is the html snippet for the same.

<aa:zoneJSF id="AjaxResultsZone">
<div id="employeeRecordsDiv" style="visibility: #{deptBean.isEmployeeDataAvailable}">
---
---
---
</div>

<h:commandButton id="submitButton" type="button"
                                        value="Show Employee Records"
                                        onclick="showEmployeeRecords()" />
</aa:zoneJSF>

In the above example, we can put this div in an Ajax zone and on a submit event reload the azax zone.
by default the teh value of the flag  isEmployeeDataAvailable will be ''HIDDEN'.
The method showEmployeeRecords should invoke a method in the bean object which will set this flag value to 'VISIBLE' if the records in the bean exists.

Wednesday, June 6, 2012

Apache Wicket How to create a ListView with RadioGroup


Here is an example of showing a list of Employees under a department. We are using the RadioGroup and ListView Component for this example.

final Department department = (Department) this.getModelObject();
   ArrayList<Employee> employeesList = department.getEmployeesList();
//Create a Radio Group and then add a List View to this Radio Group As shown below.

RadioGroup<Integer> employeesRadioGroup = new RadioGroup<Integer>("employeesRadioGroup", new Model<Integer>(new Integer(0)));
employeesRadioGroup.add(new AjaxFormChoiceComponentUpdatingBehavior(){
/**
* 
*/
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
if(LOGGER.isDebugEnabled())
LOGGER.debug("Employee Radio Selected. You can add an Ajax Behavior on the selection of radio button.");
}
});
employeesRadioGroup.setOutputMarkupId(true);
employeesRadioGroup.setOutputMarkupPlaceholderTag(true);
employeesRadioGroup.setRenderBodyOnly(false);
add(employeesRadioGroup);

ListView empListView = new ListView("employeeListView", employeesList){
/**
*
* @see org.apache.wicket.markup.html.list.ListView#populateItem
*      (org.apache.wicket.markup.html.list.ListItem)
*/
@Override
protected void populateItem(final ListItem item) {

Employee employee = ((Employee)item.getModelObject());

String empId = employee.getEmployeeId();
String empName = employee.getEmployeeName();

if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Show Employee Record with Id :" + empId);
}
item.add(new Radio<Integer>("empSelectRadio", new Model<Integer>(item.getIndex()), employeesRadioGroup));
item.add(new Label("empId", empId).setEscapeModelStrings(false));
item.add(new Label("empName", empName) .setEscapeModelStrings(false));
}
};

if(employeesList.size() == 0){
error("No Employees Records Found.");
}

empListView.setOutputMarkupId(true);
empListView.setOutputMarkupPlaceholderTag(true);

employeesRadioGroup.add(empListView);


Here is the corresponding HTML to be added to your wicket Panel.

<table style="" wicket:id="employeesRadioGroup">
    <tr wicket:id="empListView">
        <td>
              <input type="radio" wicket:id="empSelectRadio"> <label wicket:id="empId">[Employee Id]</label>                                
        </td>
        <td>
            <a href="" wicket:id="empName">[Employee Name]</a>                                
        </td>
     </tr>
</table>

Friday, June 1, 2012

java.lang.RuntimeException: FacesContext not found

Getting Following Exception While trying to test a HelloWorld JSF Application. I am hitting the
Test.jsp page, and getting this exception. 
 
org.apache.jasper.JasperException: java.lang.RuntimeException: FacesContext not found
 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:502)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:430)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.lang.RuntimeException: FacesContext not found
 javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:321)
 javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:228)
 org.apache.jsp.Test_jsp._jspx_meth_f_005fview_005f0(Test_jsp.java:114)
 org.apache.jsp.Test_jsp._jspService(Test_jsp.java:88)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:717)