2010-03-10 11 views
7

Sto usando Aspose per gestire PDF e documenti Word. Ogni volta che sto per fare qualcosa con un documento, faccio in modo di chiamare questo:Come funziona l'oggetto Aspose License? Dura per sempre?

Aspose.Pdf.License pdfLicense = new Aspose.Pdf.License(); 
pdfLicense.SetLicense("Aspose.Total.lic"); 

Aspose.Words.License wordLicense = new Aspose.Words.License(); 
wordLicense.SetLicense("Aspose.Total.lic"); 

I pdfLicense e wordLicense variabili non sono mai utilizzati da nessuna parte, ma Aspose riconosce giustamente che io ho una licenza valida. Come succede? Le licenze si tengono in un singleton segreto da qualche parte? Se è così, significa che durano per tutta la vita del thread?

Poiché viene utilizzato in un'applicazione Web, se eseguo il codice sopra riportato all'avvio dell'applicazione, posso utilizzare Aspose in tutta sicurezza nella mia applicazione senza preoccuparmi delle licenze?

Al momento sarei più paranoico ed eseguo quel codice all'inizio di ogni metodo che utilizza Aspose. Funziona bene - la mia licenza è riconosciuta correttamente - ma è un po 'troppo "programmazione per coincidenza" per me sentirmi a mio agio.

(. Sto usando C# con ASP.NET 3.5, se questo fa alcuna differenza)

risposta

7

Se leggete il product documentation, si vedrà questa linea:

È necessario impostare un licenza prima di eseguire qualsiasi operazione con i documenti. È necessario impostare una licenza una sola volta per applicazione (o processo).

Quindi è incentrato sul processo.

1

Nella versione Java Aspose è possibile controllare se la licenza è stato fissato chiamando

License.isLicenseSet(); 

che restituisce un valore booleano. Si noti che questo è un metodo statico.

1

Ho provato a creare un bean Spring che avrebbe eseguito questa operazione (come illustrato di seguito), ma non ha funzionato. Spring sembrava voler chiamare License.setLicense (Reader) invece di License.setLicense (String). L'errore che ottengo è Impossibile convertire il valore della proprietà di tipo 'java.lang.String' nel tipo richiesto 'java.io.Reader' per la proprietà 'license'.

<bean id="asposeLicense" class="com.aspose.cells.License"> 
    <property name="license" value="Aspose.Cells.lic" /> 
</bean> 

ho fatto comunque ottenere questa soluzione più generica (Java) per lavorare:

web.xml:

<!-- does things needing doing when application starts or stops --> 
<listener> 
    <listener-class> 
     com.xyz.listener.ApplicationStartupListener 
    </listener-class> 
</listener> 

ApplicationStartupListener.java (nuova categoria):

package com.xyz.listener; 

import java.io.InputStream; 

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import com.aspose.cells.License; 

public class ApplicationStartupListener implements ServletContextListener { 
    protected final Log logger = LogFactory.getLog(getClass()); 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 
    logger.info("Initializing application context..."); 

    try { 
     // set license for Aspose.Cells (the Excel API) 
     InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("excel/Aspose.Cells.lic"); 
     License license = new License(); 
     license.setLicense(inputStream); 
     logger.info("Aspose.Cells license set? " + License.isLicenseSet()); 
    } catch (Exception e) { 
     logger.error("Error encountered trying to set Aspose.Cells license!", e); 
    } 

    logger.info("Application context initialized"); 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent event) { 
    } 

} 
Problemi correlati