← Prev in month ← Prev in thread
Next in thread → Next in month →

Re: [sca-j] [JAVA-243] Problems with Java Client API classes - proposaldocs

From
Mike Edwards <>
Date
2011-07-18T10:57:32+00:00
ID
Thread
Re: [sca-j] [JAVA-243] Problems with Java Client API classes - proposaldocs
Folks,

Updated spec document with the proposal:

http://www.oasis-open.org/apps/org/workgroup/sca-j/download.php/42910/sca-javacaa-1.1-spec-wd052.pdf

http://www.oasis-open.org/apps/org/workgroup/sca-j/download.php/42909/sca-javacaa-1.1-spec-wd052.doc

Yours, Mike

Dr Mike Edwards
 Mail Point 137, Hursley
Park

STSM
 Winchester, Hants SO21
2JN

SCA & Services
Standards
 United Kingdom

Co-Chair OASIS SCA
Assembly TC
 

IBM Software Group
  

Phone:
+44-1962 818014
  

Mobile:
+44-7802-467431 (274097)
  

e-mail:

  

 

 

From:
Mike Edwards/UK/IBM@IBMGB

To:
"OASIS Java" <>

Date:
18/07/2011 11:50

Subject:
Re: [sca-j] [NEW ISSUE] Problems with
Java Client API classes

Logged as:  http://www.osoa.org/jira/browse/JAVA-243

Yours, Mike 

Dr Mike Edwards

 Mail Point 137, Hursley
Park 

STSM

 Winchester, Hants SO21
2JN 

SCA & Services
Standards 
 United Kingdom

Co-Chair OASIS SCA
Assembly TC 
 

IBM Software Group

  

Phone:

+44-1962 818014

  

Mobile:

+44-7802-467431 (274097)

  

e-mail:



  

 

 

From:

Mike Edwards/UK/IBM@IBMGB

To:

"OASIS Java" <>

Date:

18/07/2011 11:34

Subject:

[sca-j] [NEW ISSUE] Problems with Java
Client API classes

Target:                sca-javacaa-1.1-spec-wd051.doc

Description: 

The Java CAA specifications define the Java Client interface and a set
of Java classes that are used to support the Client interface.

There are some problems with these Java classes, as follows:

1) Call to get ThreadContextClassloader needs Security wrapping:

SCAClientFactoryFinderImpl class 

getThreadContextClassLoader ()
method 

This method accesses the ThreadContextClassLoader without a doPriviledged
wrapper, which gives problems when using this 

code in a secured environment: 

   private static ClassLoader getThreadContextClassLoader () {

       final ClassLoader threadClassLoader = 

               Thread.currentThread().getContextClassLoader();

       return threadClassLoader; 

   } 

2) SCAClientFactoryFinderImpl class does not support a null Domain name

instantiateSCAClientFactoryClass(...) method: 

   private static SCAClientFactory instantiateSCAClientFactoryClass(

                    
      Class<? extends SCAClientFactory> factoryImplClass,

                    
  URI domainURI) 

       throws NoSuchDomainException, ServiceRuntimeException
{ 

       

       try { 

           Constructor<? extends SCAClientFactory>
URIConstructor = 

                   factoryImplClass.getConstructor(domainURI.getClass());
      <<-------- this method invocation

           SCAClientFactory provider = 

              URIConstructor.newInstance(
domainURI ); 

By using domainURI.getClass(), this code unnecessarily requires a non-null
domainURI,, even if the eventual client Factory implementation

supports a null Domain name. 

3) Properties not passed on the SCAClientFactory 

SCAClientFactoryFinderImpl class 

instantiateSCAClientFactoryClass(...) method: 

Various of the client APIs provide the capability to pass a set of Properties
to the SCAClientFactory, but the default code in the 

SCAClientFactoryFinderImpl class does not pass these Properties to the
underlying SCAClientFactory: 

   private static SCAClientFactory instantiateSCAClientFactoryClass(

                    
      Class<? extends SCAClientFactory> factoryImplClass,
     // 1)  <<----- no Properties parameter to
the method 

                    
  URI domainURI) 

       throws NoSuchDomainException, ServiceRuntimeException
{ 

       

       try { 

           Constructor<? extends SCAClientFactory>
URIConstructor = 

                   factoryImplClass.getConstructor(domainURI.getClass());

           SCAClientFactory provider = 

              URIConstructor.newInstance(
domainURI );                  
      // 2)  <<------ no Properties parameter
when creating the SCAClientFactory 

           return provider;

Proposal: 

1) Add a doPrivileged wrapped in the getThreadContextClassLoader() method:

    private static ClassLoader getThreadContextClassLoader ()
{

       return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
{

           public ClassLoader run() {

               return Thread.currentThread().getContextClassLoader();

           }

       });

   } 

2)  Allow a null domainURI 

Change the  instantiateSCAClientFactoryClass(...) method: to get the
URI class directly: 

        try {

           Constructor<? extends SCAClientFactory>
URIConstructor = 

                    
       factoryImplClass.getConstructor(URI.class);
      //<<------- get the URI class directly

           SCAClientFactory provider = 

              URIConstructor.newInstance(
domainURI );

           return provider;

3) Add a Properties parameter to the instantiateSCAClientFactoryClass method
and to the newInstance 

    private static SCAClientFactory instantiateSCAClientFactoryClass(

                    
 Class<? extends SCAClientFactory> factoryImplClass,

                    
 URI domainURI, Properties properties)        
       // <<----- add Properties parameteer

       throws NoSuchDomainException, ServiceRuntimeException
{

       try {

           Constructor<? extends SCAClientFactory>
URIConstructor =

              factoryImplClass.getConstructor(URI.class,
Properties.class);  //  <<---- look for the constructor
with Properties parameter

           SCAClientFactory provider =

              URIConstructor.newInstance(
domainURI, properties );           //  <<----
call newInstance with properties parameter

           return provider;

       } catch (Throwable ex) {

           throw new ServiceRuntimeException(

+ change the invocation of instantiateSCAClientFactoryClass(...) method
in the find(...) 

method: 

   public SCAClientFactory find(Properties properties,

                    
           ClassLoader classLoader,

                    
           URI domainURI ) 

           throws NoSuchDomainException, ServiceRuntimeException
{ 

               if (classLoader == null)
{ 

                    
  classLoader = getThreadContextClassLoader ();

               }

               final String factoryImplClassName
= 

                    
  discoverProviderFactoryImplClass(properties, classLoader);

               final Class<? extends
SCAClientFactory> factoryImplClass 

                    
  = loadProviderFactoryClass(factoryImplClassName, 

                    
                     
               classLoader);

               final SCAClientFactory
factory = 

                    
  instantiateSCAClientFactoryClass(factoryImplClass,

                    
                     
                     
 domainURI, properties );     // <<----  added
properties parameter 

               return factory;

       } 

Yours, Mike 

Dr Mike Edwards

 Mail Point 137, Hursley
Park 

STSM

 Winchester, Hants SO21
2JN 

SCA & Services
Standards 
 United Kingdom

Co-Chair OASIS SCA
Assembly TC 
 

IBM Software Group

  

Phone:

+44-1962 818014

  

Mobile:

+44-7802-467431 (274097)

  

e-mail:



  

 

 

Unless stated otherwise above:

IBM United Kingdom Limited - Registered in England and Wales with number
741598. 

Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU 

Unless stated otherwise above:

IBM United Kingdom Limited - Registered in England and Wales with number
741598. 

Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU 

Unless stated otherwise above:

IBM United Kingdom Limited - Registered in England and Wales with number
741598. 

Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU
← Prev in month ← Prev in thread
Next in thread → Next in month →