سؤال

أحاول تعلم MongoDB وفي نفس الوقت كتابة تطبيق REST بسيط باستخدام إطار عمل Spring.

لدي نموذج بسيط:

@Document
public class Permission extends documentBase{

@Indexed(unique = true)
private String name;

public   Permission(String name) {
    this.name = name;       
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

ثم لدي DAO بسيط:

@Repository
@Transactional 
@Profile({"production","repositoryTest","mongoIntegrationTest"})
public class DaoImpl   implements DAO  {

@Autowired
protected MongoTemplate mongoTemplate;

public <T> T addObject(T object) {               
     mongoTemplate.insert(object);        
     return object; 
}

لدي اختبارات التكامل الخاصة بي:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:mvc-dispatcher-servlet.xml", classpath:IntegrationContext.xml"},loader = TestXmlContextLoader.class)
@ActiveProfiles("mongoIntegrationTest")
public class RepositoryIntegrationTest extends AccountTestBase{

    @Autowired DAO repository;
    @Autowired WebApplicationContext wac;

    @Test
public void AddPermission() { 
    Permission permission_1 = new Permission("test");           
    Permission permission_2 = new Permission("test");           
    repository.addObject(permission_1);
    repository.addObject(permission_2);
}
}

التكوين الخاص بي:

 <!-- MongoDB host -->
 <mongo:mongo host="${mongo.host.name}" port="${mongo.host.port}"/> 

 <!-- Template for performing MongoDB operations -->
 <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" 
c:mongo-ref="mongo" c:databaseName="${mongo.db.name}"/>

أتوقع أنه عند إضافة "permission_2" سيكون هناك استثناء يتم طرحه من MongoDB، والذي سيتم ترجمته بواسطة Spring، ويتم التقاطه باعتباره DataAccessException في DAO.

بالنظر إلى ملفات السجل من MongoDb، أستطيع أن أرى أنه تم طرح استثناء مكرر ولكنه لا يصل أبدًا إلى DAO الخاص بي.

لذا، أعتقد أنني أفعل شيئًا خاطئًا،،، ولكن في الوقت الحالي، أنا أعمى عن أخطائي.

//إل جي

هل كانت مفيدة؟

المحلول

تأكد من تكوين WriteConcern التابع MongoTemplate إلى شيء غير افتراضي (على سبيل المثال WriteConcern.SAFE).بشكل افتراضي، يكون MongoDB في وضع "النار والنسيان" ولا يلقي استثناءات على انتهاكات الفهرس أو أخطاء الخادم بشكل عام.

نصائح أخرى

لا يزال يكافح مع هذا. finnally فقد نجحت للحصول على الترجمة الصخرية تعمل.يرمي MongoDB استثناء مترجم إلى استثناء بيانات الربيع.

الآن أنا عالق مع مشكلة أخرى.

بلدي DAO الموضح أعلاه لديه أيضا التعليمات البرمجية التالية: giveacodicetagpre.

كنت أتوقع هذا الكود للقبض على الاستثناء الذي ألقيت، ولكن هذا ليس هو الحال.

لماذا لا؟

// lasse

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top