JenaTransactionException:当前在事务中(location:/ pathtodb /)

时间:2014-07-20 05:50:21

标签: java transactions jena tdb

我正在使用RDF数据库创建应用程序后端。

我使用Jena TDB作为后端。我得到了这个例外

com.hp.hpl.jena.sparql.JenaTransactionException: Currently in a transaction (location:/home/visittoravi/Documents/Store/DB/Tutor/)

这是我在此方法中的代码发生异常,我用comments-

标记了它
public UserDetails loadUserByUsername(String email)
            throws UsernameNotFoundException {
        org.springframework.security.core.userdetails.User authUser = null;
        logger.info("Getting user - " + email);
        Dataset ds = datasetManager.getDs();
        ds.begin(ReadWrite.READ);  // Exception is being thrown here
        try {
            User user = logUserIn(email);
            if (user == null) {
                System.out.println("User not found");
                throw new UsernameNotFoundException(email);
            }
            logger.info("role = " + user.getRole());
            List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
            authorities.add(new SimpleGrantedAuthority(user.getRole()));
            authUser = new org.springframework.security.core.userdetails.User(
                    email, user.getPassword(), true, true, true, true,
                    authorities);
            ds.commit();
        } catch (Exception ex) {
            ex.printStackTrace();
            logger.error(ex);
            ds.abort();
        } finally {
            ds.end();
        }
        return authUser;
    }

datasetManager.getDs()方法 -

public Dataset getDs() {
        if (ds == null) {
            logger.log(Priority.INFO, "Creating TDB dataset at : " + dir);
            ds = TDBFactory.createDataset(dir);
            getOntModel();
        }
        return ds;
    }

getOntModel()方法 -

public OntModel getOntModel() {
        if (ontModel == null) {
            Dataset ds = getDs();
            ds.begin(ReadWrite.WRITE);
            try {
                ontModel = ModelFactory.createOntologyModel(
                        OntModelSpec.OWL_DL_MEM_RULE_INF, ds.getDefaultModel());
                createAdminData(ds);
                createAllOntClasses();
                createAllProperties();
                ds.commit();
            } catch (Exception ex) {
                ex.printStackTrace();
                ds.abort();
            } finally {
                ds.end();
            }
        }
        return ontModel;
    }

createAdminData方法 -

private void createAdminData(Dataset ds) {
        Resource admin = getDs().getDefaultModel().createResource(
                rnamespace + "User1");
        admin.addLiteral(VCARD.UID, 1l);
        admin.addLiteral(VCARD.FN, "Admin");
        admin.addLiteral(VCARD.NAME, "Admin");
        admin.addLiteral(VCARD.EMAIL, "visittoravi@gmail.com");
        admin.addLiteral(VCARD.ROLE, "ADMIN");
        admin.addLiteral(VCARD.KEY, "password");
    }

再次在createAllOntClasses()和createAllProperties()中;我正在使用ontModel创建一些ontclasses和属性。

正如你在getDs()方法中看到的,我已经创建了一个写事务,并且我还包括了结束事务(ds.end())。并且getOntModel()方法中的所有db写入部分都反映在数据库中我在fuseki中检查过它。之后我创建了一个读取事务并且它抛出了这个异常。

请帮助确定问题所在。此外,如果你有更好的方法来处理这样的场景,比如在spring mvc中的上下文启动时初始化db。

0 个答案:

没有答案