Maven, Jetty, JOTM
Мне не удалось настроить JOTM поверх Jetty в среде сборки Maven. Исключение, которое я получаю при попытке запустить свое приложение, заключается в следующем:
2009-07-21 19:47:23.499::WARN: Config error at <New id="UserTransaction" class="org.mortbay.jetty.plus.naming.Transaction"><Arg>
<Ref id="ut"/>
</Arg></New>
[INFO] Jetty server exiting.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failure
A flat name can only have a single component
Я использую это как ссылку: http://docs.codehaus.org/display/JETTY/JOTM
jetty.xml (jettyConfig в pom.xml maven, это на самом деле видно)
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
<!-- Configure a Jotm instance which provides a javax.transaction.TransactionManager -->
<!-- and a javax.transaction.UserTransaction implementation. -->
<New id="jotm" class="org.objectweb.jotm.Jotm">
<Arg type="boolean">True</Arg>
<Arg type="boolean">False</Arg>
<Call id="tm" name="getTransactionManager"/>
<Call id="ut" name="getUserTransaction"/>
</New>
<!-- Set up the UserTransaction impl from JOTM as the transaction manager for jetty -->
<!--
<New id="UserTransaction" class="org.mortbay.jetty.plus.naming.Transaction">
<Arg>
<Ref id="ut"/>
</Arg>
</New>
-->
<New id="userTransaction" class="org.mortbay.jetty.plus.naming.Resource">
<Arg></Arg>
<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>
<!-- If you want to be able to set up more references in webapp specific files -->
<!-- such as context deployment files and WEB-INF/jetty-env.xml files, you -->
<!-- need to save a reference to the JOTM tm object: -->
<!--
<Call name="setAttribute">
<Arg>tm</Arg>
<Arg><Ref id="tm"/></Arg>
</Call>
-->
</Configure>
carol.properties (не уверен, что это замечено, но, за исключением, это вообще актуально?)
carol.start.ns=false
carol.start.jndi=false
carol.protocols=jrmp
carol.start.rmi=false
carol.jvm.rmi.local.call=true
carol.jndi.java.naming.factory.url.pkgs=org.mortbay.naming
Есть идеи?
Спасибо Уолтер
2 ответа
Где carol.properties находится в вашем проекте?
Ресурсы Maven должны находиться в каталоге src/main/resources. Jetty ожидает, что файл carol.properties будет находиться в папке ресурсов.
Поэтому вам может понадобиться переместить carol.properties в src / main / resources / resources, чтобы файл был скопирован в target/resources на этапе process-resources перед запуском Jetty.
Кажется, что Кэрол использует собственный carol.jar/carol.properties
файл вместо твоего. я подготовил пример проекта с JTA в пристани 8 с измененным carol.jar/carol.properties
файл. там это http://github.com/beolnix/jta-in-jetty8. Кажется, что все в порядке, (коммит, откат - не проблема), но иногда org.omg.CORBA.BAD_INV_ORDER
появляется исключение. В моем примере это исключение игнорируется
try {
ret = ctx.proceed()
tx.commit()
} catch (org.omg.CORBA.BAD_INV_ORDER e) {
//nop
} catch (Throwable e) {
tx.rollback()
throw new TransactionException(e.getMessage())
}
потому что это не влияет на результат обработки транзакции