Я тестирую 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 много раз, но если я повторно разверну (горячее развертывание), ошибка произойдет ... нужно ли мнезакрыть что-нибудь?