MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDb melalui jndi

Ya itu mungkin, mengapa mengandalkan kode orang lain ketika Anda dapat membuat pabrik JNDI Anda sendiri? buat saja kelas yang mengimplementasikan javax.naming.spi.ObjectFactory dan kacang yang menarik mongo dari konteks JNDI, saya mengonfigurasi ini untuk data pegas -mongo MongoTemplate objek.

public class CustomMongoJNDIFactory implements ObjectFactory {

public Object getObjectInstance(Object obj, Name name, Context nameCtx,
        Hashtable<?, ?> environment) throws Exception {

    validateProperty(obj, "Invalid JNDI object reference");

    MongoTemplate mongoTemplate = null;
    String db = null;
    String host = null;
    String username = null;
    String password = null;
    int port = 27017;

    Reference ref = (Reference) obj;
    Enumeration<RefAddr> props = ref.getAll();
    while (props.hasMoreElements()) {
        RefAddr addr = (RefAddr) props.nextElement();
        String propName = addr.getType();
        String propValue = (String) addr.getContent();
        if (propName.equals("db")) {
            db = propValue;
        } else if (propName.equals("host")) {
            host = propValue;
        } else if (propName.equals("username")) {
            username = propValue;
        } else if (propName.equals("password")) {
            password = propValue;
        } else if (name.equals("port")) {
            try {
                port = Integer.parseInt(propValue);
            } catch (NumberFormatException e) {
                throw new NamingException("Invalid port value " + propValue);
            }
        }

    }

    // validate properties
    validateProperty(db, "Invalid or empty mongo database name");
    validateProperty(host, "Invalid or empty mongo host");
    validateProperty(username, "Invalid or empty mongo username");
    validateProperty(password, "Invalid or empty mongo password");

    //create mongo template
    mongoTemplate = new MongoTemplate(new Mongo(host, port), db,
            new UserCredentials(username, password));

    return mongoTemplate;
}


/**
 * Validate internal String properties
 * 
 * @param property
 * @param errorMessage
 * @throws NamingException
 */
private void validateProperty(String property, String errorMessage)
        throws NamingException {
    if (property == null || property.trim().equals("")) {
        throw new NamingException(errorMessage);
    }
}

/**
 * Validate internal Object properties
 * 
 * @param property
 * @param errorMessage
 * @throws NamingException
 */
private void validateProperty(Object property, String errorMessage)
        throws NamingException {
    if (property == null) {
        throw new NamingException(errorMessage);
    }
}

}

Kacang musim semi:

@Configuration
@Qualifier("mongoTemplate")
public class CustomMongoTemplate  {


 public @Bean MongoTemplate mongoTemplate() throws Exception {
     Context initCtx = new InitialContext();
     Context envCtx = (Context) initCtx.lookup("java:comp/env");
     return (MongoTemplate) envCtx.lookup("bean/MyMongoBean");
    }
}

Konteks.xml:

<Resource name="bean/MyMongoBean" auth="Container"
        type="org.springframework.data.mongodb.core.MongoTemplate"
        factory="com.package.CustomMongoJNDIFactory"
        host="" db="" username="" password=""/>

Web.xml

    <resource-env-ref>
    <description>Mongo JNDI configuration</description>
    <resource-env-ref-name>comp/env/bean/MyMongoBean</resource-env-ref-name>
    <resource-env-ref-type>org.springframework.data.mongodb.core.MongoTemplate</resource-env-ref-type>
</resource-env-ref>


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mengapa skema saya tidak menambahkan nilai default dalam array luwak?

  2. DeprecationWarning:collection.findAndModify tidak digunakan lagi. Gunakan findOneAndUpdate, findOneAndReplace atau findOneAndDelete sebagai gantinya?

  3. Apa cara tercepat untuk menyalin koleksi dalam database yang sama?

  4. Bagaimana cara memuat 100 juta catatan ke MongoDB dengan Scala untuk pengujian kinerja?

  5. CouchDB vs. MongoDB:10 hal yang harus Anda ketahui