2010-03-10 6 views
7

Ich benutze Aspose, um PDFs und Word-Dokumente zu handhaben. Jedes Mal, wenn ich über etwas mit einem Dokument zu tun, ich sicherstellen, dass dies nennen:Wie funktioniert das Aspose License-Objekt? Bleibt es für immer?

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"); 

Die pdfLicense und wordLicense Variablen werden nie überall dort eingesetzt, doch Aspose erkennt richtig, dass ich eine gültige Lizenz tun. Wie kommt es dazu? Werden die Lizenzen irgendwo in einem geheimen Singleton aufbewahrt? Wenn ja, bedeutet das, dass sie für die Lebenszeit des Threads andauern?

Da dies in einer Webanwendung verwendet wird, kann ich, wenn ich den obigen Code beim Start der Anwendung ausführe, dann sicher Aspose in meiner gesamten Anwendung verwenden, ohne sich um die Lizenzierung Gedanken machen zu müssen?

Im Moment würde ich mehr paranoid sein und diesen Code am Anfang jeder Methode ausführen, die Aspose verwendet. Das funktioniert gut - meine Lizenz wird korrekt erkannt - aber es ist ein wenig zu "programming-by-counce", damit ich mich wohl fühle.

(. Ich bin mit C# mit ASP.NET 3.5, wenn das einen Unterschied macht)

Antwort

7

Wenn Sie die product documentation lesen, sehen Sie die folgende Zeile:

Sie müssen festlegen Lizenz, bevor Sie irgendwelche Operationen mit Dokumenten durchführen. Es ist nur erforderlich, eine Lizenz einmal pro Anwendung (oder Prozess) zu setzen.

Daher ist es prozessorientiert.

1

In der Java-Version von Aspose können Sie überprüfen, ob die Lizenz

License.isLicenseSet(); 

durch den Aufruf gesetzt, die einen Booleschen Wert zurück. Beachten Sie, dass dies eine statische Methode ist.

1

Ich habe versucht, eine Spring Bean, die dies tun würde (wie unten gezeigt), aber es hat nicht funktioniert. Spring schien License.setLicense (Reader) anstelle von License.setLicense (String) aufrufen zu wollen. Der Fehler, den ich erhalte, ist Fehler beim Konvertieren des Eigenschaftswerts vom Typ 'java.lang.String' in den erforderlichen Typ 'java.io.Reader' für die Eigenschaft 'Lizenz'.

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

Ich habe jedoch bekommen diese allgemeinere (Java) Lösung zu arbeiten:

web.xml:

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

ApplicationStartupListener.java (neue Klasse):

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) { 
    } 

} 
Verwandte Themen