2012-01-27 27 views
2

其中一種流行的託管測試模式與MongoDB。未經授權的數據庫鎖定類型:-1

本地我的應用程序工作正常。但在託管部署後,我有以下問題:

的Tomcat:

Jan 27, 2012 1:24:32 PM org.apache.catalina.core.ApplicationContext log 
SEVERE: Exception while dispatching incoming RPC call 
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract void ...' threw an unexpected exception: com.mongodb.MongoException: unauthorized db:mongodb-logger lock type:-1 client:192.168.23.159 
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385) 
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) 
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399) 
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:306) 
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:322) 
at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:1688) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
at java.lang.Thread.run(Thread.java:722) 
Caused by: com.mongodb.MongoException: unauthorized db:mongodb-logger lock type:-1 client:192.168.23.159 
at com.mongodb.MongoException.parse(MongoException.java:82) 
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:312) 
at com.mongodb.DBCursor._check(DBCursor.java:369) 
at com.mongodb.DBCursor._hasNext(DBCursor.java:498) 
at com.mongodb.DBCursor.hasNext(DBCursor.java:523) 
at com.google.code.morphia.query.MorphiaIterator.hasNext(MorphiaIterator.java:40) 
at com.google.code.morphia.query.QueryImpl.asList(QueryImpl.java:234) 
... 
... 27 more 

Jan 27, 2012 1:24:32 PM org.apache.catalina.core.ApplicationContext log 

蒙戈:

Fri Jan 27 13:24:32 [initandlisten] connection accepted from 192.168.23.159:36649 #142 
Fri Jan 27 13:24:32 [conn142] assertion 10057 unauthorized db:mongodb-logger lock type:-1 client:192.168.23.159 ns:mongodb-logger.....com.User query:{ login: "admin" } 

代碼:

 mongo = new Mongo(databaseHost, databasePort); 
     db = mongo.getDB(databaseName); 
     boolean auth = db.authenticate(databaseUser, databasePassword); 

工作正常。 auth = true。

Morphia morphia = new Morphia(); 
    datastore = morphia.createDatastore(mongo, databaseHost); 

工作正常。

看起來像第一次查詢過程中出現的問題。

有什麼建議嗎?

PS:

本地數據庫版本:2.0.2

託管庫版本:1.8

https://jira.mongodb.org/browse/SERVER-2917

+0

貌似這是問題https://jira.mongodb.org/browse/SERVER-2917。在配置中使用auth = false解決。 – Alex 2012-01-27 16:57:47

+0

db.adminCommand(「getCmdLineOpts」)通過mongo javascript shell從服務器返回什麼?服務器是否以auth啓動? – 2012-01-27 20:57:05

+0

@ScottHernandez是的,它在配置中是auth = true。 – Alex 2012-01-28 19:16:28

回答

1

我寫了一個簡單的攝製,但沒有成功運行的任何問題。

public static void main(String[] args) throws UnknownHostException, MongoException { 
    Mongo mongo = new Mongo(); 
    DB db = mongo.getDB("test"); 
    boolean auth = db.authenticate("scott", "scott".toCharArray()); 
    DBCollection coll = db.getCollection("myWords"); 
    DBObject dbObj = (DBObject) JSON.parse("{ \"_id\" : 1.0 , \"words\" : [ \"a\" , \"b\" , \"c\"] , \"score\" : 1.1 , \"data\" : \"foo\"}"); 
    coll.insert(dbObj); 
    System.out.print(coll.findOne().toString()); 

    Morphia morphia = new Morphia(); 
    Datastore datastore = morphia.createDatastore(mongo, "test"); 
    Word w = datastore.find(Word.class).get(); 
    System.out.print(w); 

} 

@Entity("myWords") 
static class Word { 
    @Id Double id; 
    ArrayList<String> words = new ArrayList<String>(); 
    Double score; 
    String data; 

    @Override 
    public String toString() { 
     return this.id.toString(); 
    } 


} 

這就造成了這一點:

{ "_id" : 1.0 , "words" : [ "a" , "b" , "c"] , "score" : 1.1 , "data" : "foo"} 
... 
1.0 

這似乎是正確的事情。你可以運行這個代碼,但是替換你的db/user/password?

+0

你的數據庫配置中是否有auth = true?而db版本是1.8.1或更低? – Alex 2012-01-28 19:17:26

0

我正在與Mongolab同樣的問題。

org.springframework.data.mongodb.UncategorizedMongoDbException:未經授權的分貝:燻肉鎖類型:-1客戶端:YYY;嵌套的異常是com.mongodb.MongoException:未授權的db:bacon鎖類型:-1客戶端:YYY org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:70) org.springframework.data.mongodb .core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1538)

如果它是本地的,它可能是PC,路由器或電纜提供商的防火牆問題。

FIXED對我來說,McAfee Host Intrusion Prevention(McAfeeFire.exe)需要一個規則來讓STS.exe和Java能夠訪問Mongolab等遠程主機。這工作!

相關問題