On 4/20/2016 9:17 AM, Wang Weijun wrote:
> 
>> On Apr 20, 2016, at 7:41 AM, Xuelei Fan <[email protected]> wrote:
>>
>> On 4/19/2016 11:41 PM, Wang Weijun wrote:
>>>>>>> http://cr.openjdk.java.net/~weijun/8051408/webrev.10/
>>>>>
>>>>> Please update copyright dates.
>>>>>
>>>>> src/java.base/share/classes/java/security/Provider.java
>>>>> -------------------------------------------------------
>>>>> 145-151:  Looks like the comment are not correct.  There are
>>>>> getInstance(alg,params) since JDK 1.4 (See CertStore)
>>> Yes, but in those cases, there is either getInstance(alg) or 
>>> getInstance(alg,params), but not both. In SecureRandom, we are now 
>>> supporting both, and a fallback is needed for those implementations that 
>>> does not override new SecureRandomSpi(SRP).
>>>
>>>>>
>>>>> 156-157:  Fallback change the behavior significantly.  Construct with or
>>>>> without parameter can be very differently.  For example, LDAP cert store
>>>>> get requested, but the CertStore.getInstane(String,
>>>>> LDAPCertStoreParameters) may not return an LDAP cert store.  Can you
>>>>> make more comment why the fallback is OK?
>>> For CertStore (and Configuration and Policy), all of its implementations 
>>> only support the with-arg constructor,
>> I think the constructor is not of CertStore, but of CertStoreSpi
>> implementation.  
> 
> Yes.
> 
>> The provider implementation may support any kind of
>> constructor (implicit or explicit, intended or not).  The constructor
>> should be unknown to Provider.
> 
> Not sure what you mean, but Provider uses reflection to get the constructor 
> and create new instances. By convention, when something is created via 
> getInstance(alg), the SPI class would provide the arg-less constructor; when 
> via getInstance(alg,params), it would provide the with-arg constructor.
> 
Not sure what you mean.

public MyCertStore extends CertStoreSpi {

    public MyCertStore() {
        // whatever
        // ;-) Don't ask me why this construct is necessary.
    }

    public MyCertStore(XXX params) {
        // throws NoSuchMethodException
        // ;-) Don't ask me why throw this exception.
    }
}

newInstanceUtil(MyCertStore, ...)

The MyCertStore() would get called, unexpectly.  Am I missing something?

>>
>>> so NoSuchMethodException will never be thrown. Again, this fallback is only 
>>> for SecureRandom now.
>>>
>>>
>> Please add more comment and control so that this only apply to SecureRandom.
> 
> It already had "This is to support the enhanced SecureRandom".
> 
My understanding is:  this is to support the enhanced SecureRandom, and
it now applies to non-SecureRandom too.

If it does not apply to non-SecureRandom, please add comment and update
the code accordingly.

Xuelei

Reply via email to