EMF模型交易

时间:2014-05-12 09:48:24

标签: eclipse-emf emf eclipse-emf-ecore

在我们的项目中,我们使用来自openehealth的HL7文档的实现。此实现使用EMF作为原始模型,并将所有调用委托给EMF。我们需要处理大量文档,我们的流程涉及文档的并发处理(读取,验证,查询)。在并发环境中,EMF层与UnsupportedOperationException崩溃。来自openehealth网站,它说处理客户端api中的同步处理,但这会降低我们的系统性能,我们不希望这样。我尝试了EMF事务API,TransactionalEditingDomain,它表示支持只读模型事务,但没有成功。我的测试看起来像这样:

 ExecutorService executorService = Executors.newFixedThreadPool(4);
    final List<ClinicalDocument> documents = new ArrayList<ClinicalDocument>();
    for (int i = 0; i < 100; i ++) {
        executorService.submit(new Runnable() {
            @Override
            public void run() {
                try {
                    int randomNum = 1 + (int)(Math.random()*6);
                    ClinicalDocument cda = readCda();
                    processIntensiveWork(cda);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

 private void processIntensiveWork(final ClinicalDocument document) {
    for (final Method method : document.getClass().getMethods())
        if (method.getName().startsWith("get")) {
            try {
                domain.runExclusive(new RunnableWithResult.Impl() {
                    @Override
                    public void run() {
                        try {
                            method.invoke(document);
                            System.out.println("Invoked method: " + method.getName());
                            setResult(null);
                        } catch (UnsupportedOperationException e) {
                            e.printStackTrace();
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                });
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
}

对于这个测试用例,我们经常捕获java.lang.UnsupportedOperationException。 我提到,对于某些测试用例,我还从EMF事务API中发现了以下错误:java.lang.IllegalArgumentException:只能停用活动事务

敬请任何建议。请随意询问可能有助于您解决问题的其他信息。

0 个答案:

没有答案