Bom, tenho o seguinte código:
import dao.AlunoDAO;
import dao.DAOFactory;
public class Teste {
public static void main(String[] args) {
DAOFactory base = DAOFactory.getInstance("javabase");
System.out.println("consegui pegar o factory");
AlunoDAO aluno = base.getAlunoDAO();
System.out.println("pegou o alunoDAo");
}
}
só que quando mando rodar, aparece essa exceção:
Exception in thread "main" java.lang.NoSuchMethodError: dao.DAOFactory.getAlunoDAO()Ldao/AlunoDAO;
at Teste.main(Teste.java:9)
Procurei em um monte de lugar e todos falam que é pq não existe método main, bom no meu caso, ele está aí…alguém sabe como resolver isso?
Obrigado.
Na verdade a mensagem de erro diz que ocorreu uma exceção no método main.
O método que não foi encontrado foi o dao.DAOFactory.getAlunoDAO() e não o main.
[quote=Cristiano de Barros]Na verdade a mensagem de erro diz que ocorreu uma exceção no método main.
O método que não foi encontrado foi o dao.DAOFactory.getAlunoDAO() e não o main.[/quote]
Então, o método existe, tá aí:
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public final class DAOFactory {
private static final String PROPERTY_URL = "url";
private static final String PROPERTY_DRIVER = "driver";
private static final String PROPERTY_USERNAME = "username";
private static final String PROPERTY_PASSWORD = "password";
private static final Map<String, DAOFactory> INSTANCES = new HashMap<String, DAOFactory>();
private String url;
private String username;
private String password;
private DataSource dataSource;
private DAOFactory(String name) throws DAOConfigurationException {
DAOProperties properties = new DAOProperties(name);
this.url = properties.getProperty(PROPERTY_URL, true);
String driverClassName = properties.getProperty(PROPERTY_DRIVER, false);
this.password = properties.getProperty(PROPERTY_PASSWORD, false);
this.username = properties.getProperty(PROPERTY_USERNAME, this.password != null);
if (driverClassName != null) {
// If driver is specified, then load it and let it register itself with DriverManager.
try {
Class.forName(driverClassName);
} catch (ClassNotFoundException e) {
throw new DAOConfigurationException(
"Classe driver '" + driverClassName + "' não encontrada no classpath.", e);
}
} else {
// Else assume URL as DataSource URL and lookup it in the JNDI.
try {
dataSource = (DataSource) new InitialContext().lookup(url);
} catch (NamingException e) {
throw new DAOConfigurationException(
"DataSource '" + url + "' não encontrada no JNDI.", e);
}
}
}
public static DAOFactory getInstance(String name) throws DAOConfigurationException {
if (name == null) {
throw new DAOConfigurationException("Nome da base de dados é nulo.");
}
DAOFactory instance = INSTANCES.get(name);
if (instance == null) {
instance = new DAOFactory(name);
INSTANCES.put(name, instance);
}
return instance;
}
Connection getConnection() throws SQLException {
if (dataSource != null) {
if (username != null) {
return dataSource.getConnection(username, password);
} else {
return dataSource.getConnection();
}
} else {
return DriverManager.getConnection(url, username, password);
}
}
public AlunoDAO getAlunoDAO() {
return new AlunoDAO(this);
}
// Você pode adicionar mais getters para DAOs aqui.
}
Bom, resolvi o problema. Tinha um .jar adicionado como biblioteca e o compilador buscava o método nele, onde não existia. Excluí ele e funcionou.
Valeu.