René's URL Explorer Experiment


Title: SciJava Location API Improvements · Issue #251 · scijava/scijava-common · GitHub

Open Graph Title: SciJava Location API Improvements · Issue #251 · scijava/scijava-common

X Title: SciJava Location API Improvements · Issue #251 · scijava/scijava-common

Description: During a conversation with @ctrueden we created the following plan for further improvements of the scijava-location API: Abstraction structure: Location: Contains the metadata, where a file is located, what credentials are needed for acc...

Open Graph Description: During a conversation with @ctrueden we created the following plan for further improvements of the scijava-location API: Abstraction structure: Location: Contains the metadata, where a file is loca...

X Description: During a conversation with @ctrueden we created the following plan for further improvements of the scijava-location API: Abstraction structure: Location: Contains the metadata, where a file is loca...

Opengraph URL: https://github.com/scijava/scijava-common/issues/251

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"SciJava Location API Improvements","articleBody":"During a conversation with @ctrueden we created the following plan for further improvements of the scijava-location API:\r\n\r\n## Abstraction structure:\r\n\r\n1. __Location:__\r\n    Contains the metadata, where a file is located, what credentials are needed for access, etc.\r\n2. __Session:__\r\n    Provides access to data sources on a host.\r\n3. __DataHandle:__\r\n   Provides access to the bytes in a data source, is used e.g. by scifio formats to read images.\r\n\r\n## SessionService\r\n- can create a Session for a remote, takes Location as input\r\n    - \"remote\" = the host/non-path part of a location URI)\r\n- caches Sessions for each remote\r\n- whenever a Session is handed out, increment a usage ref\r\n- whenever a DataHandle is closed, it decrements its session's usage ref\r\n    - if applicable -- some DataHandles don't need Sessions\r\n\r\n## Protocols\r\n- List of protocols we want:\r\n   - [ ] SSH SCP\r\n   - [ ] (S)FTP\r\n   - [ ] HTTP/HTTPS:\r\n       - with resume, to avoid excessive rereading\r\n       - support PUT for uploads?\r\n   - [ ] OMERO\r\n   - [ ] HDFS\r\n   - [ ] Cloud block storage:\r\n      - [ ]  Amazon S3\r\n      - [ ] Openstack Swift\r\n      - [ ] Azure Block Storage\r\n      - [ ] Google Cloud Storage\r\n\r\n## Service/plugin architecture\r\n- Session will need to be a new Plugin type\r\n- SessionService will be a HandlerService\r\n    - Model it after DataHandleService; it is very similar\r\n    but with additional API, obviously -- e.g., fetchOrCreate or some such\r\n- Update the DataHandleService to have a new method:\r\n    - `create(L extends Location, Session\u003cL\u003e)`\r\n    - This method allows reusing a specific session.\r\n    - This session may not be closed when the handle is closed \r\n- The existing DataHandleService method `create(Location)` will simply ask the SessionService to `fetchOrCreate` a session for that Location.\r\n- Naively, it might seem like we need a \"Remote\" interface or some such, but I\r\n  actually think we won't need it. I think each Session will be able to extract\r\n  the information it needs from its associated type of Location, and that will be\r\n  good enough, and simpler.\r\n- Finish the StreamHandle interface(?) for DataHandles that are built on InputStream/OutputStreams.\r\n    - Some location types like URLHandle would probably(?) benefit from extending StreamHandle\r\n    - But if none of the protocols would actually benefit from extending StreamHandle, we could decide not to do it.\r\n\r\n### Protocol specific notes\r\n\r\n- Native HTTP / HTTPS support in Java seems to lack support for resume, looks like we need an external library for that.\r\n- We need to make sure that we only cache sessions that support concurrent access. -\u003e Need method `public boolean isConcurent()` in interface.\r\n- Sessions might only allow for limited concurrent access, if we encounter this we will need a `public int concurentAccessLimit()` method.\r\n- When do we close automatically created sessions?\r\n  - Need a cache eviction strategy like LRU\r\n  - Don't immediately close Session when reference count reaches 0\r\n  - Maybe use a connection pool with a modifiable limit?\r\n\r\n\r\n### Implementation specific notes\r\n- calling `dispose()` on the SessionService will close all connections.\r\n- Currently working on this on the ![more-handles-gabriel branch](https://github.com/scijava/scijava-common/commits/more-handles-gabriel)\r\n","author":{"url":"https://github.com/gab1one","@type":"Person","name":"gab1one"},"datePublished":"2016-12-15T12:11:25.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/251/scijava-common/issues/251"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:bd03cf4b-8da8-f4e9-a314-328467ce960a
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idEBFE:275F42:D0C6B9:1200CE2:696A8DCD
html-safe-nonce9a92eaa843db1fba12099daa54cfb174e65a4e55cedbd20c6b491725da2ec58b
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFQkZFOjI3NUY0MjpEMEM2Qjk6MTIwMENFMjo2OTZBOERDRCIsInZpc2l0b3JfaWQiOiI4MzkzMjUxOTYwOTI3MTk0NTczIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmacafd7b66ac18a3d74f6cf52bfe5ffc1ae5d76732e7d20589e2804bbe5d318127a
hovercard-subject-tagissue:195790290
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/scijava/scijava-common/251/issue_layout
twitter:imagehttps://opengraph.githubassets.com/8a7f0ea4e1f89c9b6f74d7226408456876ab19539cca9ed4d87cedf03c8235bd/scijava/scijava-common/issues/251
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/8a7f0ea4e1f89c9b6f74d7226408456876ab19539cca9ed4d87cedf03c8235bd/scijava/scijava-common/issues/251
og:image:altDuring a conversation with @ctrueden we created the following plan for further improvements of the scijava-location API: Abstraction structure: Location: Contains the metadata, where a file is loca...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernamegab1one
hostnamegithub.com
expected-hostnamegithub.com
Noned2aa6dedd7d97fa651b17c40401f2605f309df5ca5fb659bf0554cf34f1de825
turbo-cache-controlno-preview
go-importgithub.com/scijava/scijava-common git https://github.com/scijava/scijava-common.git
octolytics-dimension-user_id1262770
octolytics-dimension-user_loginscijava
octolytics-dimension-repository_id3594497
octolytics-dimension-repository_nwoscijava/scijava-common
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id3594497
octolytics-dimension-repository_network_root_nwoscijava/scijava-common
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
releasec1dbca8981c5e3d6a69bce2f1d289e732b86241d
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/scijava/scijava-common/issues/251#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fscijava%2Fscijava-common%2Fissues%2F251
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fscijava%2Fscijava-common%2Fissues%2F251
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=scijava%2Fscijava-common
Reloadhttps://github.com/scijava/scijava-common/issues/251
Reloadhttps://github.com/scijava/scijava-common/issues/251
Reloadhttps://github.com/scijava/scijava-common/issues/251
scijava https://github.com/scijava
scijava-commonhttps://github.com/scijava/scijava-common
Notifications https://github.com/login?return_to=%2Fscijava%2Fscijava-common
Fork 53 https://github.com/login?return_to=%2Fscijava%2Fscijava-common
Star 90 https://github.com/login?return_to=%2Fscijava%2Fscijava-common
Code https://github.com/scijava/scijava-common
Issues 169 https://github.com/scijava/scijava-common/issues
Pull requests 16 https://github.com/scijava/scijava-common/pulls
Actions https://github.com/scijava/scijava-common/actions
Projects 0 https://github.com/scijava/scijava-common/projects
Wiki https://github.com/scijava/scijava-common/wiki
Security Uh oh! There was an error while loading. Please reload this page. https://github.com/scijava/scijava-common/security
Please reload this pagehttps://github.com/scijava/scijava-common/issues/251
Insights https://github.com/scijava/scijava-common/pulse
Code https://github.com/scijava/scijava-common
Issues https://github.com/scijava/scijava-common/issues
Pull requests https://github.com/scijava/scijava-common/pulls
Actions https://github.com/scijava/scijava-common/actions
Projects https://github.com/scijava/scijava-common/projects
Wiki https://github.com/scijava/scijava-common/wiki
Security https://github.com/scijava/scijava-common/security
Insights https://github.com/scijava/scijava-common/pulse
New issuehttps://github.com/login?return_to=https://github.com/scijava/scijava-common/issues/251
New issuehttps://github.com/login?return_to=https://github.com/scijava/scijava-common/issues/251
SciJava Location API Improvementshttps://github.com/scijava/scijava-common/issues/251#top
https://github.com/gab1one
enhancementhttps://github.com/scijava/scijava-common/issues?q=state%3Aopen%20label%3A%22enhancement%22
3.0.0https://github.com/scijava/scijava-common/milestone/1
https://github.com/gab1one
https://github.com/gab1one
gab1onehttps://github.com/gab1one
on Dec 15, 2016https://github.com/scijava/scijava-common/issues/251#issue-195790290
@ctruedenhttps://github.com/ctrueden
https://github.com/scijava/scijava-common/commits/more-handles-gabriel
gab1onehttps://github.com/gab1one
enhancementhttps://github.com/scijava/scijava-common/issues?q=state%3Aopen%20label%3A%22enhancement%22
3.0.0No due datehttps://github.com/scijava/scijava-common/milestone/1
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.