cancel
Showing results for 
Search instead for 
Did you mean: 

Unable to create repository session

Former Member
0 Kudos

Hello All

Can anybody tell me why I am getting this error when I am trying to create a repository session of an existing repository?Here is the code:

import java.util.Locale;

import com.sap.mdm.commands.AuthenticateRepositorySessionCommand;

import com.sap.mdm.commands.CommandException;

import com.sap.mdm.commands.CreateRepositorySessionCommand;

import com.sap.mdm.commands.DestroySessionCommand;

import com.sap.mdm.commands.GetRepositoryRegionListCommand;

import com.sap.mdm.commands.GetRunningRepositoryListCommand;

import com.sap.mdm.data.MultilingualString;

import com.sap.mdm.data.RegionProperties;

import com.sap.mdm.data.RegionalString;

import com.sap.mdm.ids.TableId;

import com.sap.mdm.net.ConnectionException;

import com.sap.mdm.net.ConnectionPool;

import com.sap.mdm.net.ConnectionPoolFactory;

import com.sap.mdm.schema.FieldKeywordType;

import com.sap.mdm.schema.FieldProperties;

import com.sap.mdm.schema.FieldSortType;

import com.sap.mdm.schema.TableProperties;

import com.sap.mdm.schema.commands.CreateFieldCommand;

import com.sap.mdm.schema.commands.GetFieldListCommand;

import com.sap.mdm.schema.commands.GetTableListCommand;

import com.sap.mdm.schema.commands.ModifyFieldCommand;

import com.sap.mdm.schema.fields.FixedWidthTextFieldProperties;

import com.sap.mdm.server.DBMSType;

import com.sap.mdm.server.RepositoryIdentifier;

public class ModifyField {

private ModifyField() {

}

/**

  • Creates a multi-lingual string based on the list of regions.

  • @param regionPropertiesList the list of regions

  • @param baseString the base string

  • @return a multi-lingual string

*/

/**

private static MultilingualString createMultilingualString(RegionProperties[] regionPropertiesList, String baseString) {

MultilingualString mlString = new MultilingualString();

for (int i = 0; i < regionPropertiesList.length; i++) {

Locale locale = regionPropertiesList<i>.getLocale();

String regionCode = regionPropertiesList<i>.getRegionCode();

String string = baseString + "_" + locale.getLanguage() + "_" + locale.getCountry();

RegionalString regionalString = new RegionalString(string, regionCode);

mlString.set(regionalString);

}

return mlString;

}

/**

  • Creates a fixed-width field.

  • @param tableId the table from which the field will be create in

  • @param regionPropertiesList the list of regions

  • @return the new fixed-width field

*/

/**

private static FixedWidthTextFieldProperties createFixedWidthField(TableId tableId, RegionProperties[] regionPropertiesList) {

MultilingualString fieldName = createMultilingualString(regionPropertiesList, "NewField" + System.currentTimeMillis());

FixedWidthTextFieldProperties field = new FixedWidthTextFieldProperties();

field.setTableId(tableId);

field.setName(fieldName);

field.setKeywordType(FieldKeywordType.NORMAL);

field.setMultiLingual(true);

field.setModifyOnce(true);

field.setRequired(true);

field.setSortType(FieldSortType.CASE_SENSITIVE);

field.setWidth(60);

return field;

}

*/

public static void main(String[] args) {

// create connection pool to a MDM server

String tag = "172.18.139.200";

ConnectionPool connections = null;

try {

connections = ConnectionPoolFactory.getInstance(tag);

} catch (ConnectionException e) {

e.printStackTrace();

return;

}

// specify the repository to use

// alternatively, a repository identifier can be obtain from the GetMountedRepositoryListCommand

String repositoryName = "GDS_1";

String dbmsName = "Oracle";

RepositoryIdentifier reposId = new RepositoryIdentifier(repositoryName, dbmsName, DBMSType.MS_SQL);

// create a repository session

CreateRepositorySessionCommand sessionCommand = new CreateRepositorySessionCommand(connections);

sessionCommand.setRepositoryIdentifier(reposId );

try {

sessionCommand.execute();

System.out.println("8888");

} catch (CommandException e) {

e.printStackTrace();

System.out.println("7777777" + e);

return;

}

String sessionId = sessionCommand.getRepositorySession();

// authenticate the repository session

String userName = "Admin";

String userPassword = "";

AuthenticateRepositorySessionCommand authCommand = new AuthenticateRepositorySessionCommand(connections);

authCommand.setSession(sessionId);

authCommand.setUserName(userName);

authCommand.setUserPassword(userPassword);

try {

authCommand.execute();

} catch (CommandException e) {

e.printStackTrace();

return;

}

// retrieve the list of tables and pick the main table for creating a new field

GetTableListCommand tableListCommand = new GetTableListCommand(connections);

tableListCommand.setSession(sessionId);

try {

tableListCommand.execute();

} catch (CommandException e) {

e.printStackTrace();

return;

}

TableProperties mainTable = null;

TableProperties[] tables = tableListCommand.getTables();

for ( int i = 0; i < tables.length; i++) {

if (tables<i>.getType() == TableProperties.MAIN)

mainTable = tables<i>;

}

// retrieve the list of fields from the main table

// this is useful for resolving conflicting field names the new field might create

GetFieldListCommand getFieldListCommand = new GetFieldListCommand(connections);

getFieldListCommand.setSession(sessionId);

getFieldListCommand.setTableId(mainTable.getId());

try {

getFieldListCommand.execute();

} catch (CommandException e) {

e.printStackTrace();

return;

}

/**

// get the change stamp

// this is required when we make any kind of changes to the repository

int changeStamp = getFieldListCommand.getChangeStamp();

// retrieve the available regions (languages) for the repository

// we need this to set up the field name for each region

GetRepositoryRegionListCommand getReposRegionListCommand = new GetRepositoryRegionListCommand(connections);

getReposRegionListCommand.setRepositoryIdentifier(reposId);

try {

getReposRegionListCommand.execute();

} catch (CommandException e) {

e.printStackTrace();

return;

}

RegionProperties[] regionPropertiesList = getReposRegionListCommand.getRegions();

// set up the field to create

FieldProperties newField = createFixedWidthField(mainTable.getId(), regionPropertiesList);

// create the new field

CreateFieldCommand createFieldCommand = new CreateFieldCommand(connections);

createFieldCommand.setSession(sessionId);

createFieldCommand.setField(newField);

createFieldCommand.setInChangeStamp(changeStamp);

try {

createFieldCommand.execute();

} catch (CommandException e) {

e.printStackTrace();

return;

}

// a new change stamp is required.

changeStamp = createFieldCommand.getOutChangeStamp();

// setup the field for modification

FixedWidthTextFieldProperties modifiedField = (FixedWidthTextFieldProperties) newField;

modifiedField.setWidth(100);

modifiedField.setRequired(false);

// modify the field

ModifyFieldCommand modifyFieldCommand = new ModifyFieldCommand(connections);

modifyFieldCommand.setSession(sessionId);

modifyFieldCommand.setInChangeStamp(changeStamp);

modifyFieldCommand.setField(modifiedField);

try {

modifyFieldCommand.execute();

} catch (CommandException e) {

e.printStackTrace();

return;

}

*/

// finally destroy the session

DestroySessionCommand destroySessionCommand = new DestroySessionCommand(connections);

destroySessionCommand.setSession(sessionId);

try {

destroySessionCommand.execute();

} catch (CommandException e) {

e.printStackTrace();

return;

}

}

}

and this is the error

43424GDS_1

com.sap.mdm.commands.CommandException: com.sap.mdm.internal.protocol.manual.ServerException: The specified MDM repository was not found on the server.

at com.sap.mdm.commands.CreateRepositorySessionCommand.execute(CreateRepositorySessionCommand.java:79)

at com.sap.mdm.examples.ModifyField.main(ModifyField.java:150)

Caused by: com.sap.mdm.internal.protocol.manual.ServerException: The specified MDM repository was not found on the server.

at com.sap.mdm.internal.protocol.manual.AbstractProtocolCommand.execute(AbstractProtocolCommand.java:112)

at com.sap.mdm.commands.CreateRepositorySessionCommand.execute(CreateRepositorySessionCommand.java:74)

... 1 more

7777777com.sap.mdm.commands.CommandException: com.sap.mdm.internal.protocol.manual.ServerException: The specified MDM repository was not found on the server.

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hello.

As you have not mentioned it, this is my first question to you:

Is the name of the repository written correctly: "GDS_1"?

Also it could be better to use the name of the MDM server not the IP, because the IP could change and so be incorrect?

Well, the error message says clearly, that the repository was not found on the given server. So I assume something has to be wrong with the name of either the server or the repository.

I suggest you execute this command, to retrieve all the repository names and then checking them with your variable repositoryName:

// Make a new command to get all mounted repositories
GetMountedRepositoryListCommand getMountedRepositoryListCommand = new GetMountedRepositoryListCommand(connectionAccessor);

// Execute the command
getMountedRepositoryListCommand.execute();

// Get the list with all mounted repositories
MountedRepository[] mountedRepositories = getMountedRepositoryListCommand.getRepositories();

With a for-loop you can go through all repositories and check if the repository.

What I did to show them on the console of Eclipse:

for (Object allRepositories : mountedRepositories) {
// Add the actual repository to the string, newest is the first
System.out.println(allRepositories.toString())
}

I guess the question is now, is your repository mounted or not?

Another thing I saw:

 for ( int i = 0; i < tables.length; i++) {
if (tables.getType() == TableProperties.MAIN)
mainTable = tables;
}

How can this code be compiled? Shouldn't it be:

 for ( int i = 0; i < tables.length; i++) {
if (tables<i>.getType() == TableProperties.MAIN)
mainTable = tables<i>;
}

Or using a for-each-loop alternatively.

What are you using to write the code? Some IDE like Eclipse with just-in-time compiling or something like Notepad?

Best regards

Dominik