Статьи

Настройка JNDI с помощью Jetty (Embedded)

Я использовал встроенный Jetty в своем рабочем пространстве, сэкономив время на порочном цикле компиляции и развертывания. Я мало работал с Jetty, и простота использования заставила меня зацепиться за него. Мне нужно было настроить JNDI, чтобы получить пул соединений для моих действий, связанных с базой данных. Хотя в некоторых местах была полная документация, большинство было разбросано. Таким образом, этот пост предназначен для того, чтобы стать единым местом для требования настройки JNDI с Jetty. Если это не так, пожалуйста, оставьте комментарий, и я буду рад помочь вам.

Итак, сначала давайте посмотрим, как настроить Jetty для работы в качестве встроенного сервера. Структура папок моего проекта Eclipse выглядит следующим образом;

Папка etc будет содержать все файлы конфигурации, необходимые для Jetty. Вы можете скачать причал отсюда . Для этого примера я использовал jetty-6.1.26.

Включите следующие банки из указанных папок;

Lib jetty-xxxx.jar, jetty-util-xxxx.jar, сервлет-api-xxjar
Библиотека / плюс Причал-плюс-xxxx.jar
Библиотека / именование Причал-именование-xxxx.jar

Для моего примера я настроил mysql и, следовательно , jar -файл mysql-connector также включен в путь к моей библиотеке.

Скопируйте все файлы, находящиеся в каталоге etc вашей установки Jetty, в каталог etc вашего проекта eclipse.

Чтобы включить JNDI, нам сначала нужно включить jetty-plus. Есть много способов сделать это, например, предоставить его как arun-timeargument, включая его в свой собственный файл jetty-env.xml, находящийся в вашем WEB-INF, или скопировав и вставив необходимые фрагменты xml из файла jetty-plus.xml в ваш файл. jetty.xml. Я выбрал последнее. Следовательно, я включил следующий фрагмент в мой файл jetty.xml;

1
2
3
4
5
6
7
<Array id="plusConfig" type="java.lang.String">
  <Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item>
  <Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item>
  <Item>org.mortbay.jetty.plus.webapp.Configuration</Item>
  <Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item>
  <Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item>
</Array>
01
02
03
04
05
06
07
08
09
10
11
12
13
<call name="addLifeCycle">
      <arg>
        <new class="org.mortbay.jetty.deployer.WebAppDeployer">
          <set name="contexts"><ref id="Contexts"></ref></set>
          <set name="webAppDir"><systemproperty default="." name="jetty.home">/webapps</systemproperty></set>
          <set name="parentLoaderPriority">false</set>
          <set name="extract">true</set>
          <set name="allowDuplicates">false</set>
          <set name="defaultsDescriptor"><systemproperty default="." name="jetty.home">/etc/webdefault.xml</systemproperty></set>
          <set name="configurationClasses"><ref id="plusConfig"></ref></set>
        </new>
      </arg>
</call>

Затем вам нужно добавить фрагмент XML, связанный с вашим источником данных, в ваш jetty.xml. Я добавил фрагмент, необходимый для mysql. Для любой другой базы данных, пожалуйста, проверьте эту ссылку.

01
02
03
04
05
06
07
08
09
10
11
  <New id="myds" class="org.mortbay.jetty.plus.naming.Resource">
 
     <Arg>jdbc/MySQLDS</Arg>
     <Arg>
        <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
           <Set name="Url">jdbc:mysql://localhost:3306/test</Set>
           <Set name="User">root</Set>
           <Set name="Password">password</Set>
        </New>
     </Arg>
</New>

Теперь, когда мы настроили все, все, что вам нужно сделать, это запустить Jetty во встроенной среде. Следующий код показывает, как запустить Jetty во встроенном режиме как часть вашего основного класса;

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.io.File;
 
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.jetty.handler.HandlerList;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.xml.XmlConfiguration;
 
 
 
 
public class JettyTest {
 
 public static void main(String[] args) throws Exception {
  Server jetty = new Server();
  String[] configFiles = {"etc/jetty.xml"};
  for(String configFile : configFiles) {
  XmlConfiguration configuration = new XmlConfiguration(new File(configFile).toURI().toURL());
  configuration.configure(jetty);
  }
   
  WebAppContext appContext = new WebAppContext();
  appContext.setContextPath("/myapp");
  File rd = new File("path_to_your_war_file");
  appContext.setWar(rd.getAbsolutePath());
  HandlerList handlers = new HandlerList();
  handlers.setHandlers(new Handler[]{ appContext, new DefaultHandler()});
  jetty.setHandler(handlers);
  jetty.start();
 }
}

Вот об этом. Теперь вы можете посмотреть ваш источник данных, который предоставляется от Jetty. Для простоты я настроил его с помощью Spring JNDIObjectFactoryBean . Один важный аспект, на который следует обратить внимание, — это URL-адрес провайдера jndi и исходные записи фабрики контекста, необходимые для Jetty.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
      <property name="environment">
          <props>
              <prop key="java.naming.factory.initial">org.mortbay.naming.InitialContextFactory</prop>
              <prop key="java.naming.provider.url">org.mortbay.naming</prop>
          </props>
      </property>
  </bean>
   
  <bean id="jndiDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  
      <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
      </property>
      <property name="jndiName">
            <value>jdbc/MySQLDS</value>
      </property>
    </bean>

При этом у вас есть все, что вам нужно для настройки JNDI и доступа к нему через шаблон Spring JNDI . Еще одна вещь, которая меня интересовала, была удаленная отладка с помощью сервера Jetty. После некоторых поисков я обнаружил, что вам нужно включить следующее в вашу конфигурацию времени выполнения в качестве аргументов VM;

-Xdebug -Xnoagent -Xrunjdwp: transport = dt_socket, server = y, suspend = n, address = 8000

Это позволит вам удаленно отлаживать ваше приложение через порт 8000. Если есть какие-либо вопросы, пожалуйста, оставьте комментарий, и я буду более чем рад помочь любому. И, конечно же, если вы видите какую-либо ошибку, оставьте ответ, который также очень ценится :).

Ссылка: Настройка JNDI с помощью Jetty (Embedded) от нашего партнера по JCG Динуки Арурилератне в блоге My Journey By IT .