2012-11-30 2 views
0

iBatis를 사용하여 데스크톱 응용 프로그램을 사용하려고합니다. 하지만 다음과 같은 오류가 발생했습니다. 적절한 해결책을 찾을 수 없습니다. 어느 누구도 나를 도와주세요.스레드 "main"의 예외 java.lang.NoSuchMethodError : com.ibatis.common.beans.ClassInfo.setCacheEnabled (Z) V

로그 ::

Exception in thread "main" java.lang.NoSuchMethodError: com.ibatis.common.beans.ClassInfo.setCacheEnabled(Z)V 
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$3.process(SqlMapConfigParser.java:179) 
at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:112) 
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:75) 
at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:93) 
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:63) 
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51) 
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:86) 
at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63) 
at IbatisInsert.main(IbatisInsert.java:12) 

코드 : IbatisInsert.java

import com.ibatis.common.resources.Resources; 
import com.ibatis.sqlmap.client.SqlMapClient; 
import com.ibatis.sqlmap.client.SqlMapClientBuilder; 
import java.io.*; 
import java.sql.SQLException; 
import java.util.*; 

public class IbatisInsert{ 
    public static void main(String[] args) 
    throws IOException,SQLException{ 
    Reader rd = Resources.getResourceAsReader("SqlMapConfig.xml"); 
    SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd); 

    /* This would insert one record in Employee table. */ 
    System.out.println("Going to insert record....."); 
    Employee em = new Employee("Zara", "Ali", 5000); 

    smc.insert("Employee.insert", em); 

    System.out.println("Record Inserted Successfully "); 

    } 
} 

Employee.java

public class Employee { 
     private int id; 
     private String first_name; 
     private String last_name; 
     private int salary; 

     /* Define constructors for the Employee class. */ 
     public Employee() {} 

     public Employee(String fname, String lname, int salary) { 
     this.setFirst_name(fname); 
     this.setLast_name(lname); 
     this.setSalary(salary); 
     } 

    public String getFirst_name() { 
     return first_name; 
    } 

    public void setFirst_name(String first_name) { 
     this.first_name = first_name; 
    } 

    public String getLast_name() { 
     return last_name; 
    } 

    public void setLast_name(String last_name) { 
     this.last_name = last_name; 
    } 

    public int getSalary() { 
     return salary; 
    } 

    public void setSalary(int salary) { 
     this.salary = salary; 
    } 
    } /* End of Employee */ 

나는 SRC에서 기본 패키지의 두 클래스를 뒀다.

+2

jar 충돌 문제처럼 보입니다. 코드는 iBatis의 다른 버전으로 컴파일되고 다른 버전에서 실행됩니다. – Manish

+0

저는 ibatis를 처음 접했습니다. 모든 병을 필요로합니다. 내가 다음과 같은 항아리가 : 1> ibatis-commons-2.jar 2> ibatis-2.3.0.677.jar 3> spring.jar 4> mysql-connector-java-5.1.5.JAR –

+0

@AbhijeetSinha 문제가되지 않습니다. 불충분 한 항아리가 아니라 항아리의 잘못된 버전. 아래 코드를 실행 해 보도록했습니다. –

답변

1

문제는 클래스 로딩/classpath입니다. 메인 클래스에서이 코드를 사용하여 항아리가로드되는 경로를 찾으십시오.

로딩중인 병이 잘못된 버전 일 수 있습니다.

public static void main(String[] args) { 
      URLClassLoader classLoader = (URLClassLoader)IbatisInsert.class.getClassLoader(); 
      System.out.println(Arrays.toString(classLoader.getURLs())); 
    } 
+0

아마도 ClassLoader가 다른 장소에서 항아리를 집어 들고 있습니다. 위의 코드는 종속성이 해결 된 모든 경로를 제공합니다. –

관련 문제