...
- set up the jetty installation for the transaction manager of your choice, following the instructions for JOTM here or Atomikos here (Atomikos recommended).
- copy $jetty.home/lib/jsp-2.0/jcl104-over-slf4j-1.0.1.jar and $jetty.home/lib/slf4j-simple-1.0.1.jar to $jetty.home/lib/. This configures your commons-logging implementation so that JIRA (and JOTM if you are using it) send their log messages to the same log as the jetty server, using SLF4J. Alternatively if you want to use commons-logging, you will need to copy the commons-logging jar and a commons logging impl into the $jetty.home/lib/ directory instead.
- setup the JNDI resources. To save you some time, you can use the jetty-jira-jndi.xml file attached to this page, copy it into $jetty.home/etc, and uncomment either the Atomikos or the JOTM setup as you prefer. The file also contains a mail Session JNDI binding which you can uncomment and configure if you elected to setup a <resource-ref> for it in the JIRA web.xml in previous steps.
- run JIRA in jetty withcopy jta.properties and place it on $jetty.home/resources
There are 2 ways to deploy:
Using WebAppDeployer
- Configuration
On your jetty-plus.xml, uncomment(if its commented out) the ff:Code Block xml <Call name="addLifeCycle"> <Arg> <New class="org.mortbay.jetty.deployer.WebAppDeployer"> <Set name="contexts"><Ref id="Contexts"/></Set> <Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps-plus</Set> <Set name="parentLoaderPriority">false</Set> <Set name="extract">true</Set> <Set name="allowDuplicates">false</Set> <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set> <Set name="configurationClasses"><Ref id="plusConfig"/></Set> </New> </Arg> </Call> - Running:
Code Block java -jar start.jar etc/jetty.xml etc/jetty-plus.xml etc/jetty-jira-jndi.xml
Tip title Shortening the runline You can move all of the jetty xml configuration into a single file if you want to shorten the runline. Better yet, put it all in etc/jetty.xml and you won't even have to specify any config file on the runline, as it is the default:
Code Block java -jar start.jar
Using ContextDeployer
- Configuration:
Create a "jira-context.xml" in $jetty.home/contexts and append the ff:Code Block xml <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <Configure class="org.mortbay.jetty.webapp.WebAppContext"> <Set name="contextPath">/</Set> <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps-plus/atlassian-jira</Set> <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set> <!-- NEEDED WHEN USING JNDI --> <Set name="configurationClasses"> <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> </Set> </Configure> - Running:
Code Block java -jar start.jar etc/jetty.xml etc/jetty-jira-jndi.xml
Addendum
For the curious, here's what the jetty-jira.xml file looks like:
| Code Block | ||
|---|---|---|
| ||
<!-- =============================================================== -->
<!-- Configuring Transactions and XA Datasources -->
<!-- Uncomment EITHER the setup for Atomikos OR for Jotm -->
<!-- =============================================================== -->
<!-- START OF ATOMIKOS
<Call class="java.lang.System" name="setProperty">
<Arg>com.atomikos.icatch.file</Arg>
<Arg>webapps-plus/test-jndi/WEB-INF/classes/<Arg><SystemProperty name="jetty.home" default="." />/resources/jta.properties</Arg>
</Call>
<New id="tx" class="org.mortbay.jetty.plus.naming.Transaction">
<Arg>
<New class="com.atomikos.icatch.jta.UserTransactionImp"/>
</Arg>
</New>
<New id="jira-ds" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>jdbc/JiraDS</Arg>
<Arg>
<New class="com.atomikos.jdbc.nonxa.NonXADataSourceBean">
<Set name="Url">jdbc:hsqldb:./database/jiradb</Set>
<Set name="driverClassName">org.hsqldb.jdbcDriver</Set>
<Set name="user">sa</Set>
</New>
</Arg>
</New>
END OF ATOMIKOS -->
<!-- START OF JOTM CONFIG
<New id="jotm" class="org.objectweb.jotm.Jotm">
<Arg type="boolean">True</Arg>
<Arg type="boolean">False</Arg>
<Call id="ut" name="getUserTransaction"/>
<Call id="tm" name="getTransactionManager"/>
</New>
<Call name="setAttribute">
<Arg>txmgr</Arg>
<Arg><Ref id="tm"/></Arg>
</Call>
<New class="org.mortbay.jetty.plus.naming.Resource">
<Arg>javax.transaction.TransactionManager</Arg>
<Arg><Ref id="ut"/></Arg>
</New>
<New id="tx" class="org.mortbay.jetty.plus.naming.Transaction">
<Arg>
<Ref id="ut"/>
</Arg>
</New>
<New class="org.mortbay.jetty.plus.naming.Resource">
<Arg>XAJiraDS</Arg>
<Arg>
<New id="myxadatasource" class="org.enhydra.jdbc.standard.StandardXADataSource">
<Set name="DriverName">org.hsqldb.jdbcDriver</Set>
<Set name="Url">jdbc:hsqldb:./database/jiradb</Set>
<Set name="User">sa</Set>
<Set name="Password"></Set>
<Set name="transactionManager"><Ref id="tm"/></Set>
</New>
</Arg>
</New>
<New id="mydatasource" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>jdbc/JiraDS</Arg>
<Arg>
<New class="org.enhydra.jdbc.pool.StandardXAPoolDataSource">
<Arg><Ref id="myxadatasource"/></Arg>
<Set name="DataSourceName">XAJiraDS</Set>
<Set name="User">sa</Set>
</New>
</Arg>
</New>
END OF JOTM -->
<!-- =============================================================== -->
<!-- Optional Mail Session setup -->
<!-- =============================================================== -->
<New id="mail" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>mail/Session</Arg>
<Arg>
<New class="org.mortbay.naming.factories.MailSessionReference">
<Set name="user">CHANGEME</Set>
<Set name="password">CHANGEME</Set>
<Set name="properties">
<New class="java.util.Properties">
<Put name="mail.smtp.host">CHANGEME</Put>
<Put name="mail.from">CHANGEME</Put>
<Put name="mail.debug">true</Put>
</New>
</Set>
</New>
</Arg>
</New>
|
...