This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Summary: | API for proxy setting | ||
---|---|---|---|
Product: | platform | Reporter: | Peter Zavadsky <pzavadsky> |
Component: | -- Other -- | Assignee: | Jiri Rechtacek <jrechtacek> |
Status: | RESOLVED FIXED | ||
Severity: | blocker | CC: | anebuzelsky, jrechtacek, jungi, mkleint, mkuchtiak, msandor, rkubacki, rmatous, saubrecht |
Priority: | P3 | Keywords: | API, API_REVIEW_FAST |
Version: | 5.x | ||
Hardware: | All | ||
OS: | All | ||
Issue Type: | ENHANCEMENT | Exception Reporter: | |
Bug Depends on: | |||
Bug Blocks: | 75856, 88355 | ||
Attachments: | proposed changes in the arch document |
Description
Peter Zavadsky
2006-09-19 21:29:23 UTC
Maros and Milan will be interested in such API too. Versioning has to be able to go through various proxies (or bypass them for local accesses) and similarly we have various use cases in websvc&j2ee development where correct proxy setting can affect functionality. Autoupdate and welcome screen are another clients. Petr: can you explain your use cases? 1. Why do you need to change proxy settings ? 2. Why do you need to read them? 3. What is the motivatiom for listen to changes? ad 1: IMO we need to make it working OOTB in most cases and there should be just one place to edit this configuration. As we've improved automatic proxy detection in 5.5 and trunk I want to know what important configurations/special cases we are not covering yet. ad 2: AFAIK websvc&j2ee wants to know these settings so that they can start appserver with similar setting. Implementation: can't we use java.net.ProxySelector + java.net.Proxy? Wouldn't it be nice if defining java.net.useSystemProxies=true in $JDKHOME/jre/lib/net.properties or as a system property could set correct values? BTW: Currently it is possible to read actual settings from system properties but if you try to modify these it will not by propagated into IDESetting and can be later reverted back. Here are the motivation answers: 1. Why do you need to change proxy settings ? 2. Why do you need to read them? To both of the above question. I think there is some webservice module which needed this to access this in order to present it to user in some of their specific UI, and also allow the user to adjust it. (The module owner would be better to explain it.) In sum you might expect that also other modules might want present to the user the proxy settings and allow to change it [instead of just providing some message, go to Options and do the change there.]. 3. What is the motivatiom for listen to changes? This is needed in order in our designer which have an ability load images specified by url, which depends on proxy settings. When user changes the proxy we would need to be informed so we can try reload the images. (There is a following bug, if proxy is not set, the images are not loaded first, but after user sets the proxy, then images are still not loaded - there is no event fired about that, if the event is there then we'd try to reload the images - or possibly other resources). 1. & 2. Please let the module owner explain it. So far it is too general explanation. 3. I'd like to defer an idea of oficial contract here if possible. More important IMO is to make it working OOTB in most of cases. Then this will be low priority and you correctly set proxy it is no longer a problem.. Speaking for versioning modules: 1. Is this API intended to replace all possible proxy settings in the IDE? If so, we'd like to have support for multiple proxies. I can imagine people use different proxies for different CVS servers now (and we support it). The configuration dialog and system settings may be advanced enough to provide this support. For example, I'd like an API like this: public SystemProxy getProxy(String host); [optional] public void setProxy(String hostOrHostPattern, SystemProxy proxy); [something like] public void showProxyDialog(); class SystemProxy { enum type; String host; int port; } Settings may be different for every CVS server. And while we're at it, it would also be nice to provide users with a SocketFactory that would automatically use proxies to connect to remote hosts, ie: Socket proxiedSocket = Utilities.getSocketFactory().createSocket(); 2. I can only see proxyHost and proxyPort. What about proxy TYPE? I mean we have at least two commonly used types of proxies: HTTP (HTTPS) and SOCKS. 1. Why do you need to change proxy settings ? We do not need to, we would need an API for launching the proxy configuration dialog. For example, in the Checkout Wizard we have a [Proxy configuration] button. Also, when a CVS operation fails, the error dialog (among other things) also offers possibility to change proxy settings (and retry the command) 2. Why do you need to read them? We need to pass proxy settings to external tools, namely subversion executable. 3. What is the motivatiom for listen to changes? We do not need this. When reading Maros' comment it seems to me that some kind of showProxyDialog() + registering of our own ProxySelector so that it is possible to use java.net.{Proxy|Proxyselector} can work in versioning. welcome screen - reads the settings and attaches a listener to be able to reload feeds. It needs HTTP proxy only I guess. i'm missing the options to set proxy username and password. I forgot to mention this too, so in my example: class SystemProxy { enum type; String host; int port; String username, password; } To follow up on discussion with jrechtacek: other IDEs support per-host proxy settings for Subversion and CVS, just as we do now. So I'd sugget we think twice before dropping this feature. Proposed solution: 1. provide platform's implementation of java.net.ProxySelector and register it as default ProxySelector in running IDE - the ProxySelector returns the proxy server to use when connecting to a URL. This registered ProxySelector is called back on each URL request in IDE. The ProxySelector is also accessible by ProxySelector.getDefault() for other application, e.g. to acquire a proxy or any special utilisation. 2. set JDK's property java.net.useSystemProxies to true - the platform's implemetation of ProxySelector delegates to JDK's default ProxySelector when set Use System Settings. The default ProxySelector supplies detection of Proxy Settings on Windows and Gnome2.x platform, for other platform will be use the way of detection in IDE launcher 3. manually customization of Proxy Settings - allow to invoke the Proxy Customizer which is shared over IDE, only this Customizer can modify Proxy Settings - xDesign team calls for Options dialog as Proxy Customizer (this part will be reviewed as separate issue 75856) - Add an API for opening the Options dialog (issue 74855) 4. the platform implementation supports HTTP/HTTPS, SOCKS, Proxy Server with Authentication I would like to integrate it in NB6.0/M5. I attach the arch documents and proposed classes ASAP. Thanks for review. Note: the proposed implementation also removes Proxy specific SystemOptions from IDESettings. i'm missing some kind of listener to notify me that proxy settings has changed. use case: welcome screen downloads some rss feeds from internet. if the download fails because of invalid proxy settings the welcome screen shows a button to adjust proxy settings. however the user can choose to set proxy settings in the options dialog using the main menu instead. in that case the welcome screen needs to be notified that it should try to reload its content. > i'm missing some kind of listener to notify me that proxy settings has changed
There is possible to listen for changes on the Preferences node which contains
Proxy Settings. Only need to know the path to the Preferences node and names of
keys which mapping Proxy Settings. It should be a subject of a friend contract
i.e. the path and keys documented in arch documents.
Created attachment 36106 [details]
proposed changes in the arch document
If there are no more comments I'll integrate it to trunk tomorrow, with some exceptions: - no default java.net.useSystemProxies=true for now. Need fix issue 89540 - no shared customizee designed yet, waiting for an new method in Options API - issue 64350 and issue 74855 - no Options UI can set SOCKS and Authentication Proxy, new UI spec. is coming soon, the new infrastructure can read it - several modules depends on System's properties like http.proxyHost, http.proxyPort, the proposed implementation should use these System's properties as well cvs server: scheduling file `NbProxySelector.java' for addition cvs server: scheduling file `ProxySettings.java' for addition cvs server: use 'cvs commit' to add these files permanently Checking in core/src/org/netbeans/core/NonGui.java; /shared/data/ccvs/repository/core/src/org/netbeans/core/NonGui.java,v <-- NonGui.java new revision: 1.132; previous revision: 1.131 done RCS file: /shared/data/ccvs/repository/core/src/org/netbeans/core/ProxySettings.java,v done Checking in core/src/org/netbeans/core/ProxySettings.java; /shared/data/ccvs/repository/core/src/org/netbeans/core/ProxySettings.java,v <-- ProxySettings.java initial revision: 1.1 done RCS file: /shared/data/ccvs/repository/core/src/org/netbeans/core/NbProxySelector.java,v done Checking in core/src/org/netbeans/core/NbProxySelector.java; /shared/data/ccvs/repository/core/src/org/netbeans/core/NbProxySelector.java,v <-- NbProxySelector.java initial revision: 1.1 done Checking in core/src/org/netbeans/core/IDESettingsBeanInfo.java; /shared/data/ccvs/repository/core/src/org/netbeans/core/IDESettingsBeanInfo.java,v <-- IDESettingsBeanInfo.java new revision: 1.47; previous revision: 1.46 done Removing core/src/org/netbeans/core/ProxyTypePropertyEditor.java; /shared/data/ccvs/repository/core/src/org/netbeans/core/ProxyTypePropertyEditor.java,v <-- ProxyTypePropertyEditor.java new revision: delete; previous revision: 1.5 done Checking in core/src/org/netbeans/core/IDESettings.java; /shared/data/ccvs/repository/core/src/org/netbeans/core/IDESettings.java,v <-- IDESettings.java new revision: 1.86; previous revision: 1.85 done Checking in core/src/org/netbeans/core/NbAuthenticator.java; /shared/data/ccvs/repository/core/src/org/netbeans/core/NbAuthenticator.java,v <-- NbAuthenticator.java new revision: 1.20; previous revision: 1.19 done Checking in core/test/unit/src/org/netbeans/core/HttpSettingsTest.java; /shared/data/ccvs/repository/core/test/unit/src/org/netbeans/core/HttpSettingsTest.java,v <-- HttpSettingsTest.java new revision: 1.8; previous revision: 1.7 done Checking in core/test/unit/src/org/netbeans/core/NonProxyHostsTest.java; /shared/data/ccvs/repository/core/test/unit/src/org/netbeans/core/NonProxyHostsTest.java,v <-- NonProxyHostsTest.java new revision: 1.9; previous revision: 1.8 done Checking in core/nbproject/project.properties; /shared/data/ccvs/repository/core/nbproject/project.properties,v <-- project.properties new revision: 1.29; previous revision: 1.28 done Checking in core/arch/arch-core.xml; /shared/data/ccvs/repository/core/arch/arch-core.xml,v <-- arch-core.xml new revision: 1.14; previous revision: 1.13 done Checking in editor/options/src/org/netbeans/modules/options/general/GeneralOptionsModel.java; /shared/data/ccvs/repository/editor/options/src/org/netbeans/modules/options/general/GeneralOptionsModel.java,v <-- GeneralOptionsModel.java new revision: 1.7; previous revision: 1.6 done |