小编Mat*_*tke的帖子

Java MongoDB对象版本控制

我需要对存储在面向文档的数据库(MongoDB)中的(简单)Java对象图进行版本控制.对于关系数据库和Hibernate,我发现了Envers并且对这些可能性感到非常惊讶.是否有类似的东西可以用于Spring Data Documents?

我发现这篇文章概述了我对存储对象版本的想法(以及更多......),我当前的实现类似,因为它将对象的副本存储在带有时间戳的单独历史记录集合中,但我想改进这一点以节省存储空间.因此,我认为我需要在对象树上实现"diff"操作,并且需要"merge"操作来重建旧对象.有没有图书馆帮助这个?

编辑:任何MongoDB和版本的体验高度赞赏!我看到很可能没有Spring Data解决方案.

java versioning diff mongodb spring-data

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

Spring Data MongoDB:访问和更新子文档

Spring Data和MongoDB的第一次实验非常棒.现在我有了以下结构(简化):

public class Letter {
  @Id
  private String id;
  private List<Section> sections;
}

public class Section {
  private String id;
  private String content;
}
Run Code Online (Sandbox Code Playgroud)

加载和保存整个Letter对象/文档就像一个魅力.(我使用ObjectId为Section.id字段生成唯一的ID.)

Letter letter1 = mongoTemplate.findById(id, Letter.class)
mongoTemplate.insert(letter2);
mongoTemplate.save(letter3);
Run Code Online (Sandbox Code Playgroud)

由于文档很大(200K),有时应用程序只需要子部分:是否有可能查询子文档(部分),修改并保存它?我想实现一个类似的方法

Section s = findLetterSection(letterId, sectionId);
s.setText("blubb");
replaceLetterSection(letterId, sectionId, s);
Run Code Online (Sandbox Code Playgroud)

当然还有以下方法:

addLetterSection(letterId, s); // add after last section
insertLetterSection(letterId, sectionId, s); // insert before given section
deleteLetterSection(letterId, sectionId); // delete given section
Run Code Online (Sandbox Code Playgroud)

我看到最后三种方法有点"奇怪",即加载整个文档,修改集合并再次保存它可能是从面向对象的角度来看更好的方法; 但第一个用例("导航"到子文档/子对象并在此对象的范围内工作)似乎很自然.

我认为MongoDB可以更新子文档,但SpringData可以用于对象映射吗?谢谢你的任何指示.

spring mongodb spring-data spring-data-document

7
推荐指数
1
解决办法
1万
查看次数

高hibernate.jdbc.batch_size设置的缺点

我将hibernate.jdbc.batch_size参数增加到50.这使我们的应用程序中的批处理更快,这很好.我是否需要预期应用程序的"常规"任务有任何缺点?应用程序响应Web请求,并为每个请求使用单个数据库连接.大多数请求只从数据库中读取,一些请求保存了一些对象(但不是数百个).

非常感谢您分享您的经验.

java hibernate jdbc

5
推荐指数
1
解决办法
512
查看次数

SPNEGO / ActiveDirectory / AES256:校验失败

我正在尝试将 SPNEGO/Kerberos5 身份验证与 Active Directory 2008 和 Java 一起使用。我遵循了本指南:http : //spnego.sourceforge.net/ - “预检”进展顺利,但后来我得到了著名的例外:

Exception in thread "main" GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)
    at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:856)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285)
    at sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(SpNegoContext.java:906)
    at sun.security.jgss.spnego.SpNegoContext.acceptSecContext(SpNegoContext.java:556)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342)
    at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285)
    at de.meona.auth.spnego.TestSpnegoAes.main(TestSpnegoAes.java:45)
Caused by: KrbException: Checksum failed
    at sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType.decrypt(Aes256CtsHmacSha1EType.java:102)
Run Code Online (Sandbox Code Playgroud)

我仔细查看了这篇文章,因为问题似乎很相似: 校验和失败:Kerberos / Spring / Active Directory (2008)

为了使问题可重现,我编写了一个小的 Java 类。我能够单步到发生异常的那一行。我认为这是因为用于解密的秘密服务密钥与 Active Directory 用于加密服务票证的秘密服务密钥不同。怎么会这样?

public class TestSpnegoAes {

    private static Oid spnegoOid = null;
    private static String negotiate = …
Run Code Online (Sandbox Code Playgroud)

java kerberos spnego

5
推荐指数
1
解决办法
2729
查看次数

使用Apache CXF更改WSDL xsd:complexType名称

我使用Apache CXF发布Web服务,"即时"生成WSDL.这很好用,但我想更改生成类型的命名约定.当服务客户端(C#)基于WSDL生成代码时,默认的xsd:complexType命名会导致以小写字母开头的类型名称.

以下是生成的WSDL的摘录:

<xs:complexType name="protocolItem">
<xs:sequence>
  <xs:element minOccurs="0" name="data" type="tns:protocolItemData"/>
  <xs:element maxOccurs="unbounded" minOccurs="0" name="elements" nillable="true" type="tns:protocolElement"/>
  <xs:element minOccurs="0" name="meta" type="tns:protocolItemMeta"/>
</xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

这是导致上述WSDL片段的Java代码:

@RooJavaBean
public class ProtocolItem {

    private ProtocolItemData data;
    private ProtocolItemMeta meta;
    private List<ProtocolElement> elements;

}
Run Code Online (Sandbox Code Playgroud)

如何更改生成的WSDL以使用类似的东西<xs:complexType name="ProtocolItem">

希望我没有错过明显的注释......谢谢!

编辑:谢谢你的第一个答案!所以有一种方法可以"按类"执行此操作 - 我可以配置CXF命名约定吗?如果我不需要注释所有类,那将会很好.

java soap wsdl web-services cxf

4
推荐指数
1
解决办法
2252
查看次数

MongoDB:内存不足

我想知道MongoDB内存消耗.我已经阅读了相应的手册部分和有关该主题的其他问题,但我认为这种情况有所不同.我可以问你的意见吗?

这是DB日志文件中的错误:

Fri Oct 26 20:34:00 [conn1] ERROR: mmap private failed with out of memory. (64 bit build) 
Fri Oct 26 20:34:00 [conn1] Assertion: 13636:file /docdata/mongodb/data/xxx_letters.5 open/create failed in createPrivateMap (look in log for more information)
Run Code Online (Sandbox Code Playgroud)

这些是数据文件:

total 4.0G
drwxr-xr-x 2 mongodb mongodb 4.0K 2012-10-26 20:21 journal
-rw------- 1 mongodb mongodb  64M 2012-10-25 19:34 xxx_letters.0
-rw------- 1 mongodb mongodb 128M 2012-10-20 22:10 xxx_letters.1
-rw------- 1 mongodb mongodb 256M 2012-10-24 09:10 xxx_letters.2
-rw------- 1 mongodb mongodb 512M 2012-10-26 10:04 xxx_letters.3
-rw------- …
Run Code Online (Sandbox Code Playgroud)

mongodb

3
推荐指数
1
解决办法
8568
查看次数

LazyInitializationException(Spring和Vaadin)尽管有OpenEntityManagerInView

我使用Spring Roo和Vaadin作为(简单)数据库应用程序.有一个视图显示包含实体的表.对于要显示的表,Hibernate需要延迟加载1:n引用的实体.这适用于小型表,但只要表变大,只有第一部分正确显示,并发生以下异常.

com.vaadin.data.util.MethodProperty$MethodException
    at com.vaadin.data.util.MethodProperty.getValue(MethodProperty.java:612)
    at com.vaadin.data.util.AbstractProperty.toString(AbstractProperty.java:78)
    at com.vaadin.ui.Table.formatPropertyValue(Table.java:3476)
    at eu.wuttke.tinyscrum.ui.dashboard.DashboardTaskStoryTable.formatPropertyValue(DashboardTaskStoryTable.java:66)
    at com.vaadin.ui.Table.getPropertyValue(Table.java:3428)
    at com.vaadin.ui.Table.getVisibleCellsNoCache(Table.java:1853)
    at com.vaadin.ui.Table.refreshRenderedCells(Table.java:1477)
    at com.vaadin.ui.Table.enableContentRefreshing(Table.java:2645)
    at com.vaadin.ui.Table.changeVariables(Table.java:2491)
    at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.changeVariables(AbstractCommunicationManager.java:1455)
    at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1399)
    at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1318)
    at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:763)
    at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:296)
    at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:147)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
    at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
    at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
    at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
    at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
    at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor841.invoke(Unknown Source)
    at …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa vaadin

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