5
A
回答
0
如果你的意思是像JDBC訪問常規的RDBMS,那麼答案是否定的。
2
要做到這一點,您需要一個適用於MongoDB的JDBC驅動程序impl。我只找到了一個,它從MongoDB頁面被稱爲「實驗」:GitHub JDBC Driver for MongoDB。
to workaroud this limit,you can setup some Spring beans and create a MongoDB implementation for your application DAO(這樣,你不需要改變DAO接口和它的客戶端組件)。
此文章可以幫助:
11
是的,它是可能的,爲什麼有人依靠別人的代碼時,你可以創建自己的JNDI工廠? 只需創建一個實現javax.naming.spi.ObjectFactory的類以及一個從JNDI上下文中取出mongo的bean,我將其配置爲spring data-mongo MongoTemplate對象。
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);
}
}
}
的Spring bean:
@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");
}
}
的context.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
還有一個努力是爲MongoDB提供一個JDBC驅動程序impl。在這裏:
https://sourceforge.net/projects/mongojdbcdriver
的任何措施不完整,但將有希望提供一個JDBC實現,很快熟悉Java開發人員。
3
重用胡安·安東尼的ObjectFactory
接口(CustomMongoJNDIFactory
)的定製實現,它也可以在context.xml file
使用Spring的jee
命名空間的JNDI的查找標籤和相應的Tomcat的配置配置,這樣的:
spring-mongodb-persistence-context.xml
:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd">
<jee:jndi-lookup id="mongoTemplate" jndi-name="java:/comp/env/jndi/MongoDB" expected-type="org.springframework.data.mongodb.core.MongoTemplate" />
<mongo:repositories base-package="com.package.repository.mongodb" />
</beans>
context.xml
:
<Resource name="jndi/MongoDB"
auth="Container"
type="org.springframework.data.mongodb.core.MongoTemplate"
factory="com.package.mongo.CustomMongoJNDIFactory"
username="test"
password="test"
host="localhost"
port="27017"
db="test" />
相關問題
- 1. 錯誤通過JNDI
- 2. 查找通過JNDI名稱
- 3. 通過JNDI使用ActiveMQ
- 4. 通過JNDI實例化ActiveMQSslConnectionFactory
- 5. MongoDB的 - 通過
- 6. 通過JNDI訪問/ ex實體類
- 7. 獲取春JDBC通過JNDI JDBC連接
- 8. 如何通過JNDI更改LDAP密碼
- 9. 通過JNDI查找消息驅動Bean
- 10. Spring-hibernate:通過tomcat的dataSource jndi
- 11. 通過JNDI更新LDAP加密密碼
- 12. Tomcat:通過JNDI使用FTP連接
- 13. 如何通過JNDI檢索LDAP密碼
- 14. 無法通過JNDI查找OSGI服務
- 15. 通過REST或通過JNDI消費服務
- 16. 的MongoDB:$ $通過在
- 17. Filtter通過MongoDB中
- 18. MongoDB中通過計數
- 19. MongoDB的 - 通過重疊率
- 20. UPSERT通過索引MongoDB中
- 21. MongoDb通過參數刪除
- 22. 通過Mesos發送給MongoDB
- 23. 通過Node.js插入MongoDB
- 24. MongoDB的:通過使用
- 25. 主義的MongoDB通過ID
- 26. 組通過在mongoid/mongodb的
- 27. MongoDB的 - 通過列表
- 28. Mongodb不通過express.js保存
- 29. MongoDB通過Java選擇
- 30. 通過迭代在MongoDB中