Olá Pessoal,
Sou novato por aqui e novato com JAVA embora já tenha estudado um bocado. Gostaria de expor uma problema de uma aplicação para que vcs possam me ajudar.
Estou usando:
Mentawai 1.9
Tomcat 5.5
Java 1.5
Firebird 2.0 (Usando o driver - Jaybird)
(Obs.: Os jars do Jaybird estão em \WEB-INF\lib)
O meu problema está no uso de um pool de conexões com o Firebird. Quando uma action é chamada e vou usar uma conexão do pool ele está me retornado o seguinte erro:
HTTP Status 500 ---------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Exception while invoking action busca: null / java.lang.NullPointerException / null / java.lang.NullPointerException
org.mentawai.core.Controller.service(Controller.java:533)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)root cause
java.lang.NullPointerException
bookshop.busca.execute(busca.java:19)
org.mentawai.core.InvocationChain.invoke(InvocationChain.java:175)
org.mentawai.core.Controller.invokeAction(Controller.java:631)
org.mentawai.core.Controller.service(Controller.java:496)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)note The full stack trace of the root cause is available in the Apache Tomcat/5.5.20 logs.
segue abaixo o codigo do ApplicationManager.java:
import org.mentawai.core.*;
import org.mentawai.db.*;
import org.mentawai.filter.*;
import java.util.*;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import bookshop.*;
public class ApplicationManager extends org.mentawai.core.ApplicationManager {
private ConnectionHandler connHandler;
public void init(Context application) {
this.connHandler = new C3P0ConnectionHandler("org.firebirdsql.jdbc.FBDriver",
"jdbc:firebirdsql:localhost/3050:hubnerGDB",
"sysdba",
"masterkey");
C3P0ConnectionHandler c3p0 = (C3P0ConnectionHandler) connHandler;
ComboPooledDataSource pool = (ComboPooledDataSource) c3p0.getComboPooledDataSource();
pool.setMaxIdleTime(600);
pool.setInitialPoolSize(5);
pool.setMaxPoolSize(20);
}
public void loadActions() {
List<Filter> common = new ArrayList<Filter>();
// Validation for all actions that implement Validatable
common.add(new ValidatorFilter());
// IoC (Autowiring)
common.add(new IoCFilter());
// Connection Pooling
common.add(new ConnectionFilter("connection", connHandler));
// DI (anything that needs a connection will receive a connection !!!!)
common.add(new DIFilter("connection", java.sql.Connection.class));
// Injection for actions (or models if action implements ModelDriven)
common.add(new InjectionFilter());
addGlobalFilter(common);
action("/newsletter", newsletter.class)
.on(SUCCESS, fwd("/jsp/resultadonewsletter.jsp"))
.on(ERROR, fwd("/jsp/semtitulo.jsp"));
action("/busca", busca.class)
.on(SUCCESS, fwd("/index.jsp"))
.on(ERROR, fwd("/jsp/semtitulo.jsp"));
/* muito do código aqui vem do exemplo: mybook do site do Mentawai */
}
}
e da action em questão:
busca.java
package bookshop;
import java.sql.*;
import java.util.*;
import org.mentawai.core.*;public class busca extends BaseAction {
public String execute() throws Exception {
String titulo = input.getStringValue("valor");
if (titulo == null) {
return ERROR;}
Connection conn = (Connection) input.getValue("connection");
PreparedStatement stmt = null;
ResultSet rset = null;stmt = conn.prepareStatement("select bairro_cli from cliente where nome_fantasia = 'FEIRA CULTURAL'");
/* ---> está ocorrendo o erro aqui, na linha acima e o SQL está ok tb -------*/
rset = stmt.executeQuery();
if (rset.next()) {
titulo = rset.getString(1);
}try { if (rset != null) rset.close(); } catch(Exception e) { }
try { if (stmt != null) stmt.close(); } catch(Exception e) { }BeanPrincipal bp = (BeanPrincipal) session.getAttribute("bp");
bp.setTitulo_cabecalho(titulo);return SUCCESS;
}}
Vale ressaltar que a 'string de conexão' está correta pois já testei a conexão direta com o banco e está ok.
o arquivo web.xml está assim:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>org.mentawai.core.Controller</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>*.mtw</url-pattern>
</servlet-mapping>
<filter>
<filter-name>DebugFilter</filter-name>
<filter-class>
org.mentawai.util.DebugServletFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>DebugFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<session-config>
<session-timeout>
1
</session-timeout>
</session-config>
<error-page>
<error-code>403</error-code>
<location>/erros/403.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/erros/404.html</location>
</error-page>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
ja perdi alguns dias tentando resolver isso e não consegui. Será que algum dos mestres aqui poderiam me ajudar a encontrar o erro que está ocorrendo, como relatei acima?
Desde já,
obrigado.
Hübner (ETI)