我有一個EAR,它目前只包含一個WAR。我的問題是,如果mybatis -.... jar文件位於web-module.war \ WEB-INF \ lib然後一切工作正常。但如果我用maven創建了一場小型戰爭,並且兩個mybatis相關的jar文件位於EAR/lib下,我得到一個「沒有正確配置SqlSessionFactory生產者。」「錯誤。EAR情況下MyBatis CDI類加載器問題
我認爲這是一個類路徑相關的問題。
我打算在EAR中加入更多的WAR,並且我想避免將這兩個罐放入每個WAR中。
環境:Java的8,似鯖水狼牙魚服務器4.1.2.172
這是我的耳朵的結構,但它不工作
EAR
+-- lib
+ mybatis-3.4.4.jar
+ mybatis-cdi-1.0.0.jar
+-- web-module.war
Web模塊包含一個EJB注入一個servlet 。這個EJB使用myBatis映射器。
的Servlet
@WebServlet("/echo")
public class EchoServlet extends HttpServlet {
@EJB
private EchoService echoService;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
try (PrintWriter writer = resp.getWriter()) {
writer.println(echoService.echo("lorempisum"));
}
}
}
EJB
@Stateless
public class EchoBean implements EchoService {
@Inject
private AccountDao accountDao;
@Override
public String echo(String text) {
List<String> emails = accountDao.findAll();
return "Hello " + text + "! There are " + emails.size() + " emails in the DB.");
}
}
MyBatis的映射器
@Mapper
public interface AccountDao {
@Select("SELECT email FROM dev.account")
List<String> findAll();
}
如果我更改了EAR的結構,那麼我的項目工作正常。
EAR
+-- lib
+-- web-module.war
+-- WEB-INF
+-- lib
+-- mybatis-3.4.4.jar
+-- mybatis-cdi-1.0.0.jar
我嘗試添加MANIFEST.MF文件耳\ WEB-module.war \ META-INF目錄用下面的內容,但它並沒有幫助:
Class-Path: lib/mybatis-3.4.4.jar lib/mybatis-cdi-1.0.0.jar
我也試着添加glassfish-web.xml文件到ear \ web-module.war \ WEB-INF所描述的目錄here但它並沒有幫助:
<glassfish-web-app>
<class-loader delegate="true" extra-class-path="../lib/mybatis-3.4.4.jar:../lib/mybatis-cdi-1.0.0.jar"/>
</glassfish-web-app>
不知道如何解決這個問題的類路徑?