我在我我的的開發環境中使用嵌入式jetty(查看jetty文檔),以此來避免編譯、部署等循環對時間的浪費。我使用jetty的時間並不長,可是他的易用性讓我很喜歡。爲了個人數據庫鏈接池的活動鏈接,我須要創建起一套JNDI。這篇文章的目的就是讓你學會在jetty下配置jndi。 html
下面是個人一個例子,這個例子我使用的是jetty-6.1.26 你能夠經過這裏下載jetty。 包括了以下jar包。 java
lib | jetty-x.x.xx.jar, jetty-util-x.x.xx.jar,servlet-api-x.x.jar |
lib/plus | jetty-plus-x.x.xx.jar |
lib/naming | jetty-naming-x.x.xx.jar |
對於個人例子來說,我已經設置好了mysql(查看mysql文檔)並且mysql驅動也在個人庫路徑下。 將jetty安裝目錄下的etc文件夾下的全部內容複製到eclipse工程目錄下的etc目錄裏。 爲了配置JNDI,咱們首先須要引入jetty-plus。固然有不少方法能夠作到這一點,例如經過參數的方式、在jetty-env.xml中引入的方式、從jetty-plus.xml文件中複製相關內容到jetty.xml文件中等方式。我選擇了最後一種,我在jetty.xml文件中加入了以下片斷。 mysql
<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>
<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>
下一步,你須要將數據源(data source)添加到你的jetty.xml中。我添加了mysql的數據源,其餘數據庫請看這個連接。web
<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。下面的代碼展現瞭如何在main方法中以嵌入式的方式運行jetty。 spring
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暴漏出的接口查看data source。簡單的,我已經使用Spring的JNDIObjectFactoryBean配置好了。須要注意的一點是,jetty須要提供url和初始化上下文。sql
<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>
如今你已經能夠經過Spring 的JNDI template來訪問你配置好的JNDI了。我感興趣的另一件事是使用jetty進行遠程調試。我經過搜索後發現,你須要爲你的虛擬機運行時添加以下參數:shell
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
這些參數可讓你在8000端口上進行遠程調試。數據庫