Mongo Morphia mapPackage不会在包中映射类

时间:2015-03-24 15:49:23

标签: mongodb morphia

我正在使用Morphia mapper for MongoDB / Java。我已成功使用GlassFish服务器上的Web应用程序。我正在将我的项目迁移到WildFly8.2.Final/JBoss。我遇到Morphia映射包的问题。 Morphia映射/扫描包不起作用。它在GlassFish上运行良好但在WilfFly上无效。


我认为这是一个类路径问题,并做了一个小测试。 我通过单独映射一个类进行实验,它工作得很好。它只是映射一个包不起作用。我为Morphia提供了以下代码。

代码:

public class MongoDataSource {
    private static final String IP = XXXXXX;
    private static final Integer PORT = XXXXXX;
    private static final String DB_NAME = XXXXXX;
    private static final String USERNAME = XXXXXX;
    private static final String PWD = XXXXXX;
    private static Morphia m;
    private static Datastore ds;
    private static DB db;
    private static MongoClient client;
    private static MongoDataSource INSTANCE = new MongoDataSource();

    private MongoDataSource() {        
        m = new Morphia();                
        m.mapPackage("xxxx.model.user");//Works on Glassfish but doesnt work on WildFly/JBoss

        m.map(xxxx.model.user.User.class);//My Experiment with loading a specific class in the package
        try {
            List<MongoCredential> credentials = new ArrayList<>();
            credentials.add(MongoCredential.createMongoCRCredential(USERNAME, DB_NAME, PWD.toCharArray()));
            ServerAddress servAddr = new ServerAddress(IP, PORT);
            client = new MongoClient(servAddr, credentials);
            db = client.getDB(DB_NAME);
            ds = m.createDatastore(client, DB_NAME);
        } catch (Exception e) {
            //Log
        }
    }

    public static Morphia getMorphia() {        
        return m;
    }

    public static Datastore getDatastore() {
       return ds;
    }

    public static DB getDataBase() throws Exception {
        return db;
    }
}

我不明白的是,如果代码无法找到包,它怎么能在包中找到一个类。在WildFly / Jboss上运行应用程序时,这是Morphia API中的错误还是某些类路径问题。我不能说服自己这是一个类路径问题。

1 个答案:

答案 0 :(得分:1)

在morphia中有几个与mapPackage相关的错误。两天前,使用version 0.110我遇到了该方法的错误,我added to a existing issue in their GitHub

使用mapPackage检查GitHub中的相关问题,作为一种解决方法,您可以直接使用以下方法提供类:morphia.map(ClassA.class, ClassB.class, ClassC.class);