小编all*_*cth的帖子

JTA容器管理的事务回滚不适用于jaxrs端点

休息端点

<jaxrs:server id="jaxrs" 
              address="http://127.0.0.1:8080/jaxrs">

    <jaxrs:serviceBeans>
        <ref component-id="service1" />
        ...
        ...
        <ref component-id="serviceX" />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref component-id="runtimeExceptionMapper" />
    </jaxrs:providers>
</jaxrs:server>
Run Code Online (Sandbox Code Playgroud)

路线

<route id="secureBridgeRoute">
    <from uri="jetty:https://0.0.0.0:443/jaxrs?sslContextParametersRef=sslContextParameters&amp;matchOnUriPrefix=true&amp;minThreads=8&amp;maxThreads=16" />
    <transacted ref="JTA_TRANSACTION" />
    <to uri="jetty:http://127.0.0.1:8080/jaxrs?bridgeEndpoint=true&amp;throwExceptionOnFailure=true" />
</route>
Run Code Online (Sandbox Code Playgroud)

DAO

<bean id="dao1" class="com.example.Dao1" activation="eager">
    <jpa:context unitname="PU" property="entityManager" type="TRANSACTION" />
</bean>
Run Code Online (Sandbox Code Playgroud)

服务bean

<bean id="service1" class="com.example.Service1" activation="eager">
    <property name="dao1" ref="dao1" />
    <property name="dao2" ref="dao2" />
    <tx:transaction method="*" value="Required" />
</bean>
Run Code Online (Sandbox Code Playgroud)

服务bean方法伪代码

boolean create(entity1, entity2) {
    dao1.persist(entity1);
    dao2.persist(entity2);
}
Run Code Online (Sandbox Code Playgroud)

当dao2持久失败时,事务没有回滚.Entity1被插入到DB中.

附加信息

1)TransactionManager定义

<reference id="platformTransactionManager" interface="org.springframework.transaction.PlatformTransactionManager" />
<bean id="JTA_TRANSACTION" class="org.apache.camel.spring.spi.SpringTransactionPolicy"> …
Run Code Online (Sandbox Code Playgroud)

jta jax-rs apache-camel aries jbossfuse

13
推荐指数
1
解决办法
363
查看次数

camel-mongodb将java.util.Date保存为ISODate而不是NumberLong

我正在使用Apache Camel 2.13.1和MongoDB 2.2.2.我有以下路线:

<route id="camel-route" autoStartup="true">
    <from uri="file:/dir?move=${date:now:yyyyMMdd}\processed\${file:name}&amp;moveFailed=${date:now:yyyyMMdd}\failed\${file:name}" />

    <unmarshal>
        <jaxb prettyPrint="false" contextPath="com.example.model" />
    </unmarshal>

    <to uri="mongodb:connectionBean?database=db&amp;collection=coll&amp;operation=save" />
</route>
Run Code Online (Sandbox Code Playgroud)

文件使用者端点获取XML文件并将其解组为POJO,该POJO包含数据类型为int,String和java.util.Date的多个字段.它保存/插入正常但日期字段保存为NumberLong类型,而不是类型ISODate.

但是如果我使用MongoDB Java驱动程序保存它(即创建DBObject,使用字段"new Date()"映射一个键),它将在MongoDB中保存为ISODate.我可以通过使用camel XML DSL来实现这一点吗?

编辑:深入研究代码和文档,camel-mongodb使用Jackson,首先将其转换为Map,然后转换为BasicDBObject.有没有办法在XML DSL中我可以配置杰克逊的行为?最后一种方法是编写自定义类型转换器.

java date apache-camel mongodb isodate

10
推荐指数
0
解决办法
784
查看次数

在查找/聚合之后填写具有默认值的文档

我有一个集合:

{ "name" : "A", "value" : 1, "date" : ISODate("2014-01-01T00:00:00.000Z") }
{ "name" : "B", "value" : 7, "date" : ISODate("2014-01-01T00:00:00.000Z") }
{ "name" : "A", "value" : 3, "date" : ISODate("2014-01-02T00:00:00.000Z") }
{ "name" : "B", "value" : 8, "date" : ISODate("2014-01-02T00:00:00.000Z") }
{ "name" : "B", "value" : 8, "date" : ISODate("2014-01-03T00:00:00.000Z") }
{ "name" : "A", "value" : 5, "date" : ISODate("2014-01-04T00:00:00.000Z") }
{ "name" : "A", "value" : 4, "date" : ISODate("2014-01-05T00:00:00.000Z") }
Run Code Online (Sandbox Code Playgroud)

2014年1月3日的A文档不可用.当我在A上进行查找/聚合时,我希望文档在我的结果集中显示为默认值(或更好,值与上一个日期相同).例如:

{ …
Run Code Online (Sandbox Code Playgroud)

mongodb

2
推荐指数
1
解决办法
1334
查看次数

标签 统计

apache-camel ×2

mongodb ×2

aries ×1

date ×1

isodate ×1

java ×1

jax-rs ×1

jbossfuse ×1

jta ×1