掲示板

7cogs hook wipes out the database if you delete Bruno

thumbnail
14年前 に Zsolt Balogh によって更新されました。

7cogs hook wipes out the database if you delete Bruno

Expert 投稿: 463 参加年月日: 09/03/23 最新の投稿
Why? I've installed liferay, configured everything, but somehow I forgot to undeploy the 7cogs hook. We were working a lot on new organizations, web pages, etc., then I needed to change something in portal-ext.properties. I've restarted the portal, and interesting thing happened:
  • I could log in with the ldap data (configured in the database)
  • I had no rights, but I was administrator before
  • I've checked the database, and there were no pages, only some 7cogs and wol.


Long story short, I've checked the 7congs hooks' source code and I've found this:
protected void clearData(long companyId) throws Exception {

		// Users

		List<user> users = UserLocalServiceUtil.search(
			companyId, null, null, null, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
			(OrderByComparator)null);

		for (User user : users) {
			if (user.getScreenName().equals("test")) {
				continue;
			}

			UserLocalServiceUtil.deleteUser(user.getUserId());
		}

		// Groups

		List<group> groups = GroupLocalServiceUtil.search(
			companyId, null, null, null, QueryUtil.ALL_POS, QueryUtil.ALL_POS);

		for (Group group : groups) {
			IGFolderLocalServiceUtil.deleteFolders(group.getGroupId());

			JournalArticleLocalServiceUtil.deleteArticles(group.getGroupId());
			JournalTemplateLocalServiceUtil.deleteTemplates(group.getGroupId());
			JournalStructureLocalServiceUtil.deleteStructures(
				group.getGroupId());

			if (!PortalUtil.isSystemGroup(group.getName())) {
				GroupLocalServiceUtil.deleteGroup(group.getGroupId());
			}
			else {
				LayoutLocalServiceUtil.deleteLayouts(group.getGroupId(), false);
				LayoutLocalServiceUtil.deleteLayouts(group.getGroupId(), true);
			}
		}

		// Organizations

		deleteOrganizations(
			companyId, OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID);

		// Roles

		List<role> roles = RoleLocalServiceUtil.getRoles(companyId);

		for (Role role : roles) {
			if (!PortalUtil.isSystemRole(role.getName())) {
				RoleLocalServiceUtil.deleteRole(role.getRoleId());
			}
		}
	}</role></group></user>


And this:

// If Bruno exists, do not run again


Bruno has a good position in the example Liferay world, he can't be removed from the database, or the hook plugin will

So, I really don't know why does Liferay really need to delete almost all of data from the database...
thumbnail
14年前 に Jonas Yuan によって更新されました。

RE: 7cogs hook wipes out the database if you delete Bruno

Liferay Master 投稿: 993 参加年月日: 07/04/27 最新の投稿
Hi Zsolt,

The 7cogs hook is used for Demo only. If you just want to use Liferay for demo (hooking functions), you may use Liferay default bundle. Otherwise, it would be better to remove sample data.

The following steps would be useful for development - removing sample data.

• Download latest Liferay Portal Standard Edition Bundled with Tomcat 6.0 from the website http://www.liferay.com/web/guest/downloads/portal.
• Unzip downloaded file into $LIFERAY_PORTAL;
• Remove folders: $TOMCAT_AS_DIR/webapps/sevencogs-hook and $TOMCAT_AS_DIR/webapps/sevencogs-theme. The variable $TOMCAT_AS_DIR refers to Tomcat folder under $LIFERAY_HOME.
• Create a database lportal and an account lportal/lportal in MySQL as follows.
drop database if exists lportal;
create database lportal character set utf8;
grant all on lportal.* to 'lportal'@'localhost' identified by 'lportal' with grant option;
grant all on lportal.* to 'lportal'@'localhost.localdomain' identified by 'lportal' with grant option;

• Create a file named portal-ext.properties at $TOMCAT_AS_DIR/webapps/ROOT/WEB-INF/classes; and add following lines at the end of portal-ext.properties:
## MySQL
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost:3306/lportal?useUnicode=true&amp;characterEncoding=UTF-8&amp;useFastDateParsing=false
jdbc.default.username=lportal
jdbc.default.password=lportal

• Run $TOMCAT_AS_DIR/bin/startup.sh
• Open your browser and type URL http://localhost:8080
• Login as an administrator - Email Address: test@liferay.com and Password: test.

Hope that it helps.

Thanks

Jonas Yuan
Liferay Portal 5.2 Systems Development
Liferay Portal Enterprise Intranets
thumbnail
14年前 に Zsolt Balogh によって更新されました。

RE: 7cogs hook wipes out the database if you delete Bruno

Expert 投稿: 463 参加年月日: 09/03/23 最新の投稿
Thanks Jonas, I did this when I've installed liferay, just I forgot the 7cogs hook somehow in the deploy directory.

What I really don't understand why does the hook plugin removes all of your organizations, why not just install the demo data?

I know that in this case it was my mistake, but this could be dangerous (e.g. you build the 7cogs from sdk and the ant deploys it...)
thumbnail
14年前 に Jonas Yuan によって更新されました。

RE: 7cogs hook wipes out the database if you delete Bruno

Liferay Master 投稿: 993 参加年月日: 07/04/27 最新の投稿
Hi Zsolt,

Yes, you are right, the 7cogs hook is dangerous if you have your own data already.

The following is sample code for hooks (clear Data - users, groups, etc.):

protected void doRun(long companyId) throws Exception {
		if (isAlreadyRan(companyId)) {
			return;
		}

		long defaultUserId = UserLocalServiceUtil.getDefaultUserId(companyId);

		clearData(companyId);
		setupCommunities(companyId, defaultUserId);
		setupOrganizations(companyId, defaultUserId);
		setupRoles(companyId, defaultUserId);
		setupUsers(companyId);
	}


	protected void clearData(long companyId) throws Exception {

		// Users

		List<user> users = UserLocalServiceUtil.search(
			companyId, null, null, null, QueryUtil.ALL_POS, QueryUtil.ALL_POS,
			(OrderByComparator)null);

		for (User user : users) {
			if (user.getScreenName().equals("test")) {
				continue;
			}

					UserLocalServiceUtil.deleteUser(user.getUserId());
		}
......
</user>


This is the reason that 7cogs hook was removed in EE bundle.

Hope that it helps.

Jonas Yuan
Liferay Portal 5.2 Systems Development
Liferay Portal Enterprise Intranets
thumbnail
14年前 に Zsolt Balogh によって更新されました。

RE: 7cogs hook wipes out the database if you delete Bruno

Expert 投稿: 463 参加年月日: 09/03/23 最新の投稿
I was thinking, what's the data fragment on the database which tells you, that it's untouched, clear liferay install. I can't tell any options, I can understand why Bruno is checked. I wish we had a Bruno colleague, I woudn't work on this right now emoticon

I think that the deletion should be removed from the code.
thumbnail
14年前 に Jonas Yuan によって更新されました。

RE: 7cogs hook wipes out the database if you delete Bruno

Liferay Master 投稿: 993 参加年月日: 07/04/27 最新の投稿
Thanks, Zsolt . The deletion should be removed from the code.

Adding comments for Liferay users:

Don't use 5.2.3 CE bundle for production. For production, use EE bundle instead.
thumbnail
14年前 に Lisa Simpson によって更新されました。

RE: 7cogs hook wipes out the database if you delete Bruno

Liferay Legend 投稿: 2034 参加年月日: 09/03/05 最新の投稿
I think that the 7cogs stuff should be put into the repository and not the bundle. That way, if I want sample stuff its there and I can install it. If I don't want it, its not on my machine and so it's never an issue.