diff -r 4e4e978648c3 cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleInstance.java --- a/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleInstance.java Sat Jun 23 11:26:43 2012 +0200 +++ b/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleInstance.java Sat Jun 23 22:27:30 2012 +0200 @@ -47,8 +47,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; import java.nio.charset.Charset; import java.util.List; import java.util.concurrent.Callable; @@ -57,12 +55,12 @@ import java.util.logging.Logger; import java.util.regex.Pattern; import javax.swing.SwingUtilities; +import org.netbeans.api.keyring.Keyring; import org.netbeans.api.project.FileOwnerQuery; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.server.ServerInstance; import org.netbeans.libs.oracle.cloud.sdkwrapper.api.ApplicationManager; -import org.netbeans.libs.oracle.cloud.sdkwrapper.api.ApplicationManagerConnectionFactory; import org.netbeans.libs.oracle.cloud.api.CloudSDKHelper; import org.netbeans.libs.oracle.cloud.sdkwrapper.exception.ManagerException; import org.netbeans.libs.oracle.cloud.sdkwrapper.model.*; @@ -94,8 +92,19 @@ private static final Logger LOG = Logger.getLogger(OracleInstance.class.getSimpleName()); private final String name; + + /* GuardedBy(this) */ + private boolean userLoaded; + + /* GuardedBy(this) */ private String user; + + /* GuardedBy(this) */ + private boolean passwordLoaded; + + /* GuardedBy(this) */ private String password; + private String adminURL; private String identityDomain; private String javaServiceName; @@ -109,14 +118,21 @@ /* GuardedBy(this) */ private OracleJ2EEInstance j2eeInstance; + + public OracleInstance(String name, String user, String password, String adminURL, String identityDomain, + String javaServiceName, String dbServiceName, String onPremiseServerInstanceId, + String sdkFolder) { + this(name, adminURL, identityDomain, javaServiceName, dbServiceName, onPremiseServerInstanceId, sdkFolder); + this.userLoaded = true; + this.user = user; + this.passwordLoaded = true; + this.password = password; + } - public OracleInstance(String name, String user, String password, - String adminURL, String identityDomain, + public OracleInstance(String name, String adminURL, String identityDomain, String javaServiceName, String dbServiceName, String onPremiseServerInstanceId, String sdkFolder) { this.name = name; - this.user = user; - this.password = password; this.adminURL = adminURL; this.identityDomain = identityDomain; this.javaServiceName = javaServiceName; @@ -138,11 +154,53 @@ } public String getPassword() { - return password; + synchronized (this) { + if (passwordLoaded) { + return password; + } + } + + char[] ch = Keyring.read(OracleInstanceManager.PREFIX + + OracleInstanceManager.PASSWORD + "." + name); + if (ch == null) { + LOG.log(Level.WARNING, "no password found for "+name); + ch = new char[]{' '}; + } + String passwd = new String(ch); + assert passwd != null : "password is missing for "+name; // NOI18N + + synchronized (this) { + if (!passwordLoaded) { + passwordLoaded = true; + password = passwd; + } + return password; + } } public String getUser() { - return user; + synchronized (this) { + if (userLoaded) { + return user; + } + } + + char ch[] = Keyring.read(OracleInstanceManager.PREFIX + + OracleInstanceManager.USERNAME + "." + name); + if (ch == null) { + LOG.log(Level.WARNING, "no username found for "+name); + ch = new char[]{' '}; + } + String userName = new String(ch); + assert userName != null : "username is missing for "+name; // NOI18N + + synchronized (this) { + if (!userLoaded) { + userLoaded = true; + user = userName; + } + return user; + } } public String getAdminURL() { @@ -189,8 +247,9 @@ } public void setPassword(String password) { - this.password = password; synchronized (this) { + this.password = password; + this.passwordLoaded = true; if (j2eeInstance != null) { j2eeInstance.getInstanceProperties().setProperty( InstanceProperties.PASSWORD_ATTR, password); @@ -200,8 +259,9 @@ } public void setUser(String user) { - this.user = user; synchronized (this) { + this.user = user; + this.userLoaded = true; if (j2eeInstance != null) { j2eeInstance.getInstanceProperties().setProperty( InstanceProperties.USERNAME_ATTR, user); @@ -240,7 +300,7 @@ public synchronized ApplicationManager getApplicationManager() { if (platform == null) { - platform = createApplicationManager(adminURL, user, password, sdkFolder); + platform = createApplicationManager(adminURL, getUser(), getPassword(), sdkFolder); } return platform; } diff -r 4e4e978648c3 cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleInstanceManager.java --- a/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleInstanceManager.java Sat Jun 23 11:26:43 2012 +0200 +++ b/cloud.oracle/src/org/netbeans/modules/cloud/oracle/OracleInstanceManager.java Sat Jun 23 22:27:30 2012 +0200 @@ -59,9 +59,9 @@ private static final String ORACLE_IP_NAMESPACE = "cloud.oracle"; // NOI18N - private static final String PREFIX = "org.netbeans.modules.cloud.oracle."; // NOI18N - private static final String USERNAME = "username"; // NOI18N - private static final String PASSWORD = "password"; // NOI18N + static final String PREFIX = "org.netbeans.modules.cloud.oracle."; // NOI18N + static final String USERNAME = "username"; // NOI18N + static final String PASSWORD = "password"; // NOI18N private static final String NAME = "name"; // NOI18N private static final String ADMIN_URL = "admin-url"; // NOI18N private static final String IDENTITY_DOMAIN = "identity-domain"; // NOI18N @@ -165,27 +165,13 @@ String name = props.getString(NAME, null); // NOI18N assert name != null : "Instance without name"; String adminURL = props.getString(ADMIN_URL, ""); // NOI18N - - char ch[] = Keyring.read(PREFIX+USERNAME+"."+name); - if (ch == null) { - LOG.log(Level.WARNING, "no username found for "+name); - ch = new char[]{' '}; - } - String userName = new String(ch); - assert userName != null : "username is missing for "+name; // NOI18N - ch = Keyring.read(PREFIX+PASSWORD+"."+name); - if (ch == null) { - LOG.log(Level.WARNING, "no password found for "+name); - ch = new char[]{' '}; - } - String password = new String(ch); - assert password != null : "password is missing for "+name; // NOI18N + String identityDomain = props.getString(IDENTITY_DOMAIN, "undefined"); // NOI18N String javaServiceName = props.getString(JAVA_SERVICE_NAME, "undefined"); // NOI18N String databaseServiceName = props.getString(DATABASE_SERVICE_NAME, ""); // NOI18N String onPremise = props.getString(ON_PREMISE_SERVICE_INSTANCE_ID, null); // NOI18N String sdkFolder = CloudSDKHelper.getSDKFolder(); - result.add(new OracleInstance(name, userName, password, adminURL, identityDomain, javaServiceName, databaseServiceName, onPremise, sdkFolder)); + result.add(new OracleInstance(name, adminURL, identityDomain, javaServiceName, databaseServiceName, onPremise, sdkFolder)); } return result; }