Vijay Singh Rajput created OLINGO-963:
-----------------------------------------

             Summary: Testing JPA based Delta Token is not working
                 Key: OLINGO-963
                 URL: https://issues.apache.org/jira/browse/OLINGO-963
             Project: Olingo
          Issue Type: Question
          Components: odata2-jpa
    Affects Versions: V2 2.0.6
         Environment: Window 8
            Reporter: Vijay Singh Rajput
            Priority: Minor


Dear Team,

I am testing the JPA based delta token functionality using 
olingo-odata2-jpa-processor-core-2.0.6 , but it is not working for me. issue is 
i am not getting delta token value when create Query using  
ODataJPATombstoneEntityListener method getQuery.  All the time value is coming 
as null even i am tring with !deltatoken=1464260329818 query paramter in OData 
service call. may be i am missing some step. Kindly guide me.
Thanks in advance.

Following is step which i follow:

1. Extend Class ODataJPATombstoneEntityListener and override following method

 @Override
          public String generateDeltaToken(final List<Object> deltas, final 
Query query) {
            return String.valueOf(System.currentTimeMillis());
          }

          @Override
          public Query getQuery(final GetEntitySetUriInfo resultsView, final 
EntityManager em) {
                  
                  JPQLContextType contextType = null;
                  try {
                  if 
(!resultsView.getStartEntitySet().getName().equals(resultsView.getTargetEntitySet().getName()))
 {    
                       contextType = JPQLContextType.JOIN;
                     } else {    
                       contextType = JPQLContextType.SELECT;  
                     }
                  JPQLContext jpqlContext = 
JPQLContext.createBuilder(contextType, resultsView).build();
              JPQLStatement jpqlStatement = 
JPQLStatement.createBuilder(jpqlContext).build();
              String deltaToken = ODataJPATombstoneContext.getDeltaToken();
              System.out.println("Delta Token:"+deltaToken);
              
              Query query = null;
              if (deltaToken != null) {
                String statement = jpqlStatement.toString();
                /*String[] statementParts = 
statement.split(JPQLStatement.KEYWORD.WHERE);
                String deltaCondition = jpqlContext.getJPAEntityAlias() + 
".creationDate >= {ts '" + deltaToken + "'}";
                if (statementParts.length > 1) {
                  statement =
                      statementParts[0] + JPQLStatement.DELIMITER.SPACE + 
JPQLStatement.KEYWORD.WHERE
                          + JPQLStatement.DELIMITER.SPACE + deltaCondition + 
JPQLStatement.DELIMITER.SPACE
                          + JPQLStatement.Operator.AND + statementParts[1];
                } else {
                  statement =
                      statementParts[0] + JPQLStatement.DELIMITER.SPACE + 
JPQLStatement.KEYWORD.WHERE
                          + JPQLStatement.DELIMITER.SPACE + deltaCondition;
                }*/

                query = em.createQuery(statement);
              } else {
                query = em.createQuery(jpqlStatement.toString());
              }

              return query;
            } catch (EdmException e) {
              return null;
            } catch (ODataJPAModelException e) {
              return null;
            } catch (ODataJPARuntimeException e) {
              return null;
            }
                  
          }

2. Add Annotation 
@EntityListeners(com.sap.sdc.hcp.bootcamp.listeners.JobTombstoneListener.class) 
in my Entity Class.

All the functionality is working fine if i remove @EntityListeners means 
without Delta token functionality.

Kindly Help.

Best Regards,
Vijay 




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to