/** * The usual stop implementation ... BUT including some CDO cleanup. */ public void stop(BundleContext context) throws Exception { Activator.plugin = null; Activator.context = null; connector.close(); connector = null; }
public <T extends CDOView> T configureView(T view){ return TransactionUtil.configureView(view); }
/** * deletes the given eobject as well as all cross references pointing to it * @param object * @param features the features to consider for cross references, or null if all features are relevant * @throws CommitException */ public static void deleteWithCrossRefs(CDOObject object, final EReference... features) throws CommitException { commit(object, new Modification<CDOObject, CDOObject>() { @Override public CDOObject apply(CDOObject object) { List<CDOObjectReference> refs = object.cdoView().queryXRefs(object, features); for (CDOObjectReference reference : refs) { EStructuralFeature sourceFeature = reference.getSourceFeature(); if(sourceFeature.isMany()) { Object result = reference.getSourceObject().eGet(sourceFeature); if (result instanceof Collection) { Collection collection = (Collection) result; collection.remove(object); } } else { reference.getSourceObject().eUnset(sourceFeature); } } EcoreUtil.remove(object); return null; } }); }
public static CDOView openView(Map<String, Object> jobContext) { RepositoryConnector connector = getRepositoryConnector(jobContext); return connector.openView(); }
private void hookListener(final RepositoryConnector repositoryConnector) { CDONet4jSession session = repositoryConnector.createSession(); session.options().setPassiveUpdateMode(PassiveUpdateMode.ADDITIONS); CDOView view = repositoryConnector.openView(session); view.options().addChangeSubscriptionPolicy(CDOAdapterPolicy.ALL); CDOResource resource = view.getResource(ServerConstants.WORKSPACE_RESOURCE); workspace = (Workspace) resource.getContents().get(0); cache = CacheBuilder.newBuilder().expireAfterAccess(10, TimeUnit.MINUTES).concurrencyLevel(5).maximumWeight(50000).weigher(new PropertySizeWeigher()).build(new PropertyFileCacheLoader(repositoryConnector.openView(session))); //this is very expensive, so don't do it during the bind phase new Thread(new Runnable() { @Override public void run() { long time = System.currentTimeMillis(); workspace.eAdapters().add(new ListeningAdapter()); LOGGER.info("Installed EContentAdapter in {} seconds",(System.currentTimeMillis()-time)/1000); } },"Install Persistence Listener").start(); }
public static CDOTransaction openTransaction(Map<String, Object> jobContext) { RepositoryConnector connector = getRepositoryConnector(jobContext); return connector.openTransaction(); }
public static CDOSession openSession(Map<String, Object> jobContext) { RepositoryConnector connector = getRepositoryConnector(jobContext); return connector.createSession(); }
public static <T extends EObject, R extends EObject> R commit(T parent, Modification<T,R> op) throws CommitException { if (parent instanceof CDOObject) { CDOObject cdoObject = (CDOObject) parent; CDOView view = cdoObject.cdoView(); CDOTransaction transaction = getTransaction(cdoObject); T writableObject = transaction.getObject(parent); R returnValue = null; try{ returnValue = op.apply(writableObject); transaction.commit(); return returnValue; } finally { if(view!=transaction) { transaction.close(); if(returnValue!=null) return view.getObject(returnValue); } } } throw new TransactionException("could not obtain a transaction"); }
private void putProject(HttpServletRequest req, final URI uri, HttpServletResponse resp) throws IOException { // TODO: evaluate JSON stream for settings if(!isAuthorized(req, true, workspace)) { resp.setHeader("WWW-Authenticate", BASIC_AUTH_REALM); resp.sendError(HttpServletResponse.SC_UNAUTHORIZED); } else { try { TransactionUtil.commit(workspace, new Modification<Workspace, Workspace>() { @Override public Workspace apply(Workspace object) { Project child = PropertiesFactory.eINSTANCE.createProject(); child.setName(uri.lastSegment()); object.getChildren().add(child); return object; } }); } catch (CommitException e) { logger.error("Commit failed", e); } } }
private UserManagement getUserManagement() { if(userManagement==null) { Object resolved = getRepositoryConnector().openView().getResource(ServerConstants.USERS_RESOURCE).getContents().get(0); if (resolved instanceof UserManagement) { userManagement = (UserManagement) resolved; } else { logger.error("Failed to obtain UserManagement"); } } return userManagement; }
@Override public IStatus run(IProgressMonitor monitor) { CDOTransaction transaction = Activator.getDefault().getRepositoryConnector().openTransaction(); try { SubMonitor subMonitor = SubMonitor.convert(monitor,100); ProjectVersion version = model.getObject(); version = transaction.getObject(version); TeamProvider provider = TeamProviderUtil.getTeamProvider(version.getParent().getTeamProvider()); provider.checkout(version, subMonitor.newChild(75)); rescanProject(subMonitor.newChild(25), model); } catch (TeamProviderException e) { logger.error("Checkout failed",e); return new Status(IStatus.ERROR, Activator.BUNDLE_ID, "Checkout failed",e); } catch (CommitException e) { return new Status(IStatus.ERROR, Activator.BUNDLE_ID, "Transaction commit failed",e); } finally{ try { transaction.commit(); } catch (CommitException e) { logger.error("Failed to commit the transaction",e); return new Status(IStatus.ERROR, Activator.BUNDLE_ID, "Failed to commit the transaction",e); } transaction.close(); } return Status.OK_STATUS; } };
private static CDOTransaction getTransaction(CDOObject object) { CDOView view = object.cdoView(); if (view instanceof CDOTransaction) { CDOTransaction transaction = (CDOTransaction) view; return transaction; } else if (view != null) { return configureView(view.getSession().openTransaction()); } throw new TransactionException("could not obtain a transaction"); }
@Override public void onClick() { Review theReview = model.getObject(); try { TransactionUtil.commit(theReview, new Modification<Review, Review>() { @Override public Review apply(Review object) { object.setState(ReviewState.INVALID); return object; } }); setResponsePage(getPage().getPageClass(), returnAddress); } catch (CommitException e) { LOG.error("Failed to commit updated review state",e); } } }
@Activate protected void startup(final ComponentContext context) { try { webContext = getWebContext(context.getProperties()); view = getRepositoryConnector().openView(); CDOResource resource = view.getResource(ServerConstants.WORKSPACE_RESOURCE); logger.info("Starting up Jabylon REST API servlet at " + webContext); ApiServlet servlet = new ApiServlet((Workspace)resource.getContents().get(0), authService, persistenceService); httpService.registerServlet(webContext, servlet, null, null); } catch (ServletException e) { logger.error("Failed to register Jabylon REST API servlet", e); } catch (NamespaceException e) { logger.error("Failed to register Jabylon REST API servlet", e); } }
@Override public IStatus run(IProgressMonitor monitor) { ProjectVersion version = model.getObject(); TeamProvider provider = TeamProviderUtil.getTeamProvider(version.getParent() .getTeamProvider()); CDOTransaction transaction = Activator.getDefault() .getRepositoryConnector() .openTransaction(); try { version = transaction.getObject(version); SubMonitor subMonitor = SubMonitor.convert(monitor, "Committing", 100); provider.commit(version, subMonitor.newChild(100)); } catch (TeamProviderException e) { logger.error("Commit failed", e); return new Status(IStatus.ERROR, Activator.BUNDLE_ID, "Commit Failed", e); } finally { transaction.close(); } return Status.OK_STATUS; } };
private void putLocale(HttpServletRequest req, final URI uri, HttpServletResponse resp) throws IOException { URI truncated = uri.trimSegments(1); Resolvable object = getObject(truncated.path()); if (object instanceof ProjectVersion) { ProjectVersion version = (ProjectVersion) object; if(!isAuthorized(req, true, version)) { resp.setHeader("WWW-Authenticate", BASIC_AUTH_REALM); resp.sendError(HttpServletResponse.SC_UNAUTHORIZED); } else if (version.getChild(uri.lastSegment()) == null) { try { TransactionUtil.commit(version, new Modification<ProjectVersion, ProjectVersion>() { @Override public ProjectVersion apply(ProjectVersion object) { ProjectLocale locale = PropertiesFactory.eINSTANCE.createProjectLocale(); locale.setName(uri.lastSegment()); locale.setLocale((Locale) PropertiesFactory.eINSTANCE.createFromString(PropertiesPackage.Literals.LOCALE, uri.lastSegment())); PropertyResourceUtil.addNewLocale(locale, object); return object; } }); } catch (CommitException e) { logger.error("Commit failed", e); } } } else resp.sendError(HttpServletResponse.SC_NOT_FOUND, "Version " + truncated.path() + " does not exist"); }
private void rescanProject(IProgressMonitor monitor, final IModel<ProjectVersion> model) throws CommitException { ScanConfiguration scanConfiguration = PreferencesUtil.getScanConfigForProject(getModelObject()); ProjectVersion version = model.getObject(); SubMonitor subMonitor = SubMonitor.convert(monitor, "Scanning", 100); CDOTransaction transaction = Activator.getDefault().getRepositoryConnector().openTransaction(); version = transaction.getObject(version); version.fullScan(scanConfiguration, subMonitor.newChild(50)); subMonitor.setTaskName("Database Sync"); try { transaction.commit(subMonitor.newChild(50)); } finally { transaction.close(); PropertyPersistenceService persistenceService = Activator.getDefault().getPersistenceService(); if(persistenceService!=null) persistenceService.clearCache(); else logger.error("Could not obtain property persistence service"); } monitor.done(); }
private void putVersion(HttpServletRequest req, final URI uri, HttpServletResponse resp) throws IOException { URI truncated = uri.trimSegments(1); Resolvable object = getObject(truncated.path()); if (object instanceof Project) { Project project = (Project) object; if(!isAuthorized(req, true, project)) { resp.setHeader("WWW-Authenticate", BASIC_AUTH_REALM); resp.sendError(HttpServletResponse.SC_UNAUTHORIZED); } else if (project.getChild(uri.lastSegment()) == null) { try { TransactionUtil.commit(project, new Modification<Project, Project>() { @Override public Project apply(Project object) { ProjectVersion child = PropertiesFactory.eINSTANCE.createProjectVersion(); ProjectLocale locale = PropertiesFactory.eINSTANCE.createProjectLocale(); child.getChildren().add(locale); child.setTemplate(locale); child.setName(uri.lastSegment()); object.getChildren().add(child); return object; } }); } catch (CommitException e) { logger.error("Commit failed", e); } } } else resp.sendError(HttpServletResponse.SC_NOT_FOUND, "Project " + truncated.path() + " does not exist"); }
@Override public void onClick() { PropertyFileDescriptor descriptor = getModel(getPage().getPageParameters()); if(descriptor!=null){ try { ProjectLocale locale = TransactionUtil.commit(descriptor, new Modification<PropertyFileDescriptor, ProjectLocale>() { @Override public ProjectLocale apply(PropertyFileDescriptor object) { ProjectLocale locale = object.getProjectLocale(); if(!object.isMaster()) object = object.getMaster(); if(object!=null) PropertyResourceUtil.removeDescriptor(object); return locale; }; }); URI uri = resolver.getURI(locale); PageParameters params = new PageParameters(); for(int i=0;i<uri.segmentCount();i++) { params.set(i, uri.segment(i)); } //go to the parent locale setResponsePage(ResourcePage.class, params); } catch (CommitException e) { error(e.getMessage()); LOG.error("Failed to delete descriptor",e); } } }