Я оцениваю Quakus как замену среде Tomcat. Я понимаю проблемы того, что я пытаюсь сделать, но сначала мне нужно убедиться, что мое существующее унаследованное JSP-приложение будет работать с Quarkus. Я использую quarkus.undertow в качестве контейнера сервлетов.
Я преодолел несколько препятствий. Сейчас я сталкиваюсь с тем, как использовать свои источники данных.
В настоящее время наши источники данных установлены в Tomcat server.xml как GlobalNamingResources и связывают их в META-INF / context.xml веб-приложения как ResourceLinks.
Я перенес настройку источника данных в приложение Quarkus application.properties как таковое:
quarkus.datasource.menudb.url=jdbc:mysql://some.server.url/menuadmin
quarkus.datasource.menudb.driver=com.mysql.cj.jdbc.Driver
quarkus.datasource.menudb.username=web
quarkus.datasource.menudb.password=<password>
что я понимаю из документации, это способ сделать это. Но в документации показано внедрение источника данных:
@Inject
@DataSource("users")
AgroalDataSource dataSource1;
В моем случае я бы заменил users
на имя моего источника данных menudb
в аннотации. Однако у меня есть классы доступа к данным, которые мне нужно повторно использовать, которые создают InitialContext, ищут источник данных, используя переданное имя ресурса JNDI, и создают источник данных:
InitialContext ic = new InitialContext();
DataSource ds = (DataSource)ic.lookup("java:comp/env/<jndi name>");
conn = ds.getConnection();
Это вызывает следующую ошибку:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at com.gy.obj.ContextManager.contextInitialized(ContextManager.java:367)
at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:188)
...
Первоначальное исследование привело меня к Apache Camel, но это, на первый взгляд, не кажется подходящим решением. Я также читал о настройке jndi.properties следующим образом:
# Needed env settings for JNDI.
java.naming.factory.initial=<Some JNDI Service Provider Name>
Но я не уверен, какой поставщик использовать, и на данный момент не могу найти документацию по различным поставщикам.
Мой вопрос в том, на правильном ли я пути и каким провайдером я бы воспользовался? Мне бы очень не хотелось прикасаться к моим существующим классам доступа к данным, чтобы обеспечить инъекцию, если у меня их тоже нет. Однако я бы не возражал против того, что то, что мы сейчас настроили, работает для Tomcat.