Olá pessoal, tudo bem? Sou novo no JEE e estou precisando de uma dica. Estou criando um service web RESTful no tomcat usando jersey. Mas apareceu um problema que o problema de memoria
no tomcat que está armazenando cada objeto do meu serviço. Algum sabe como faco para destruir o objeto no final de cada requisição ?
O codigo de uma função abaixo:
@PersistenceUnit(unitName="cffpersistence")EntityManagerem;@GET@Produces(MediaType.APPLICATION_JSON)@Path("/getFuncionarioCount")publicLonggetFuncionarioCount(){System.setProperty(Context.PROVIDER_URL,"C:\\Sistemas\\Temp");Filef=newFile(".\\teste.xml");try{if(f.createNewFile()==false){return-1L;}}catch(Exceptionex){return-2L;}//EntityManagerFactoryemFactory=Persistence.createEntityManagerFactory("cffpersistence");//EntityManagerem=emFactory.createEntityManager();Longsize=(Long)em.createQuery("select COUNT(f.funSeq) from EcfFuncionarioEntity as f").getSingleResult();em.close();returnsize;}
Porque você esta criando um EntityManagerFactory em cada requisição?
Também não entendi o que o arquivo que você cria tem a ver com o retorno de um count?
Este código é só de testes ou ele realmente tem uma função?
P
pedrohms412
Obrigado por responder kaoe. Esta funcao e pra retornar a quantidade de funcionarios que tem no registro. Em relacao ao ManagerFactory estou criando ele pq não estou conseguindo
criar a injelção via anotação, quando tento usar a anotacao o objeto retorna null.
Vai abaixo o código que tentei com a anotação e meu web.xml:
@PersistenceUnit(unitName="cffpersistence")EntityManagerFactoryemFactory;@GET@Produces(MediaType.APPLICATION_JSON)@Path("/getFuncionarioCount")publicLonggetFuncionarioCount(){System.setProperty(Context.PROVIDER_URL,"C:\\Sistemas\\Temp");Filef=newFile(".\\teste.xml");try{if(f.createNewFile()==false){return-1L;}}catch(Exceptionex){return-2L;}EntityManagerem=emFactory.createEntityManager();Longsize=(Long)em.createQuery("select COUNT(f.funSeq) from EcfFuncionarioEntity as f").getSingleResult();em.close();returnsize;}
web.xml
<?xmlversion="1.0"?><!DOCTYPEweb-appPUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd"><web-app><display-name>compu.ws.server</display-name><servlet><servlet-name>JerseyRESTService</servlet-name><servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class><init-param><param-name>com.sun.jersey.config.property.packages</param-name><param-value>compu.ws.service</param-value></init-param><init-param><param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name><param-value>true</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>JerseyRESTService</servlet-name><url-pattern>/rest/*</url-pattern></servlet-mapping></web-app>
A injeção vai te intregar EntityManager e não EntityManagerFactory
P
pedrohms412
Vlw pela resposta, mas nao rolou nao. Da uma olhada no meu codigo:
@PersistenceUnit(unitName="cffpersistence")EntityManagerem;@GET@Produces(MediaType.APPLICATION_JSON)@Path("/getFuncionarioCount")publicLonggetFuncionarioCount(){System.setProperty(Context.PROVIDER_URL,"C:\\Sistemas\\Temp");Filef=newFile(".\\teste.xml");try{if(f.createNewFile()==false){return-1L;}}catch(Exceptionex){return-2L;}//EntityManagerFactoryemFactory=Persistence.createEntityManagerFactory("cffpersistence");//EntityManagerem=emFactory.createEntityManager();Longsize=(Long)em.createQuery("select COUNT(f.funSeq) from EcfFuncionarioEntity as f").getSingleResult();em.close();returnsize;}