Java 未经授权的数据库锁类型:-1

Java 未经授权的数据库锁类型:-1,java,authentication,mongodb,morphia,Java,Authentication,Mongodb,Morphia,MongoDB测试模式下流行的主机之一 在本地,我的应用程序运行良好。但在主机中部署后,我遇到以下问题: 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: Servi

MongoDB测试模式下流行的主机之一

在本地,我的应用程序运行良好。但在主机中部署后,我遇到以下问题:

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" }
代码:

很好。auth=true

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

看起来问题发生在第一次查询期间

有什么建议吗

附言:

本地数据库版本:2.0.2

托管数据库版本:1.8


我写了一个简单的复制程序,但成功运行没有任何问题

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();
    }


}

这似乎是正确的。您能运行此代码,但替换您的db/user/password吗?

我在Mongolab上遇到了同样的问题

org.springframework.data.mongodb.uncategorizedmongodbeexception:unauthorized db:bacon锁类型:-1客户端:YYY;嵌套异常为com.mongodb.MongoException:unauthorized db:bacon锁类型:-1客户端:YYY org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfBlability(MongoExceptionTranslator.java:70) org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1538)

如果是本地的,则可能是电脑、路由器或有线电视提供商的防火墙问题


修复了对于我来说,McAfee主机入侵防护(McAfeeFire.exe)需要一个规则,使STS.exe和Java能够访问像Mongolab这样的远程主机。成功了

看来这就是问题所在。在配置中使用auth=false解决。db.adminCommand(“getCmdLineOpts”)通过mongo javascript shell从服务器返回什么?服务器是用auth启动的吗?@ScottHernandez是的,在配置中是auth=true。在数据库配置中是否有auth=true?db版本是1.8.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