Итак, сначала давайте посмотрим, как настроить 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 .