Как работает объект лицензии Aspose? Это длится вечно?
Я использую Aspose для обработки PDF-файлов и документов Word. Каждый раз, когда я собираюсь что-то сделать с документом, я обязательно называю это:
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");
на pdfLicense
и wordLicense
переменные никогда не используются нигде, но Aspose правильно распознает, что у меня есть действительная лицензия. Как это происходит? Лицензии хранятся где-то в секретном синглтоне? Если да, значит ли это, что они длятся всю жизнь нити?
как это используется в веб приложение, если я запускаю приведенный выше код при запуске приложения, могу ли я безопасно использовать Aspose во всем приложении, не беспокоясь о лицензировании?
на данный момент я был бы более параноиком и запускал этот код в начале каждого метода, который использует Aspose. Это отлично работает - моя лицензия распознана правильно - но это слишком "Программирование по совпадению" для меня, чтобы чувствовать себя комфортно.
(Я использую C# с ASP.NET 3.5, если это делает разница.)
3 ответов
Если вы читали документация, вы увидите эту строку:
перед выполнением каких-либо операций с документами необходимо установить лицензию. Требуется только установить лицензию один раз за приложение (или процесс).
следовательно, он ориентирован на процесс.
в Java-версии Aspose вы можете проверить, была ли установлена лицензия, вызвав
License.isLicenseSet();
которая возвращает boolean. Обратите внимание, что это статический метод.
Я попытался создать Spring bean, который сделал бы это (как показано ниже), но это не сработало. Спринг, казалось,хотел призвать к порядку.setLicense (читатель) вместо лицензии.setLicense (строка). Ошибка, которую я получаю, -не удалось преобразовать значение свойства типа 'Java.ленг.String' to required type 'java.Ио.Reader 'for property 'лицензия'.
<bean id="asposeLicense" class="com.aspose.cells.License">
<property name="license" value="Aspose.Cells.lic" />
</bean>
однако я получил это более общее (Java) решение для работа:
web.XML-код:
<!-- does things needing doing when application starts or stops -->
<listener>
<listener-class>
com.xyz.listener.ApplicationStartupListener
</listener-class>
</listener>
ApplicationStartupListener.Ява (новый класс):
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) {
}
}