Mybatis не открыть сессию внутри JBOSS от LinkageError - PullRequest
2 голосов
/ 28 ноября 2011

Я тестирую mybatis 3.0.6 с JBOSS 4.3, но не могу открыть сессию.

Я установил JBOSS сегодня (в Ubuntu), он пуст, только другое ухо, и я поставил драйвер дляpostgress и файл источника данных (xx-ds.xml) внутри сервера.

Я сделал очень простое ухо с maven (2.2)

только три банка в каталоге lib

  • mybatis-3.0.6.jar
  • ejbinterface-0.0.1-SNAPSHOT.jar (только один интерфейс, не используется)
  • datajar-0.0.1-SNAPSHOT.jar(Картограф mybatis и его интерфейс)

Код только один EJB

package com.mycompany.it;

import java.io.IOException;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.jws.WebService;
import my.company.it.data.MyMapper;
import my.company.it.data.MyData;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


@WebService
@Stateless
@LocalBean
public class MyEndPoint{
private SqlSessionFactory sqlMapper=null;

public int multiply(int num, int num2) {

    System.out.println("1.Begin..");

    if(sqlMapper==null){
        try {
            System.out.println("2. Opening Xml");
            sqlMapper = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis/SQLMapConfig.xml"));
            System.out.println("3. End with XML");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    if(sqlMapper!=null){
        System.out.println("4. Open Session");//The Crash
        SqlSession misession = sqlMapper.openSession();
        try {

            System.out.println("5. GetMapper");
            MyMapper mapper = misession.getMapper(MyMapper.class);
            MyData mydata= new MyData();
            mydata.setId(num);
            mydata.setCampito("XXXXX");
            mapper.insertMyData(mydata);
            System.out.println("Good...");

            //othernum=otherbean.getNumber(3,misession);
        } finally{
            misession.close();  
        }
    }

    return num*num2;
}

}

Когда я вызываю EJB, эта ошибка происходит

2011-11-27 21:14:36,160 INFO  [STDOUT] 1.Begin..
2011-11-27 21:14:36,160 INFO  [STDOUT] 2. Opening Xml
2011-11-27 21:14:36,194 INFO  [STDOUT] 3. End with XML
2011-11-27 21:14:36,194 INFO  [STDOUT] 4. Open Session
2011-11-27 21:14:36,200 ERROR [org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS] SOAP request exception
javax.ejb.EJBException: java.lang.RuntimeException: java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.apache.ibatis.session.defaults.DefaultSqlSession.getConfiguration()Lorg/apache/ibatis/session/Configuration;" the class loader (instance of org/jboss/mx/loading/UnifiedClassLoader3) of the current class, org/apache/ibatis/session/defaults/DefaultSqlSession, and the class loader (instance of org/jboss/mx/loading/UnifiedClassLoader3) for interface org/apache/ibatis/session/SqlSession have different Class objects for the type org/apache/ibatis/session/Configuration used in the signature
at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:63)
at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)

У меня нет специального xml для Jboss, а application.xml генерируется maven и тоже очень прост.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
"http://java.sun.com/dtd/application_1_3.dtd">
<application>
   <display-name>earpackage</display-name>
      <module>
         <ejb>ejb3test-0.0.1-SNAPSHOT.jar</ejb>
      </module>
</application>

Мне нужно что-то еще для Ibatis?специальный файл для JBOSS?

Если я выключаю JBOSS, EJB работает и открывает сеанс, и я могу вызывать ejb много раз, но если я повторно разверну (горячее развертывание), ошибка произойдет ... нужно ли мнезакрыть что-нибудь?

...