掲示板

ServiceBuilder error

14年前 に Kha N Nguyen によって更新されました。

ServiceBuilder error

Junior Member 投稿: 89 参加年月日: 09/11/22 最新の投稿
Hi all,

I am using Liferay 5.2.3, I have the service.xml as below:

<?xml version="1.0"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 5.2.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_5_2_0.dtd">

<service-builder package-path="com.example">

<namespace>Portal</namespace>
<!-- This is the folder that will be created under ext-impl -->

<entity name="Member" local-service="true">

<!-- PK fields -->
<column name="memId" type="long" primary="true" />

<!-- Other fields -->
<column name="lastSsn" type="int" />

<!-- Relationships -->
<column name="adhocGroups" type="Collection" entity="AdhocGroups" mapping-key="memId" />

</entity>


<entity name="AdhocGroups" local-service="true">

<!-- PK fields -->
<column name="userGroupId" type="long" primary="true" />
<column name="adHocGroupId" type="String" primary="true" />

<!-- Other fields -->
<column name="memId" type="long"/>

</entity>

</service-builder>


I executed Service Builder on EXT, and I have error:

[java] Error on line 1955, column 25 in com/liferay/portal/tools/servicebuilder/dependencies/persistence_impl.ftl
[java] serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName()) is undefined.
[java] It cannot be assigned to tempEntitySqlType
[java] The problematic instruction:
[java] ----------
[java]
[java] Error on line 1955, column 25 in com/liferay/portal/tools/servicebuilder/dependencies/persistence_impl.ftl
[java] serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName()) is undefined.
[java] It cannot be assigned to tempEntitySqlType
[java] The problematic instruction:
[java] ----------
[java] ==> assignment: tempEntitySqlType=serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName()) [on line 1955, column 25 in com/liferay/portal/tools/servicebuilder/dependencies/persistence_impl.ftl]
[java] ==> assignment: tempEntitySqlType=serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName()) [on line 1955, column 25 in com/liferay/portal/tools/servicebuilder/dependencies/persistence_impl.ftl]
[java] ----------
[java] ----------
[java]
[java] Java backtrace for programmers:
[java] ----------
[java] freemarker.core.InvalidReferenceException: Error on line 1955, column 25 in com/liferay/portal/tools/servicebuilder/dependencies/persistence_impl.ftl
[java] serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName()) is undefined.
[java] It cannot be assigned to tempEntitySqlType
[java] at freemarker.core.Assignment.accept(Assignment.java:111)
[java]
[java] Java backtrace for programmers:
[java] ----------
[java] freemarker.core.InvalidReferenceException: Error on line 1955, column 25 in com/liferay/portal/tools/servicebuilder/dependencies/persistence_impl.ftl
[java] serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName()) is undefined.
[java] It cannot be assigned to tempEntitySqlType
[java] at freemarker.core.Assignment.accept(Assignment.java:111)
[java] at freemarker.core.Environment.visit(Environment.java:208)
[java] at freemarker.core.MixedContent.accept(MixedContent.java:92)
[java] at freemarker.core.Environment.visit(Environment.java:208)
[java] at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)
[java] at freemarker.core.Environment.visit(Environment.java:208)
...................................


Can anyone help me please?

Thanks a lot
thumbnail
14年前 に Shagul Khaja によって更新されました。

RE: ServiceBuilder error

Liferay Master 投稿: 758 参加年月日: 07/09/27 最新の投稿
Hey Kha,

This could be a bug. Not sure. Here is the simple workaround. Add a separate primary key.

You could guarantee uniqueness on the two fields by adding a finder like below.


<entity name="AdhocGroups" local-service="true">

<!-- PK fields -->
<column name="id" type="long" primary="true" />

<!-- Other fields -->
<column name="userGroupId" type="long" />
<column name="adHocGroupId" type="String" />
<column name="memId" type="long" />


<finder return-type="AdhocGroups" name="someName" unique="true">
    <finder-column name="userGroupId"></finder-column>
   <finder-column name="adHocGroupId"></finder-column>
</finder>

</entity>


The above will generate a unique key like below in the indexes.sql.



create unique index IX_42750D81 on AdhocGroups (userGroupId, adHocGroupId);



Best,
Shagul
14年前 に Kha N Nguyen によって更新されました。

RE: ServiceBuilder error

Junior Member 投稿: 89 参加年月日: 09/11/22 最新の投稿
Thanks for your advice, Shagul

I have another issue:

Members_AdhocGroups and AdhocGroup_UserGroup have a relationship on 2 mapping keys as below:

<entity name="Members_AdhocGroups" local-service="true">

<!-- PK fields -->
<column name="id" type="long" primary="true"/>

<!-- Other fields -->
<column name="memberId" type="String" />
<column name="userGroupId" type="long" />
<column name="adHocGroupId" type="String" />

</entity>

<entity name="AdhocGroup_UserGroup" local-service="true">

<!-- PK fields -->
<column name="id" type="long" primary="true"/>

<!-- Other fields -->
<column name="adHocGroupId" type="String" />
<column name="userGroupId" type="long" />

<!-- Relationships -->
<column name="member_adhocgroup" type="Collection" entity="Members_AdhocGroups" mapping-key="adHocGroupId" />
<column name="member_adhocgroup" type="Collection" entity="Members_AdhocGroups" mapping-key="userGroupId" />


<finder return-type="AdhocGroup_UserGroup" name="AdhocGroupID_UserGroupID" unique="true">
<finder-column name="userGroupId"></finder-column>
<finder-column name="adHocGroupId"></finder-column>
</finder>

</entity>


Service Builder can be executed successfully.
But, the AdhocGroup_UserGroupPersistence class has the error: Duplicate method getMembers_AdhocGroupses(long pk)

How can I have the relationship with composite mapping keys?

Thanks a lot,
Kha
thumbnail
14年前 に Shagul Khaja によって更新されました。

RE: ServiceBuilder error

Liferay Master 投稿: 758 参加年月日: 07/09/27 最新の投稿
Take a look at com/liferay/portal/service.xml. This may provide you with examples on how to use mapping-table.


<!-- Relationships -->

		<column name="groups" type="Collection" entity="Group" mapping-table="Groups_Roles" />
		<column name="permissions" type="Collection" entity="Permission" mapping-table="Roles_Permissions" />
		<column name="users" type="Collection" entity="User" mapping-table="Users_Roles" />




-Shagul
14年前 に Kha N Nguyen によって更新されました。

RE: ServiceBuilder error

Junior Member 投稿: 89 参加年月日: 09/11/22 最新の投稿
Shagul Khaja:
Take a look at com/liferay/portal/service.xml. This may provide you with examples on how to use mapping-table.


<!-- Relationships -->

		<column name="groups" type="Collection" entity="Group" mapping-table="Groups_Roles" />
		<column name="permissions" type="Collection" entity="Permission" mapping-table="Roles_Permissions" />
		<column name="users" type="Collection" entity="User" mapping-table="Users_Roles" />




-Shagul


Hi Shagui,

As I know, <column name="users" type="Collection" entity="User" mapping-table="Users_Roles" /> is used for the Many - Many relationship. But, my one is One - Many.

Kha
thumbnail
14年前 に Shagul Khaja によって更新されました。

RE: ServiceBuilder error

Liferay Master 投稿: 758 参加年月日: 07/09/27 最新の投稿
Kha N Nguyen:
Thanks for your advice, Shagul

I have another issue:

Members_AdhocGroups and AdhocGroup_UserGroup have a relationship on 2 mapping keys as below:

<entity name="Members_AdhocGroups" local-service="true">

<!-- PK fields -->
<column name="id" type="long" primary="true"/>

<!-- Other fields -->
<column name="memberId" type="String" />
<column name="userGroupId" type="long" />
<column name="adHocGroupId" type="String" />

</entity>

<entity name="AdhocGroup_UserGroup" local-service="true">

<!-- PK fields -->
<column name="id" type="long" primary="true"/>

<!-- Other fields -->
<column name="adHocGroupId" type="String" />
<column name="userGroupId" type="long" />

<!-- Relationships -->
<column name="member_adhocgroup" type="Collection" entity="Members_AdhocGroups" mapping-key="adHocGroupId" />
<column name="member_adhocgroup" type="Collection" entity="Members_AdhocGroups" mapping-key="userGroupId" />


<finder return-type="AdhocGroup_UserGroup" name="AdhocGroupID_UserGroupID" unique="true">
<finder-column name="userGroupId"></finder-column>
<finder-column name="adHocGroupId"></finder-column>
</finder>

</entity>


Service Builder can be executed successfully.
But, the AdhocGroup_UserGroupPersistence class has the error: Duplicate method getMembers_AdhocGroupses(long pk)

How can I have the relationship with composite mapping keys?

Thanks a lot,
Kha


Ok, I see that you have the column name repeated twice in the relationship.

Why don't you just use the primary key (id) as the mapping-key.

-Shagul
14年前 に Kha N Nguyen によって更新されました。

RE: ServiceBuilder error

Junior Member 投稿: 89 参加年月日: 09/11/22 最新の投稿
Shagul Khaja:


Ok, I see that you have the column name repeated twice in the relationship.

Why don't you just use the primary key (id) as the mapping-key.

-Shagul


So, the Liferay Service Builder does not support for the composite mapping keys?

Do you think they should do that?

Do you think we do not need to use the relationship, we can use the service manually? What is advantage of the relationship of Service Builder?
thumbnail
14年前 に Shagul Khaja によって更新されました。

RE: ServiceBuilder error

Liferay Master 投稿: 758 参加年月日: 07/09/27 最新の投稿
thumbnail
12年前 に MANOVINAYAK AYYAPPAN によって更新されました。

Does Service Builder Allow Composite Keys

Regular Member 投稿: 131 参加年月日: 11/06/13 最新の投稿
Hi All,

Does any one know whether the issue with the Service Builder #LPS-4383 has been resolved?

I am using Liferay 6.1 GA now and I still cannot get the Composite Primary defined in service.xml to generate the services using Service Builder.

I am still getting the same error that Kha Nguyen got. Below is the stack trace.

Created dir: D:\_LIFERAY_DEV_ENV\moh\plugins\phm-plugins-sdk-6.1\portlets\lookUp-Mgt-portlet\docroot\WEB-INF\service
    [mkdir] Created dir: D:\_LIFERAY_DEV_ENV\moh\plugins\phm-plugins-sdk-6.1\portlets\lookUp-Mgt-portlet\docroot\WEB-INF\sql
     [echo] Loading jar:file:/D:/_LIFERAY_DEV_ENV/moh/bundles/portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/system.properties
     [echo] Jan 10, 2012 11:33:59 AM com.liferay.portal.kernel.log.Jdk14LogImpl info
     [echo] INFO: Global lib directory /D:/_LIFERAY_DEV_ENV/moh/bundles/portal-6.1.0-ce-ga1/tomcat-7.0.23/lib/ext/
     [echo] Jan 10, 2012 11:33:59 AM com.liferay.portal.kernel.log.Jdk14LogImpl info
     [echo] INFO: Portal lib directory /D:/_LIFERAY_DEV_ENV/moh/bundles/portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/
     [echo] 11:34:00,301 INFO  [EasyConf:122] Refreshed the configuration of all components
     [echo] 11:34:02,690 INFO  [ConfigurationLoader:56] Properties for jar:file:/D:/_LIFERAY_DEV_ENV/moh/bundles/portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/portal loaded from [jar:file:/D:/_LIFERAY_DEV_ENV/moh/bundles/portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/com/liferay/portal/tools/dependencies/portal-tools.properties, jar:file:/D:/_LIFERAY_DEV_ENV/moh/bundles/portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/portal.properties]
     [echo] Loading jar:file:/D:/_LIFERAY_DEV_ENV/moh/bundles/portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/portal.properties
     [echo] Loading jar:file:/D:/_LIFERAY_DEV_ENV/moh/bundles/portal-6.1.0-ce-ga1/tomcat-7.0.23/webapps/ROOT/WEB-INF/lib/portal-impl.jar!/com/liferay/portal/tools/dependencies/portal-tools.properties
     [echo] Building LookUpType
     [echo] Error on line 3853, column 25 in com/liferay/portal/tools/servicebuilder/dependencies/persistence_impl.ftl
     [echo] serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName()) is undefined.
     [echo] It cannot be assigned to tempEntitySqlType
     [echo] The problematic instruction:
     [echo] ----------
     [echo] ==&gt; assignment: tempEntitySqlType=serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName()) [on line 3853, column 25 in com/liferay/portal/tools/servicebuilder/dependencies/persistence_impl.ftl]
     [echo] ----------
     [echo] Java backtrace for programmers:
     [echo] ----------
     [echo] freemarker.core.InvalidReferenceException: Error on line 3853, column 25 in com/liferay/portal/tools/servicebuilder/dependencies/persistence_impl.ftl
     [echo] serviceBuilder.getSqlType(tempEntity.getPackagePath() + ".model." + entity.getName(), tempEntity.getPKVarName(), tempEntity.getPKClassName()) is undefined.
     [echo] It cannot be assigned to tempEntitySqlType
     [echo] 	at freemarker.core.Assignment.accept(Assignment.java:111)
     [echo] 	at freemarker.core.Environment.visit(Environment.java:221)
     [echo] 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
     [echo] 	at freemarker.core.Environment.visit(Environment.java:221)
     [echo] 	at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)
     [echo] 	at freemarker.core.Environment.visit(Environment.java:221)
     [echo] 	at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
     [echo] 	at freemarker.core.Environment.visit(Environment.java:428)
     [echo] 	at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
     [echo] 	at freemarker.core.Environment.visit(Environment.java:221)
     [echo] 	at freemarker.core.MixedContent.accept(MixedContent.java:92)
     [echo] 	at freemarker.core.Environment.visit(Environment.java:221)
     [echo] 	at freemarker.core.Environment.process(Environment.java:199)
     [echo] 	at freemarker.template.Template.process(Template.java:237)
     [echo] 	at com.liferay.portal.freemarker.FreeMarkerUtil.process(FreeMarkerUtil.java:49)
     [echo] 	at com.liferay.portal.freemarker.FreeMarkerUtil.process(FreeMarkerUtil.java:39)
     [echo] 	at com.liferay.portal.tools.servicebuilder.ServiceBuilder._processTemplate(ServiceBuilder.java:4788)
     [echo] 	at com.liferay.portal.tools.servicebuilder.ServiceBuilder._createPersistenceImpl(ServiceBuilder.java:2430)
     [echo] 	at com.liferay.portal.tools.servicebuilder.ServiceBuilder.<init>(ServiceBuilder.java:649)
     [echo] 	at com.liferay.portal.tools.servicebuilder.ServiceBuilder.<init>(ServiceBuilder.java:430)
     [echo] 	at com.liferay.portal.tools.servicebuilder.ServiceBuilder.main(ServiceBuilder.java:146)
     [echo] 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [echo] 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     [echo] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     [echo] 	at java.lang.reflect.Method.invoke(Unknown Source)
     [echo] 	at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217)
     [echo] 	at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152)
     [echo] 	at org.apache.tools.ant.taskdefs.Java.run(Java.java:771)
     [echo] 	at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:221)
     [echo] 	at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135)
     [echo] 	at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108)
     [echo] 	at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
     [echo] 	at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
     [echo] 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     [echo] 	at java.lang.reflect.Method.invoke(Unknown Source)
     [echo] 	at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
     [echo] 	at org.apache.tools.ant.Task.perform(Task.java:348)
     [echo] 	at org.apache.tools.ant.Target.execute(Target.java:390)
     [echo] 	at org.apache.tools.ant.Target.performTasks(Target.java:411)
     [echo] 	at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
     [echo] 	at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
     [echo] 	at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
     [echo] 	at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
     [echo] 	at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
     [echo] 	at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
     [echo] 	at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)

BUILD FAILED
D:\_LIFERAY_DEV_ENV\moh\plugins\phm-plugins-sdk-6.1\build-common-plugin.xml:201: Service Builder generated exceptions.

Total time: 1 minute 10 seconds</init></init>


And here is my service.xml

<entity name="LookUpValue" local-service="true" remote-service="true" human-name="Look Up Values">
		<column name="lookUpCode" type="String" primary="true"></column>
		<column name="lookUpName" type="String" primary="true"></column>
		
		<column name="companyId" type="long" />
		<column name="groupId" type="long"></column>
		<column name="phmUserId" type="long" />
		<column name="userName" type="String" />
		<column name="createdTmst" type="Date" />
		<column name="modifiedTmst" type="Date" />
		
		<column name="lkpValue" type="String"></column>
		<column name="description" type="String"></column>
		<column name="status" type="int"></column>
		<column name="startDate" type="Date"></column>
		<column name="endDate" type="Date"></column>
	</entity>

	<entity name="LookUpType" local-service="true" remote-service="true" human-name="Look Up Type">

		<!-- PK fields -->

		<column name="lookUpName" type="String" primary="true" />
		<column name="lookUpValues" type="Collection" entity="LookUpValue" mapping-key="lookUpName"></column>

		<!-- Audit fields -->

		<column name="companyId" type="long" />
		<column name="groupId" type="long"></column>
		<column name="phmUserId" type="long" />
		<column name="userName" type="String" />
		<column name="createdTmst" type="Date" />
		<column name="modifiedTmst" type="Date" />

		<!-- Other fields -->

		<column name="meaning" type="String" />
		<column name="description" type="String" />

		<!-- Order -->

		<order by="desc">
			<order-column name="createdTmst" />
		</order>

		<!-- Finder methods -->

		<finder name="CompanyId" return-type="Collection">
			<finder-column name="companyId" />
		</finder>
		<finder return-type="Collection" name="GroupId">
			<finder-column name="groupId"></finder-column>
		</finder>
	</entity>


Please let me know if the issue is still open, so that I can find an alternate way of defining my table relationships.

Thanks and Regards,
Mano
13年前 に chandra sekhar によって更新されました。

RE: ServiceBuilder error

Regular Member 投稿: 149 参加年月日: 09/07/07 最新の投稿
Hi,

I want to create mapping table in service.xml of ext.
I have CAOptions entity in sevice.xml of ext.
I want to create a Users_CAOptions mapping table.

I am unable to insert data into the Users_CAOptions mapping table.

Please help me.

The following is the service.xml


<!--?xml version="1.0"?-->


<service-builder package-path="com.ext.portlet.caoptions">
	<namespace>CAOptions</namespace>

	
	<entity name="CAOptions" local-service="true" remote-service="true" persistence-class="com.ext.portlet.caoptions.service.persistence.CAOptionsPersistenceImpl">
		<!-- PK fields -->
		<column name="caoId" type="long" primary="true" />

		<!-- Extra fields -->
		<column name="name" type="String" />
		<column name="typeId" type="int" />
		<column name="description" type="String" />
		<column name="isActive" type="int" />
		<column name="users" type="Collection" entity="com.liferay.portal.User" mapping-table="CAOptions_Users" />
		<!-- finder methods -->
		<finder name="TypeId" return-type="Collection">
			<finder-column name="typeId" />
			<finder-column name="isActive" />

		</finder>	
		
	</entity>


</service-builder>




Thanks in advance.......

Regards,
Chandrasekhar