2

I have developed a rest web service which is using Open Jpa 2.1 , deployed in TomEE.

My problem is , when I am running select query a update query is getting run in table i can see that in log.

I have noticed when I Iterate through the result list then only is calls Update and update is called for all the record in result list.

Log

DEBUG   2016-04-18 13:23:48,766 [http-bio-28080-exec-3] openjpa.Runtime  - Found datasource1: datasource 9932945 from configuration. StoreContext: org.apache.openjpa.kernel.BrokerImpl@1d4022a
DEBUG   2016-04-18 13:23:48,766 [http-bio-28080-exec-3] openjpa.Runtime  - org.apache.openjpa.persistence.EntityManagerFactoryImpl@b7962e created EntityManager org.apache.openjpa.persistence.EntityManagerImpl@1d4022a.
DEBUG   2016-04-18 13:23:48,772 [http-bio-28080-exec-3] openjpa.Runtime  - Query "select p from EHSDo p " is cached."   
DEBUG   2016-04-18 13:23:48,772 [http-bio-28080-exec-3] openjpa.Query  - Executing query: select p from EHSDo p
DEBUG   2016-04-18 13:23:48,780 [http-bio-28080-exec-3] openjpa.jdbc.SQL  - <t 17558940, conn 4067012> executing prepstmnt 21581928 SELECT t0.ID, t0.NAME FROM EHS t0
DEBUG   2016-04-18 13:23:48,780 [http-bio-28080-exec-3] openjpa.jdbc.SQL  - <t 17558940, conn 4067012> [0 ms] spent
DEBUG   2016-04-18 13:23:48,781 [http-bio-28080-exec-3] openjpa.jdbc.JDBC  - <t 17558940, conn 4067012> [0 ms] close
DEBUG   2016-04-18 13:23:48,784 [http-bio-28080-exec-3] openjpa.jdbc.JDBC  - The batch limit is set to 0.
DEBUG   2016-04-18 13:23:48,784 [http-bio-28080-exec-3] openjpa.jdbc.SQL  - <t 17558940, conn 20831240> executing prepstmnt 5407641 UPDATE EHS SET NAME = ? WHERE ID = ? [params=?, ?]
DEBUG   2016-04-18 13:23:48,785 [http-bio-28080-exec-3] openjpa.jdbc.SQL  - <t 17558940, conn 20831240> [1 ms] spent
DEBUG   2016-04-18 13:23:48,834 [http-bio-28080-exec-3] openjpa.jdbc.JDBC  - <t 17558940, conn 20831240> [0 ms] close
DEBUG   2016-04-18 13:23:48,835 [http-bio-28080-exec-3] openjpa.Runtime  - org.apache.openjpa.persistence.EntityManagerImpl@1d4022a.close() invoked.

Code for REST

@Path("rest")
public class Rest {
    private static final Logger logger = LoggerFactory.getLogger(Rest.class);

    @EJB
    EHSBeansLocal ehsBean;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    @Path("getAllEHS")
    public List<EHSDto> getAllEHS() {
        logger.debug("--------------------------- getAllEHS -----------------------------");
        return ehsBean.getAllEHS();
    }
}

Code for EJB

  @Stateless
    public class EHSBeans implements EHSBeansLocal {

        private static final Logger logger = LoggerFactory.getLogger(EHSBeans.class);

        @PersistenceContext(unitName="EHS_PU")
        private EntityManager em;

        public EHSBeans(){
            logger.debug("EHSBean constructor called");
        }


        @Override
        public List<EHSDto> getAllEHS(){
            logger.debug("getAllEHS");
            List<EHSDto> dtolist = new ArrayList<EHSDto>();
            Query query = em.createQuery("select p from EHSDo p ");
            List<EHSDo> list = query.getResultList();
            if (list != null){

                for(EHSDo entity : list){
                    EHSDto e =  new EHSDto();
                    e.setId(entity.getId());
                    e.setName(entity.getName());
                    dtolist.add(e);

                }
            }

            return dtolist;



        }

    }

Persistance XML

<?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 name="EHS_PU">
        <jta-data-source>mysqlDataSource</jta-data-source>
        <class>com.ap.entity.EHSDo</class>
        <properties>
            <property name="openjpa.Log" value="log4j" />
        </properties>
    </persistence-unit>
</persistence>

Datasource in tomee.xml

<Resource id="mysqlDataSource" type="javax.sql.DataSource">
  JdbcDriver        com.mysql.jdbc.Driver
  JdbcUrl           jdbc:mysql://localhost:3306/jpa
  UserName          root
  Password          root
  JtaManaged        true
  DefaultAutoCommit   true
  InitialSize       3
  MaxActive         20
  MinIdle           20
  MaxIdle           0
  MaxWait           50000
  ValidationQuery   SELECT 1
  TestOnBorrow      true
  TestOnReturn      false
  TestWhileIdle     false
</Resource>
Arvind
  • 1,207
  • 6
  • 27
  • 55

0 Answers0