Aparentemente o sistema esta funcionando, de vez em quando da erro de mysql “too many connections” mas acho q não é esse o problema
03/11/2011 16:01:53 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
03/11/2011 16:01:53 org.apache.tomcat.util.digester.SetPropertiesRule begin
AVISO: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:sistaxi' did not find a matching property.
03/11/2011 16:01:53 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
03/11/2011 16:01:53 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
03/11/2011 16:01:53 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1200 ms
03/11/2011 16:01:53 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
03/11/2011 16:01:53 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.21
ServletContextListener started
Thread Thread-4 iniciada com sucesso!
thread aberta, vou entrar no while=true e sou a thread: Thread-4
Thread reiniciando....
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
03/11/2011 16:01:56 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
03/11/2011 16:01:56 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
03/11/2011 16:01:56 org.apache.catalina.startup.Catalina start
INFO: Server startup in 2941 ms
calculei a distancia que é: 0.1402797736367815
achei o taxi mais perto, serialgps: 901200016 - status bloqueado
Thread reiniciando....
03/11/2011 16:02:14 org.apache.catalina.core.ApplicationDispatcher invoke
GRAVE: Servlet.service() for servlet jsp threw exception
Error on line 69, column 13 in template/simple/select.ftl
stack.findValue('top') is undefined.
It cannot be assigned to itemKey
The problematic instruction:
----------
==> assignment: itemKey=stack.findValue('top') [on line 69, column 13 in template/simple/select.ftl]
in user-directive s.iterator [on line 59, column 1 in template/simple/select.ftl]
----------
Java backtrace for programmers:
----------
freemarker.core.InvalidReferenceException: Error on line 69, column 13 in template/simple/select.ftl
stack.findValue('top') is undefined.
It cannot be assigned to itemKey
at freemarker.core.Assignment.accept(Assignment.java:111)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.IfBlock.accept(IfBlock.java:82)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.Environment.visit(Environment.java:297)
at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:208)
at freemarker.core.Environment.process(Environment.java:188)
at freemarker.template.Template.process(Template.java:237)
at org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:182)
at org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:559)
at org.apache.struts2.components.UIBean.end(UIBean.java:513)
at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:42)
at org.apache.jsp.jsp.geraCorridaPage_jsp._jspx_meth_s_005fselect_005f1(geraCorridaPage_jsp.java:939)
at org.apache.jsp.jsp.geraCorridaPage_jsp._jspx_meth_s_005fform_005f2(geraCorridaPage_jsp.java:882)
at org.apache.jsp.jsp.geraCorridaPage_jsp._jspService(geraCorridaPage_jsp.java:173)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:154)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
03/11/2011 16:02:14 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [default] in context with path [/sistaxi] threw exception
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:443)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:135)
at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:323)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:475)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at br.com.sistaxi.hibernate.FabricaDeSessao.abreSessao(FabricaDeSessao.java:21)
at br.com.sistaxi.hibernate.Dao.getCorridaPorStatus(Dao.java:158)
at br.com.sistaxi.auxiliar.ThreadCorrida.run(ThreadCorrida.java:51)
03/11/2011 16:08:32 org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already. Could not load br.com.sistaxi.beans.Taxi. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1564)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:187)
at org.hibernate.mapping.PersistentClass.getMappedClass(PersistentClass.java:122)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:299)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:158)
at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77)
at sun.reflect.GeneratedConstructorAccessor17.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:107)
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:135)
at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:323)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:475)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at br.com.sistaxi.hibernate.FabricaDeSessao.abreSessao(FabricaDeSessao.java:21)
at br.com.sistaxi.hibernate.Dao.getCorridaPorStatus(Dao.java:158)
at br.com.sistaxi.auxiliar.ThreadCorrida.run(ThreadCorrida.java:51)
03/11/2011 16:08:32 org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already. Could not load br.com.sistaxi.beans.Taxi. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1564)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:187)
at org.hibernate.mapping.PersistentClass.getMappedClass(PersistentClass.java:122)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertySetter(PojoEntityTuplizer.java:306)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:159)
at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:77)
at sun.reflect.GeneratedConstructorAccessor17.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:107)
at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:135)
at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:80)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:323)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:475)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at br.com.sistaxi.hibernate.FabricaDeSessao.abreSessao(FabricaDeSessao.java:21)
at br.com.sistaxi.hibernate.Dao.getCorridaPorStatus(Dao.java:158)
at br.com.sistaxi.auxiliar.ThreadCorrida.run(ThreadCorrida.java:51)
desculpe um post seguido do outro, mas estava dando erro too long message
essa é a unica classe que faz o erro acontecer
package br.com.sistaxi.controle.action;
import java.util.ArrayList;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import br.com.sistaxi.auxiliar.ListaCorridaAtiva;
import br.com.sistaxi.beans.Cliente;
import br.com.sistaxi.beans.Corrida;
import br.com.sistaxi.beans.Taxi;
import br.com.sistaxi.hibernate.Dao;
import com.google.gson.Gson;
public class GeraCorridaAction {
private Dao dao = new Dao();
private String mensagem;
private double distancia;
private ArrayList<Taxi> listaTaxi = new ArrayList<Taxi>();
private Taxi taxi = new Taxi();
private double latitude;
private double longitude;
private double menorDistancia;
private Taxi proximoTaxi = new Taxi();
private String menorDistanciaStr;
private String funcao;
private Cliente cliente = new Cliente();
private Corrida corrida = new Corrida();
private String corridaObservacao;
private List<Corrida> listaCorrida = new ArrayList<Corrida>();
private List<Corrida> listaCorridaAtiva = new ArrayList<Corrida>();
private List<Corrida> listaCorridaSemTaxi = new ArrayList<Corrida>();
private ListaCorridaAtiva listaCorridaAtivaMemoria = new ListaCorridaAtiva();
private String listaJson;
@Action(value = "/gerarCorrida", results = {
@Result(name = "goListarCliente", location = "/jsp/listarClientePage.jsp"),
@Result(name = "goGeraCorrida", location = "/jsp/geraCorridaPage.jsp"),
@Result(name = "goRefreshCorridaAtiva", location = "/jsp/ajax/listaCorridaAtivaPage.jsp"),
@Result(name = "goRefreshCorridaSemTaxi", location = "/jsp/ajax/listaCorridaSemTaxiPage.jsp"),
@Result(name = "recursivo", type = "redirectAction",
location = "gerarCorrida.action") ,
@Result(name = "goLogin", location = "/index.jsp") })
public String execute() {
// Função iniciar uma nova corrida
if ("gerarCorrida".equals(funcao))
{
dao.salva(cliente);
corrida.setCliente(cliente);
corrida.setSituacao("sem taxi");
dao.salva(corrida);
//listaCPT.adiciona(corrida);
// try{
// if(!threadCorrida.isAlive())
// {
// threadCorrida.start();
// }
// }catch (Exception e) {
// System.out.println(e);
// }
//orridaUnica.start();
return "recursivo";
}
// se a função for cancelar corrida
if ("cancelarCorrida".equals(funcao)) {
// carrega todos os dados da corrida selecionada pelo id
corrida = (Corrida) dao.getCorridaById(corrida.getId());
// altera o status da corrida para cancelada
corrida.setSituacao("cancelada");
corrida.getTaxi().setStatus("livre");
// faz update na corrida
mensagem = dao.salva(corrida);
}
//aqui a corrida é cancelada antes de ganhar um taxi, assim não altera
//o status do taxi q ainda não existe evitando gerar um erro
if ("cancelarCorridaSemTaxi".equals(funcao)) {
// carrega todos os dados da corrida selecionada pelo id
corrida = (Corrida) dao.getCorridaById(corrida.getId());
// altera o status da corrida para cancelada
corrida.setSituacao("cancelada");
// faz update na corrida
mensagem = dao.salva(corrida);
}
// ao selecionar um cliente na combobox, pegar todos os dados no banco
if ("clienteSelecionado".equals(funcao)) {
// carrega as informações do cliente selecionado no combobox pelo
// nome
cliente = (Cliente) dao.getClienteByNome(cliente);
}
if ("refreshCorridaAtiva".equals(funcao)) {
listaCorridaAtiva = dao.getCorridaPorStatus("ativa");
//listaCorridaAtiva = (List<Corrida>) listaCorridaAtivaMemoria;
return "goRefreshCorridaAtiva";
}
// se estiver buscando alterações nos estados das corridas sem taxi por ajax
if ("refreshCorridaSemTaxi".equals(funcao)) {
listaCorridaSemTaxi = dao.getCorridaPorStatus("sem taxi");
//listaCorridaSemTaxi= (List<Corrida>) listaCPT;
return "goRefreshCorridaSemTaxi";
}
// o codigo abaixo roda independentemente do comando que vier do jsp
//utilizado para passar dados padrão para a tela que gera corrida
// gera uma lista com todos os clientes
listaCliente = dao.listarCliente(cliente);
listaClienteTelefone = dao.listarCliente(cliente);
//converte para json para que o autocomplete funcione
Gson gson = new Gson();
setListaJson(gson.toJson(listaCliente));
return "goGeraCorrida";
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public double getDistancia() {
return distancia;
}
public void setDistancia(double distancia) {
this.distancia = distancia;
}
public ArrayList<Taxi> getListaTaxi() {
return listaTaxi;
}
public void setListaTaxi(ArrayList<Taxi> listaTaxi) {
this.listaTaxi = listaTaxi;
}
public Taxi getTaxi() {
return taxi;
}
public void setTaxi(Taxi taxi) {
this.taxi = taxi;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public double getMenorDistancia() {
return menorDistancia;
}
public void setMenorDistancia(double menorDistancia) {
this.menorDistancia = menorDistancia;
}
public Taxi getProximoTaxi() {
return proximoTaxi;
}
public void setProximoTaxi(Taxi proximoTaxi) {
this.proximoTaxi = proximoTaxi;
}
public String getMenorDistanciaStr() {
return menorDistanciaStr;
}
public void setMenorDistanciaStr(String menorDistanciaStr) {
this.menorDistanciaStr = menorDistanciaStr;
}
public String getFuncao() {
return funcao;
}
public void setFuncao(String funcao) {
this.funcao = funcao;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public ArrayList<Cliente> getListaCliente() {
return listaCliente;
}
public void setListaCliente(ArrayList<Cliente> listaCliente) {
this.listaCliente = listaCliente;
}
public Corrida getCorrida() {
return corrida;
}
public void setCorrida(Corrida corrida) {
this.corrida = corrida;
}
public String getCorridaObservacao() {
return corridaObservacao;
}
public void setCorridaObservacao(String corridaObservacao) {
this.corridaObservacao = corridaObservacao;
}
public List<Corrida> getListaCorrida() {
return listaCorrida;
}
public void setListaCorrida(List<Corrida> listaCorrida) {
this.listaCorrida = listaCorrida;
}
public String getListaJson() {
return listaJson;
}
public void setListaJson(String listaJson) {
this.listaJson = listaJson;
}
public List<Corrida> getListaCorridaAtiva() {
return listaCorridaAtiva;
}
public void setListaCorridaAtiva(List<Corrida> listaCorridaAtiva) {
this.listaCorridaAtiva = listaCorridaAtiva;
}
public List<Corrida> getListaCorridaSemTaxi() {
return listaCorridaSemTaxi;
}
public void setListaCorridaSemTaxi(List<Corrida> listaCorridaSemTaxi) {
this.listaCorridaSemTaxi = listaCorridaSemTaxi;
}
public ListaCorridaAtiva getListaCorridaAtivaMemoria() {
return listaCorridaAtivaMemoria;
}
public void setListaCorridaAtivaMemoria(
ListaCorridaAtiva listaCorridaAtivaMemoria) {
this.listaCorridaAtivaMemoria = listaCorridaAtivaMemoria;
}
private ArrayList<Cliente> listaCliente = new ArrayList<Cliente>();
private ArrayList<Cliente> listaClienteTelefone = new ArrayList<Cliente>();
public ArrayList<Cliente> getListaClienteTelefone() {
return listaClienteTelefone;
}
public void setListaClienteTelefone(ArrayList<Cliente> listaClienteTelefone) {
this.listaClienteTelefone = listaClienteTelefone;
}
}
minha classe dao
package br.com.sistaxi.hibernate;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import br.com.sistaxi.beans.Cliente;
import br.com.sistaxi.beans.Corrida;
import br.com.sistaxi.beans.Taxi;
import br.com.sistaxi.beans.Usuario;
public class Dao {
private Session session;
private String mensagem;
private FabricaDeSessao fabricaDeSessao = new FabricaDeSessao();
private Corrida corrida = new Corrida();
private Taxi taxi = new Taxi();
public String salva(Object objeto) {
try {
session = fabricaDeSessao.abreSessao();
session.saveOrUpdate(objeto);
fabricaDeSessao.fechaSessao(session);
return "Informação salva com sucesso!";
} catch (Exception e) {
mensagem = "Erro: " + e;
return mensagem;
}
}
public boolean validaLogin(Usuario usuario) {
session = fabricaDeSessao.abreSessao();
Criteria select = session.createCriteria(usuario.getClass());
select.add(Restrictions.eq("login", usuario.getLogin()));
select.add(Restrictions.eq("senha", usuario.getSenha()));
if (select.list().isEmpty()) {
fabricaDeSessao.fechaSessao(session);
return false;
} else {
fabricaDeSessao.fechaSessao(session);
return true;
}
}
@SuppressWarnings("unchecked")
public ArrayList<Usuario> listaUsuario(Usuario usuario) {
session = fabricaDeSessao.abreSessao();
List<Usuario> lista = new ArrayList<Usuario>();
lista = session.createCriteria(Usuario.class).list();
fabricaDeSessao.fechaSessao(session);
return (ArrayList<Usuario>) lista;
}
@SuppressWarnings("unchecked")
public ArrayList<Taxi> listaTaxi(Taxi taxi) {
session = fabricaDeSessao.abreSessao();
List<Taxi> lista = new ArrayList<Taxi>();
lista = session.createCriteria(Taxi.class).list();
fabricaDeSessao.fechaSessao(session);
return (ArrayList<Taxi>) lista;
}
public Object getById(Object objeto, int id) {
// Usuario usuario = new Usuario();
session = fabricaDeSessao.abreSessao();
objeto = session.get(objeto.getClass(), id);
fabricaDeSessao.fechaSessao(session);
return objeto;
}
public Usuario getUsuarioByLoginSenha(Usuario usuario) {
session = fabricaDeSessao.abreSessao();
Criteria select = session.createCriteria(usuario.getClass());
select.add(Restrictions.eq("login", usuario.getLogin()));
select.add(Restrictions.eq("senha", usuario.getSenha()));
usuario = (Usuario) select.list().get(0);
fabricaDeSessao.fechaSessao(session);
return usuario;
}
public String apaga(Object objeto) {
try {
session = fabricaDeSessao.abreSessao();
session.delete(objeto);
fabricaDeSessao.fechaSessao(session);
return "Informação salva com sucesso!";
} catch (Exception e) {
mensagem = "Erro: " + e;
return mensagem;
}
}
public String atualiza(Object objeto) {
// try {
session = fabricaDeSessao.abreSessao();
session.update(objeto);
fabricaDeSessao.fechaSessao(session);
return "Informação salva com sucesso!";
// } catch (Exception e) {
// mensagem = "Erro: " + e;
// return mensagem;
// }
}
@SuppressWarnings("unchecked")
public ArrayList<Cliente> listarCliente(Cliente cliente) {
session = fabricaDeSessao.abreSessao();
List<Cliente> lista = new ArrayList<Cliente>();
lista = session.createCriteria(Cliente.class).list();
fabricaDeSessao.fechaSessao(session);
return (ArrayList<Cliente>) lista;
}
public Object getClienteByNome(Cliente cliente) {
session = fabricaDeSessao.abreSessao();
Criteria select = session.createCriteria(Cliente.class);
select.add(Restrictions.eq("nome", cliente.getNome()));
cliente = (Cliente) select.list().get(0);
fabricaDeSessao.fechaSessao(session);
return cliente;
}
public Taxi getTaxiBySerialGps(String serial) {
try{
session = fabricaDeSessao.abreSessao();
Criteria select = session.createCriteria(Taxi.class);
select.add(Restrictions.eq("serialGps", serial));
taxi = (Taxi) select.list().get(0);
fabricaDeSessao.fechaSessao(session);
return taxi;
}catch (Exception e) {
// TODO: handle exception
for(int j=0;j<20;j++)
System.out.println("Erro ao pegar dados do taxi pelo serial GPS"+e);
}
return taxi;
}
@SuppressWarnings("unchecked")
public List<Corrida> getCorridaPorStatus(String status) {
session = fabricaDeSessao.abreSessao();
Criteria select = session.createCriteria(Corrida.class);
select.add(Restrictions.eq("situacao", status));
List<Corrida> lista = new ArrayList<Corrida>();
lista = select.list();
fabricaDeSessao.fechaSessao(session);
return lista;
}
public Object getCorridaById(int id) {
session = fabricaDeSessao.abreSessao();
Criteria select = session.createCriteria(Corrida.class);
select.add(Restrictions.eq("id", id));
corrida = (Corrida) select.list().get(0);
fabricaDeSessao.fechaSessao(session);
return corrida;
}
public Taxi getTaxibyRt (String rt) {
session = fabricaDeSessao.abreSessao();
Criteria select = session.createCriteria(Taxi.class);
select.add(Restrictions.eq("rt", rt));
taxi = (Taxi) select.list().get(0);
fabricaDeSessao.fechaSessao(session);
return taxi;
}
@SuppressWarnings("unchecked")
public ArrayList<Taxi> getTaxibyStatus (String status) {
session = fabricaDeSessao.abreSessao();
Criteria select = session.createCriteria(Taxi.class);
select.add(Restrictions.eq("status", status));
List<Taxi> lista = new ArrayList<Taxi>();
lista = select.list();
fabricaDeSessao.fechaSessao(session);
return (ArrayList<Taxi>) lista;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public Corrida getCorrida() {
return corrida;
}
public void setCorrida(Corrida corrida) {
this.corrida = corrida;
}
public Taxi getTaxi() {
return taxi;
}
public void setTaxi(Taxi taxi) {
this.taxi = taxi;
}
}
Classe factory
package br.com.sistaxi.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.sistaxi.beans.Cliente;
import br.com.sistaxi.beans.Corrida;
import br.com.sistaxi.beans.Taxi;
import br.com.sistaxi.beans.Usuario;
public class FabricaDeSessao {
public Session abreSessao() {
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Cliente.class);
cfg.addAnnotatedClass(Usuario.class);
cfg.addAnnotatedClass(Taxi.class);
cfg.addAnnotatedClass(Corrida.class);
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
factory.close();
session.beginTransaction();
return session;
}
public void fechaSessao(Session session) {
session.getTransaction().commit();
session.flush();
session.close();
}
}
hibernate.properties (nao uso hibernate.xml)
[code]
# hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect
hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/sistaxi
hibernate.connection.username = root
hibernate.connection.password =1234
hibernate.show_sql = false
hibernate.format_sql = true
[/code]
classe q inicia a thread ao iniciar o servidor
package br.com.sistaxi.auxiliar;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class IniciaThread implements ServletContextListener{
static ThreadCorrida threadCorrida = new ThreadCorrida();
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("ServletContextListener destroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("ServletContextListener started");
threadCorrida.start();
System.out.println("Thread "+threadCorrida.getName()+" iniciada com sucesso!");
}
}
web xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Sistaxi</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>br.com.sistaxi.auxiliar.IniciaThread</listener-class>
</listener>
</web-app>
minha thread
package br.com.sistaxi.auxiliar;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import br.com.sistaxi.beans.Corrida;
import br.com.sistaxi.beans.Taxi;
import br.com.sistaxi.hibernate.Dao;
public class ThreadCorrida extends Thread {
private Dao dao = new Dao();
// private ListaCorridaProcurandoTaxi listaCPT = new
// ListaCorridaProcurandoTaxi();
// private ListaCorridaAtiva listaCorridaAtiva = new ListaCorridaAtiva();
private ArrayList<Taxi> listaTaxi = new ArrayList<Taxi>();
// private Taxi taxi = new Taxi();
private CalculaDistancia cd = new CalculaDistancia();
private double latitude;
private double longitude;
private double menorDistancia;
private String menorDistanciaStr;
private double distancia;
// private Corrida corrida = new Corrida();
private List<Corrida> listaCorrida = new ArrayList<Corrida>();
private PowerHashMap powerHashMap = new PowerHashMap();
@SuppressWarnings("static-access")
public void run() {
System.out
.println("thread aberta, vou entrar no while=true e sou a thread: "
+ this.currentThread().getName());
while (true) {
System.out.println("Thread reiniciando....");
// enquanto existir clientes procuranto taxi
// while (!listaCPT.estaVazia()) {
// inicializa distancia
distancia = 0;
// raio máximo de busca
menorDistancia = 50;
// zera o taxi a ser selecionado
Taxi proximoTaxi = new Taxi();
//deixa o proximo taxi vazio
proximoTaxi.setStatus("vazio");
// pega as proximas corridas que procuram um taxi
listaCorrida = dao.getCorridaPorStatus("sem taxi");
//só executa o codigo abaixo se tiver cliente querendo taxi
//caso contrario aguarda um sleep e volta para o inicio da thread
if (!listaCorrida.isEmpty()) {
for(int i=0;i<listaCorrida.size();i++)
{
// lista todos os taxis livres do sistema
listaTaxi = dao.getTaxibyStatus("livre");
//só executa o codigo abaixo se tiver taxi livre
//caso contrario aguarda um sleep e volta para o inicio da thread
if (!listaTaxi.isEmpty()) {
// converte os dados que vieram da form (lat,long) como string para double
latitude = Double.parseDouble(listaCorrida.get(i)
.getCliente().getLatitude());
longitude = Double.parseDouble(listaCorrida.get(i)
.getCliente().getLongitude());
// percorre todos os taxis procurando pelo mais proximo
for (int j = 0; j < listaTaxi.size(); j++) {
// chama a função que calcula a distancia entre o taxi e o cliente
distancia = cd.btw(latitude, longitude, listaTaxi
.get(j).getLatitude(), listaTaxi.get(j)
.getLongitude());
System.out.println("calculei a distancia que é: "
+ distancia);
//compara a distancia de cada carro e cliente, coloca taxi mais proximo
//do cliente em proximoTaxi, isso só ocorre com taxis que nunca regeitaram
//esta mesma corrida anteriormente, essa informação é obtida pelo powerHashMap
if (
(menorDistancia > distancia)
&&
(!powerHashMap.has(listaTaxi.get(j).getUsuario().getIdUsuario(),
listaCorrida.get(i).getId()))
&&
(!"bloqueado".equals(listaTaxi.get(j).getStatus()))
)
{
menorDistancia = distancia;
proximoTaxi = listaTaxi.get(j);
}
}//fim for procura taxi mais perto
// se nao achou nenhum taxi, o status do taxi vai ser "vazio
//sendo assim está thread deve voltar ao início e buscar novamente
if (!"vazio".equalsIgnoreCase(proximoTaxi.getStatus())) {
//descobre qual o index do carro mais proximo,
//já alterando o status, evitando cair em sorteios antes da resposta do GPS
listaTaxi.get(listaTaxi.indexOf(proximoTaxi)).setStatus("bloqueado");
//altera também o status do proximo taxi, mesma questao acima
proximoTaxi.setStatus("bloqueado");
//apenas para escrever no console...
System.out.println("achei o taxi mais perto, serialgps: "
+ proximoTaxi.getSerialGps() + " - status "
+ proximoTaxi.getStatus());
// faz arredondamento das casas decimais caso eu queira futuramente
//mostrar essa distancia
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setMaximumFractionDigits(1);
setMenorDistanciaStr(decimalFormat
.format(menorDistancia));
// insere o taxi na corrida
listaCorrida.get(i).setTaxi(proximoTaxi);
//coloca o serial do GPS no status da corrida para que ela
//não seja enviada pra mais ninguem antes de ter uma resposta do taxista
listaCorrida.get(i).setSituacao(
proximoTaxi.getSerialGps());
//salva a corrida para que o gps possa busca-la no banco
dao.salva(listaCorrida.get(i));
}//fim if (achou algum carro livre e perto ? )
}//fim if lista de taxi esta vazia
}//fim for listacorrida
}//fim if lista corridas esta vazia
try {
//espera por um tempo pre determinado para não gerar bombardeio no banco
//e evitar erros de concorrencia de thread
sleep(10000);
} catch (InterruptedException e) {
//se tiver erro ao dormir, escreve no console
e.printStackTrace();
System.out.println(e);
}//fim do catch
}//fim do while(true)
}//fim do metodo run
public String getMenorDistanciaStr() {
return menorDistanciaStr;
}
public void setMenorDistanciaStr(String menorDistanciaStr) {
this.menorDistanciaStr = menorDistanciaStr;
}
}