Pergunta

Estou usando o Aspose para lidar com PDFs e documentos do Word.Cada vez que estou prestes a fazer algo com um documento, chamo isto:

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

O pdfLicense e wordLicense variáveis ​​​​nunca são usadas em lugar nenhum, mas o Aspose reconhece corretamente que tenho uma licença válida.Como isso acontece?As licenças estão sendo mantidas em um singleton secreto em algum lugar?Em caso afirmativo, isso significa que eles duram toda a vida útil do thread?

Como isso está sendo usado em um aplicativo da web, se eu executar o código acima quando o aplicativo for inicializado, posso usar o Aspose com segurança em todo o meu aplicativo sem me preocupar com o licenciamento?

No momento eu estava mais paranóico e executando esse código no início de cada método que usa Aspose.Isso funciona bem - minha licença é reconhecida corretamente - mas é um pouco "programação por coincidência" para que eu me sinta confortável com isso.

(Estou usando C# com ASP.NET 3.5, se isso faz alguma diferença.)

Foi útil?

Solução

Se você ler o documentação do produto, você verá esta linha:

Você precisa definir uma licença antes de realizar qualquer operação com documentos.Só é necessário definir uma licença uma vez por aplicativo (ou processo).

Portanto, é centrado no processo.

Outras dicas

Na versão Java do Aspose você pode verificar se a licença foi definida chamando

License.isLicenseSet();

que retorna um booleano.Observe que este é um método estático.

Tentei criar um bean Spring que fizesse isso (conforme mostrado abaixo), mas não funcionou.Spring parecia querer chamar License.setLicense(Reader) em vez de License.setLicense(String).O erro que recebo é Falha ao converter o valor da propriedade do tipo 'java.lang.String' para o tipo obrigatório 'java.io.Reader' para a propriedade 'license'.

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

No entanto, consegui que esta solução mais genérica (Java) funcionasse:

web.xml:

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

ApplicationStartupListener.java (nova classe):

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

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top