Boa Tarde, Estou tentando aprender Struts2 para usar no meu trabalho, comecei com a revista Java Magazine edição 41 onde mostra o desenvolvimento de uma aplicação de cadastro. Porém quando gero o .war e abro no tomcat versao 5.5 é apresentado a seguinte msg:
Struts Problem Report
The Struts has detected an unhandled exception:
Messages: Erro ao acessar banco de dados.
File: br/com/jm/dao/DAOService.java
Line number: 100
--------------------------------------------------------------------------------
Stacktraces
java.lang.RuntimeException: Erro ao acessar banco de dados.
br.com.jm.dao.DAOService.getPerfis(DAOService.java:100)
br.com.jm.action.UsuarioAction.prepare(UsuarioAction.java:34)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:112)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:155)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:118)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:180)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:193)
org.apache.struts2.impl.StrutsActionProxy$1.call(StrutsActionProxy.java:25)
org.apache.struts2.impl.StrutsActionProxy$1.call(StrutsActionProxy.java:24)
org.apache.struts2.impl.RequestContextImpl.callInContext(RequestContextImpl.java:147)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:23)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:317)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:239)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
java.lang.Thread.run(Thread.java:619)
--------------------------------------------------------------------------------
You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set:
struts.devMode=false
in your WEB-INF/classes/struts.properties file.
Efetuei teste com o driver do mysql e funciona normalmente em outra aplicação. Já vi login e senha e endereço do server que está o DB e está correto!
Abaixo descrevo o codigo da classe DAOService
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.jm.model.Departamento;
import br.com.jm.model.Perfil;
import br.com.jm.model.Usuario;
public class DAOService {
private static Connection getConnection() throws ClassNotFoundException,
SQLException
{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/struts",
"xxx", "xxx");
return conn;
}
public static Collection<Usuario> getUsuarios() {
try {
Connection conn = getConnection();
Statement stmt = conn.createStatement();
String sql = "select u.id uid, u.nome unome, u.data_nascimento udata, p.id pid, p.nome pnome, d.id did, d.nome dnome from usuario u inner join perfil p on u.id_perfil = p.id inner join departamento d on u.id_departamento = d.id";
ResultSet rs = stmt.executeQuery(sql);
List<Usuario> usuarios = new ArrayList<Usuario>();
while (rs.next()) {
Usuario usuario = new Usuario(rs.getLong("uid"), rs.getString("unome"), rs.getDate("udata"));
Departamento departamento = new Departamento(rs.getInt("did"), rs
.getString("dnome"));
Perfil perfil = new Perfil(rs.getInt("pid"), rs.getString("pnome"));
usuario.setDepartamento(departamento);
usuario.setPerfil(perfil);
usuarios.add(usuario);
}
return usuarios;
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Erro ao acessar banco de dados.");
}
}
public static Collection<Departamento> getDepartamentos() {
try {
Connection conn = getConnection();
Statement stmt = conn.createStatement();
String sql = "select id, nome from departamento";
ResultSet rs = stmt.executeQuery(sql);
List<Departamento> departamentos = new ArrayList<Departamento>();
while (rs.next()) {
Departamento departamento = new Departamento(rs.getInt("id"), rs
.getString("nome"));
departamentos.add(departamento);
}
return departamentos;
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Erro ao acessar banco de dados.");
}
}
public static Collection<Perfil> getPerfis() {
try {
Connection conn = getConnection();
Statement stmt = conn.createStatement();
String sql = "select id, nome from perfil";
ResultSet rs = stmt.executeQuery(sql);
List<Perfil> perfis = new ArrayList<Perfil>();
while (rs.next()) {
Perfil perfil = new Perfil(rs.getInt("id"), rs.getString("nome"));
perfis.add(perfil);
}
return perfis;
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Erro ao acessar banco de dados.");
}
}
public static Usuario getUsuario(Long id) {
try {
Connection conn = getConnection();
String sql = "select u.id uid, u.nome unome, u.data_nascimento udata, p.id pid, p.nome pnome, d.id did, d.nome dnome from usuario u inner join perfil p on u.id_perfil = p.id inner join departamento d on u.id_departamento = d.id where u.id = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setLong(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
Usuario usuario = new Usuario(rs.getLong("uid"), rs.getString("unome"), rs.getDate("udata"));
Departamento departamento = new Departamento(rs.getInt("did"), rs
.getString("dnome"));
Perfil perfil = new Perfil(rs.getInt("pid"), rs.getString("pnome"));
usuario.setDepartamento(departamento);
usuario.setPerfil(perfil);
return usuario;
}
return null;
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Erro ao acessar banco de dados.");
}
}
public static void saveUsuario(Usuario usuario) {
try {
Connection conn = getConnection();
String sql = "insert into usuario(nome, id_perfil, id_departamento, data_nascimento ) values(?,?,?,?)";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, usuario.getNome());
stmt.setInt(2, usuario.getPerfil().getId().intValue());
stmt.setInt(3, usuario.getDepartamento().getId().intValue());
Date sqlDate = new Date(usuario.getDataNascimento().getTime());
stmt.setDate(4, sqlDate);
stmt.execute();
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Erro ao acessar banco de dados.");
}
}
public static void updateUsuario(Usuario usuario) {
try {
Connection conn = getConnection();
String sql = "update usuario set nome = ?, id_perfil = ?, id_departamento = ? where id = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, usuario.getNome());
stmt.setInt(2, usuario.getPerfil().getId());
stmt.setInt(3, usuario.getDepartamento().getId());
stmt.setLong(4, usuario.getId());
System.out.println("Update usuario: "+stmt);
stmt.execute();
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Erro ao acessar banco de dados.");
}
}
public static void removeUsuario(Usuario usuario) {
try {
Connection conn = getConnection();
String sql = "delete from usuario where id = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setLong(1, usuario.getId());
System.out.println("Delete usuario: "+stmt);
stmt.execute();
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Erro ao acessar banco de dados.");
}
}
}
O erro mesmo erro é apresentado para a declaração
throw new RuntimeException("Erro ao acessar banco de dados.");
declarada na linha 53 e na linha 100 respectivamente os metodos
getUsuarios() e getPerfis()
Aguardo a ajuda… Agradeço a todos desde já!