2015-01-27 2 views
0

2 개의 데이터 소스를 사용하는 Spring 4 응용 프로그램이 있습니다. 하나는 MongoDB입니다. 가까운 쿼리를 수행 할 때 다음 오류가 발생합니다.봄 - mongoDb 오류 : com.mongodb.WriteConcernException : "색인에 부적절한 ns"

org.springframework.web.util.NestedServletException : 요청 처리가 실패했습니다. 중첩 예외는 com.mongodb.WriteConcernException : { "serverUsed": "aValideMongoDB", "err": "인덱스에 유효하지 않은 ns", "code": 10096, "n": 0, "connectionId": 955, "ok" : 1.0}

실패 코드 :

private List<GeoSearchDealer> doDealerQuery(NearQuery nearQuery, DistanceKind distanceKind) { 
    // FAILS AT THIS LINE 
    GeoResults<InventoryDealer> results = mongoTemplate.geoNear(nearQuery, InventoryDealer.class); 
    List<GeoSearchDealer> dealers = new ArrayList<GeoSearchDealer>(); 

    for (GeoResult<InventoryDealer> result : results) { 
     ... 
    } 

    return dealers; 
} 

모두가 프로그래밍 방식으로 생성된다, 그래서 아무 XML. 다음은 설정 클래스는 다음과 같습니다

@Configuration 
@ComponentScan("path.to.code.base") 
@EnableWebMvc 
@EnableTransactionManagement 
@EnableMongoRepositories("path.to.code.base") 
@EnableSpringDataWebSupport 
@EnableMongoAuditing 
public class AppConfig { 

    // other beans omitted for brevity 

    @Bean 
    public MongoDbFactory mongoDbFactory() throws Exception { 
     MongoClient mongoClient = new MongoClient(mongoHost); 
     return new SimpleMongoDbFactory(mongoClient, mongoDb); 
    } 

    @Bean 
    public MongoTemplate mongoTemplate() throws Exception { 
     MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory()); 
     return mongoTemplate; 
    } 
} 

InventoryDealer 클래스 :

@Document(collection="inventory_dealer") 
public class InventoryDealer { 
    ... 
} 

의 pom.xml :

<spring.version>4.0.6.RELEASE</spring.version> 
    ... 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>4.1.4.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongo-java-driver</artifactId> 
     <version>2.11.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <version>1.6.1.RELEASE</version> 
    </dependency> 
    ... 
이 코드는 일하는 프로토 타입 응용 프로그램에서 이식 된

만 사용하고 있었다

<dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongo-java-driver</artifactId> 
     <version>2.11.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <version>1.2.0.RELEASE</version> 
    </dependency> 

그래서 Geo 클래스의 ome에는 일부 가져 오기가 변경되었지만 주요한 것은 없습니다. 여기서 내가 잘못하고있는 것은 무엇입니까?

나는이의 pom.xml 구성을 사용하는 경우 버그가 봄 드라이버에있다
+1

실패하기 시작하지만, 본질적으로하는이 버그는 Java mongo 드라이버의 2.11.3 버전에서 발생하며 최신 버전을 사용하는 경우 1.4.1 이전 버전의 spring-data-mongodb 라이브러리 만 사용할 수 있습니다. –

+0

나는보고 싶은 것에 대한 제안을하고 싶습니다. 몽고를 사용하지만 스프링을 사용하지 마십시오. 소금 한 알로 이것을 가져 가십시오. 당신이 지리적으로하고있는 일에 대한 변경 사항과 색인 생성에 관한 오류를 언급하기 때문에 언급합니다. - mongo에는 허용되는 지역 인덱스에 몇 가지 변경 사항이 있습니다. 오류를 작성할 수있는 인덱스가있을 수 있습니다 (예 : 잘못된 GeoJson 객체를 2dsphere 인덱스에 작성합니다. 셸에서 직접 수행하려고하는 동일한 쓰기 작업을 수행 할 수 있는지 확인하십시오. 불법 쓰기 인 경우 셸에서 같은 오류가 표시됩니다. –

+0

@SteveB 문제는 명시된 바와 같습니다 - 드라이버 문제가 있습니다. 프로토 타입이 작동하면서 이식 할 때 쿼리가 작동하지만 이전 버전의 라이브러리를 사용하는 것으로 알고있었습니다. 나는 모든 것을 최신 버전으로 이식했고 모두 작동을 멈췄다. 나는 이전 버전으로 갔고 작동하기 시작했다. java-mongo-driver 2.11.3과 spring-data-mongodb 1.6.1의 조합입니다. 두 버전 중 하나를 다시 이동하면 작업이 시작됩니다. 나는 java-mongo-driver 2.11.0으로 돌아 가기로 결심했다. –

답변

0

, 그것은 최신 몽고와 함께 작동 :

<dependency> 
    <groupId>org.mongodb</groupId> 
    <artifactId>mongo-java-driver</artifactId> 
    <!-- <version>2.11.3</version> --> 
    <version>2.11.0</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-mongodb</artifactId> 
    <version>1.6.1.RELEASE</version> 
    <!-- <version>1.4.1.RELEASE</version> --> 
</dependency> 

하지만 버전 2.11.3을 사용하는 경우, 그것은 아래의 오류와 함께 실패 .

드라이버 2.11.3 1.2.0와 작품 - 1.4.1,하지만 내가 하루 내 자신의 질문에 대답 정도 기간을 기다립니다 1.5.1