0

ねえ、 3番目の選択肢に何か問題があります。ループはJcrServiceFactoryjcr。*で始まるプロパティを検索しているためです(他は渡されません)が、(Jackrabbit impl)の直後にRepositoryFactoryImpl「org.apache.jackrabbit」が検索されます渡されたプロパティのコレクションの.repository.home"...それは意味がありません。org.apache.jackrabbit.repository.homeが存在する場合でも、それはで始まらないため、次の場所に移動するコレクションにPREFIX_JCR_CONFIGは入れられません。jcrConfigRepositoryFactoryImpl.getRepository()

に条件Map<String, String> map = null;があるので意味がありますが、これは意味がありませんif (parameters == null)RepositoryFactoryImpl

これはinitメソッドで発生します

JcrServiceFactory.java

 private TypeManager typeManager;
    private Map<String, String> jcrConfig;
    private String mountPath;
    private JcrRepository jcrRepository;

    @Override
    public void init(Map<String, String> parameters) {
        typeManager = new TypeManager();
        readConfiguration(parameters);
        jcrRepository = new JcrRepository(acquireJcrRepository(jcrConfig), mountPath, typeManager);
    }

Caused by: org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException: No JCR repository factory for configured parameters
    at org.apache.chemistry.opencmis.jcr.JcrServiceFactory.acquireJcrRepository(JcrServiceFactory.java:95)
    at org.apache.chemistry.opencmis.jcr.JcrServiceFactory.init(JcrServiceFactory.java:61)
    at org.apache.chemistry.opencmis.client.bindings.spi.local.CmisLocalSpi.getSpiInstance(CmisLocalSpi.java:94)
    ... 34 more

 private void readConfiguration(Map<String, String> parameters) {
        Map<String, String> map = new HashMap<String, String>();
        List<String> keys = new ArrayList<String>(parameters.keySet());
        Collections.sort(keys);

/* the loop is searching for properties starting with jcr.* */

        for (String key : keys) {
            if (key.startsWith(PREFIX_JCR_CONFIG)) {
                String jcrKey = key.substring(PREFIX_JCR_CONFIG.length());
                String jcrValue = replaceSystemProperties(parameters.get(key));
                map.put(jcrKey, jcrValue);
            }

            else if (MOUNT_PATH_CONFIG.equals(key)) {
                mountPath = parameters.get(key);
                log.debug("Configuration: " + MOUNT_PATH_CONFIG + '=' + mountPath);
            }

            else {
                log.warn("Configuration: unrecognized key: " + key);
            }
        }

        jcrConfig = Collections.unmodifiableMap(map);
        log.debug("Configuration: jcr=" + jcrConfig);
    }

しかし、ここではパラメータMapは空{}であり、nullを返します。org.apache.jackrabbit.repository.homeであるRepositoryFactoryImpl.REPOSITORY_HOMEを検索しているためです

RepositoryFactoryImpl.java

/* parameters = jcrConfig */
public Repository getRepository(Map parameters) throws RepositoryException {
        if (parameters == null) {
            return getRepository(null, Collections.emptyMap());
        } else if (parameters.containsKey(REPOSITORY_HOME)) {
            String home = parameters.get(REPOSITORY_HOME).toString();
            return getRepository(home, parameters);
        } else if (parameters.containsKey(JcrUtils.REPOSITORY_URI)) {
            Object parameter = parameters.get(JcrUtils.REPOSITORY_URI);
            try {
                URI uri = new URI(parameter.toString().trim());
                String scheme = uri.getScheme();
                if (("file".equalsIgnoreCase(scheme)
                        || "jcr-jackrabbit".equalsIgnoreCase(scheme))
                        && uri.getAuthority() == null) {
                    File file = new File(uri.getPath());
                    if (file.isFile()) {
                        return null; // Not a (possibly missing) directory
                    } else {
                        return getRepository(file.getPath(), parameters);
                    }
                } else {
                    return null; // not a file: or jcr-jackrabbit: URI
                }
            } catch (URISyntaxException e) {
                return null; // not a valid URI
            }
        } else {
            return null; // unknown or insufficient parameters
        }
    }

<dependencies>

        <dependency>
            <groupId>javax.jcr</groupId>
            <artifactId>jcr</artifactId>
            <version>2.0</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.jackrabbit</groupId>
            <artifactId>jackrabbit-core</artifactId>
            <version>2.2.4</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.jackrabbit</groupId>
            <artifactId>jackrabbit-api</artifactId>
            <version>2.2.4</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.5.11</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>5.14</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.chemistry.opencmis</groupId>
            <artifactId>chemistry-opencmis-server-jcr</artifactId>
            <version>0.3.0-incubating-SNAPSHOT</version>
            <classifier>classes</classifier>
        </dependency>

        <dependency>
            <groupId>org.apache.chemistry.opencmis</groupId>
            <artifactId>chemistry-opencmis-client-bindings</artifactId>
            <version>0.3.0-incubating-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.apache.chemistry.opencmis</groupId>
            <artifactId>chemistry-opencmis-client-api</artifactId>
            <version>0.3.0-incubating-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.apache.chemistry.opencmis</groupId>
            <artifactId>chemistry-opencmis-client-impl</artifactId>
            <version>0.3.0-incubating-SNAPSHOT</version>
        </dependency>
4

2 に答える 2

1

答えは私が不平を言ったループの中で正しいです:-)

String jcrKey = key.substring(PREFIX_JCR_CONFIG.length());

これは部分文字列なので、jcrをカットします。のそして残りは続く...

parameters.put("jcr.org.apache.jackrabbit.repository.home", repositoryHome);

これはトリッキーで、デバッグからこれらすべてを理解する必要があります。

于 2011-03-23T10:49:17.203 に答える
0

以下のエントリを使用して、「WEB-INF/classes」で「repository.properties」を構成する必要があります。

jcr.org.apache.jackrabbit.repository.home = {user.home} \ jcr-repository(リポジトリの場所)。

乾杯。

于 2011-05-19T14:22:03.823 に答える