2009-07-27 4 views
6

서비스를 사용하여 데이터베이스와 상호 작용하는 Liferay 용 JSR-268 포틀릿을 만들었습니다. 문제점이나 오류없이 포틀릿을 배치 할 수 있지만 서비스가 정의한 테이블은 작성되지 않습니다!WAR 파일을 Liferay에 배포 할 때 SQL 테이블이 생성되지 않았습니다.

포틀릿을 테스트 할 때 "테이블을 찾을 수 없음"오류가 표시되지 않습니다. 전혀 오류가 없습니다! 테이블은 데이터베이스에 없습니다. 인터넷에서 Liferay Service Builder가 만든 생성 된 "create.sql"파일을 사용해야한다고 다른 점을 발견했지만 그 파일을 어디에도 볼 수 없습니다.

누군가 나를 도울 수 있습니까?

답변

10

테이블을 생성하지 않았습니까? 나는 손으로 테이블을 지울 때 비슷한 문제가 있었다. 포틀릿을 다시 배치 할 때 다시 생성 될 것이라고 생각했지만 발생하지 않았습니다.

소스 코드를 공부 한 후에 나는 테이블 servicecomponent에서 포틀릿과 검사 2 가지 약을 Liferay 정보를 저장 그것은 META-INF/tables.sql의 (의사) SQL 실행하기 전에 사실을 발견

  1. service.propertiesbuild.number이어야합니다 이상인 경우 servicecomponent,
  2. 에 저장 tables.sqlservicecomponent에 저장된 것과 달라야합니다.

tables.sql 만 실행됩니다.

쉽게 달성 할 수있는 방법은 servicecomponent의 모든 항목을 삭제하여 포틀릿을 처리하는 것입니다.

2

servicecomponent 테이블에서 항목을 삭제 해보십시오. 그리고 포틀릿을 재배포하십시오.

delete FROM servicecomponent where buildNamespace="<your table namespace>" 
0

당신이 service.xml에서하는 Liferay 스키마에서 새로운 개체를 정의 할 때하는 Liferay 6.2에 serviceBuilder를 사용하는 경우가 존재하지 않다면, 어떤 포틀릿이 시도 처음이 생성 될 테이블에 액세스 할 수 .

때때로 Liferay가 테이블을 자동으로 생성하지 않기 때문에 다른 스키마를 사용할 때 몇 가지 문제가 있습니다. 그런 다음 Creation SQL 문장을 작성하여 수동으로 작성한 다음 LocalServiceUtil을 통해 액세스해야합니다.

1

나는 똑같은 문제에 봉착했으며 주어진 해결책은 이다.

단계

  1. 나는 servicecomponent에 저장된보다 높은 service.propertiesbuild.number을 변경했습니다.
  2. META-INF 폴더에서 모든 xml 파일을 제거했습니다.
  3. webapp/WEB-INF/sql 폴더의 모든 sql 파일을 제거했습니다.

그런 빌드 서비스service.xml 파일에 defiend있는 사용자 정의 테이블을 작성합니다 배포합니다.

관련 문제