2011-06-27 17 views
2

私はLiferayフォーラムからコピーしています.2週間で回答が得られませんでした。 http://www.liferay.com/community/forums/-/message_boards/message/9384663リセヤー取引how-to

私はドキュメント/ブログを探しています。How to Liferay Transaction。

のLiferay 6.0.6 PostgreSQLの

私はJAX-WS Webサービスとのフックを持っています。 私はLiferayサービスのみを使用しています。

ドキュメントを挿入してタグ付けする

fileEntry = DLFileEntryServiceUtil.addFileEntry(groupId, folderId, filename, filename, description, changeLog, "extraSettings", buffer, serviceContext); 
AssetEntry assetEntry = AssetEntryLocalServiceUtil.getEntry(DLFileEntry.class.getName(), fileEntry.getFolderId()); 
AssetTagUtil.addAssetEntry(assetTagObj.getPrimaryKey(), assetEntry.getPrimaryKey()); 

トランザクションをセットアップする必要があります。

私のクラスのアノテーション

@MTOM 
@WebService(targetNamespace="http://services.portal.xyz/",serviceName="AuditResultService",name = "AuditResult", endpointInterface = "xyz.portal.services.AuditResultWS") 
@Transactional(isolation = Isolation.DEFAULT, readOnly = false, rollbackFor = {PortalException.class, SystemException.class, InvalidParameterException.class, NoSuchEntryException.class}) 

@Transactionalは1つの

方法は、素晴らしい作品

@WebMethod 

WSのみで注釈されているLiferayのですが、何のトランザクション - 文書が作成されていないとNoSuchEntryExceptionドキュメントの後にされましたLiferayにとどまります。しようとした下記のフォーラムのスレッドに基づいて

http://www.liferay.com/community/forums/-/message_boards/message/9019161

portal-ext.properties 
transaction.manager.impl=org.springframework.transaction.jta.JtaTransactionManager 
transaction.manager.property.allowCustomIsolationLevels=true 
transaction.manager.property.globalRollbackOnParticipationFailure=true 

私は私のフック春の構成で何もしませんでした。

アイソレーションなどを変えようとしましたが成功しませんでした。

ガイドはありますか?あなたは必ずしもAssetTagServiceUtil代わりのAssetTagUtilを呼び出す1つのトランザクションですべての3つのメソッドを呼び出す必要がない場合

は非常に多くの

答えて

0

、ありがとうございました。 addFileEntry呼び出しはファイルシステム上にファイルを作成しますが、それはトランザクションではありません。

本当に1つのトランザクション内にすべてを持つことが、Webサービスから呼び出されるカスタムサービスを作成することを主張する場合です。

なぜなら、Liferayのtrasaction managerは@Transactionalアノテーションをサービスだけでスキャンするからです。

0

トランザクションセクション内で例外をスローすると、トランザクションが発生する可能性があります。 liferayトランザクションでは、サービスエンティティのメソッド、つまり... ServiceUtilクラス内でのみ処理されます。メソッドの名前の前にCRUD操作を付ける必要があります。したがって、「ダミー」エンティティを作成する必要があります。これは簡単な方法です。