2016-10-07 7 views
1

Apache Batikを使用して、プロジェクトの1つでSVGをPDFに変換します。このプロジェクトはTomcat 7で動作するSpringアプリケーションです。すべては、$ CATALINA_HOME/bin/startup.shを使用してTomcatを起動してUbuntuで動作する開発マシンで正常に動作します。しかし、CentOS 6のプロダクションサーバーでアプリケーションを実行しようとすると、service tomcat7 startコマンドを使用してTomcatが起動すると、アプリケーションは変換時に無限ループに陥ります。問題をデバッグしようとしましたが、このコードが見つかりました:CentOSのApache FOPのフォントの無限スキャン

/** 
* Creates the {@link FontInfo} instance for the given configuration. 
* @param cfg the configuration 
* @param useComplexScriptFeatures true if complex script features enabled 
* @return the font collection 
* @throws FOPException if an error occurs while setting up the fonts 
*/ 
public static FontInfo createFontInfo(Configuration cfg, boolean useComplexScriptFeatures) 
    throws FOPException { 
    FontInfo fontInfo = new FontInfo(); 
    final boolean strict = false; 
    if (cfg != null) { 
     URI thisUri = new File(".").getAbsoluteFile().toURI(); 
     InternalResourceResolver resourceResolver 
       = ResourceResolverFactory.createDefaultInternalResourceResolver(thisUri); 
     //TODO The following could be optimized by retaining the FontManager somewhere 
     FontManager fontManager = new FontManager(resourceResolver, FontDetectorFactory.createDefault(), 
       FontCacheManagerFactory.createDefault()); 

     //TODO Make use of fontBaseURL, font substitution and referencing configuration 
     //Requires a change to the expected configuration layout 

     DefaultFontConfig.DefaultFontConfigParser parser 
       = new DefaultFontConfig.DefaultFontConfigParser(); 
     DefaultFontConfig fontInfoConfig = parser.parse(cfg, strict); 
     DefaultFontConfigurator fontInfoConfigurator 
       = new DefaultFontConfigurator(fontManager, null, strict); 
     List<EmbedFontInfo> fontInfoList = fontInfoConfigurator.configure(fontInfoConfig); 
     fontManager.saveCache(); 
     FontSetup.setup(fontInfo, fontInfoList, resourceResolver, useComplexScriptFeatures); 
    } else { 
     FontSetup.setup(fontInfo, useComplexScriptFeatures); 
    } 
    return fontInfo; 
} 

PDFDocumentGraphics2DConfiguratorクラスです。私が開発者マシン上でアプリケーションを実行しているときにという結果がというフォルダに割り当てられたthisUriという結果になります。アプリが本番マシンで実行されているときは、/.という値が割り当てられています。 thisUriの値は、FOPがフォント検索を開始するフォルダであり、これはファイルシステムのルートであり、FS構造全体の再帰検索が非常に遅いため、本番マシンでは主な問題だと私は考えています。フォント設定でfop.xconfファイルをWEB-INFディレクトリに追加しようとしましたが、FOPの動作には影響しませんでした。そして、私は開発マシンから始めるのと同じ方法で、プロダクションサーバー上でTomcatを起動できません。 FORのフォントスキャンのベースディレクトリを設定する方法に関するアイデアはありますか?または私は何か間違っているのですか?

答えて

1

私はこの問題の回避策を見つけました。私は、そのようなことをしたり、それがうまくいくかどうか分からない。回避策は、デフォルトでFile.getAbsolutFile()user.dirオプションで定義されたディレクトリに対して解決されたディレクトリを返すという事実に基づいています。ですから、Tomcatのサービス開始時にこのオプションを渡すには何らかの方法が必要です。私がこれを行うために見つけた唯一の方法は、%CATALINA_HOME/bin/setenv.shファイルで定義されたCATALINA_OPTS変数に-Duser.dir=/%CATALINA_HOME/を追加することです。その後、フォントのスキャン処理には通常の時間がかかり、アプリが正常に動作するようになりました。

関連する問題