I have a SOAPUI request. I need to execute multiple product id's from one request. We need to update it from SOAPUI. This is the request:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<DataService>
<Identity>
<DirectoryPath>
<Directory type="Enterprise">AP</Directory>
<Directory type="User">admin</Directory>
</DirectoryPath>
<Authentication type="password">admin</Authentication>
</Identity>
<Transaction>
<Command type="Modify">
<!--The Supported CommandTypes for Save are Add and Modify-->
<MasterCatalogRecord etype="Entity" commandqualifier="NoValidate/NoProcess">
<!--The Suppored commandqualifier for Save are Validate/Process, Validate/NoProcess, NoValidate/Process, NoValidate/NoProcess default is Validate/Process-->
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">SYSTEM</Key>
<Key name="PRODUCTID" type="string">SYS1</Key>
</ExternalKeys>
<EntityData>
<Attribute name="RECORD_STATE" type="string">Confirmed</Attribute>
</EntityData>
</MasterCatalogRecord>
</Command>
</Transaction>
</DataService>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Below is the sample request to Add multiple records (Not related) with different product ID through single request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.tibco.com/cim/services/mastercatalogrecord/wsdl/2.0">
<soapenv:Header/>
<soapenv:Body>
<DataService version="2.0" xmlns="http://www.tibco.com/cim/services/mastercatalogrecord/wsdl/2.0">
<Identity>
<DirectoryPath>
<Directory type="Enterprise">AP</Directory>
<Directory type="User">admin</Directory>
</DirectoryPath>
<Authentication>admin</Authentication>
</Identity>
<Transaction atomic="on">
<Command type="Modify">
<!--The Supported CommandTypes for Save are Add and Modify-->
<MasterCatalogRecord etype="Entity" commandqualifier="NoValidate/NoProcess">
<!--The Suppored commandqualifier for Save are Validate/Process, Validate/NoProcess, NoValidate/Process, NoValidate/NoProcess default is Validate/Process-->
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">SYSTEM</Key>
<Key name="PRODUCTID" type="string">SYS1</Key>
</ExternalKeys>
<EntityData>
<Attribute name="RECORD_STATE" type="string">Confirmed</Attribute>
</EntityData>
</MasterCatalogRecord>
</Command>
<Command type="Modify">
<!--The Supported CommandTypes for Save are Add and Modify-->
<MasterCatalogRecord etype="Entity" commandqualifier="NoValidate/NoProcess">
<!--The Suppored commandqualifier for Save are Validate/Process, Validate/NoProcess, NoValidate/Process, NoValidate/NoProcess default is Validate/Process-->
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">SYSTEM</Key>
<Key name="PRODUCTID" type="string">SYS2</Key>
</ExternalKeys>
<EntityData>
<Attribute name="RECORD_STATE" type="string">Confirmed</Attribute>
</EntityData>
</MasterCatalogRecord>
</Command>
<Command type="Modify">
<!--The Supported CommandTypes for Save are Add and Modify-->
<MasterCatalogRecord etype="Entity" commandqualifier="NoValidate/NoProcess">
<!--The Suppored commandqualifier for Save are Validate/Process, Validate/NoProcess, NoValidate/Process, NoValidate/NoProcess default is Validate/Process-->
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">SYSTEM</Key>
<Key name="PRODUCTID" type="string">SYS3</Key>
</ExternalKeys>
<EntityData>
<Attribute name="RECORD_STATE" type="string">Confirmed</Attribute>
</EntityData>
</MasterCatalogRecord>
</Command>
</Transaction>
</DataService>
</soapenv:Body>
</soapenv:Envelope>
And below is the request to ad multiple related records through single request:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<DataService version="2.0" xmlns="http://www.tibco.com/cim/services/mastercatalogrecord/wsdl/2.0">
<Identity>
<DirectoryPath>
<Directory type="Enterprise">AP</Directory>
<Directory type="User">admin</Directory>
</DirectoryPath>
<Authentication type="password">admin</Authentication>
</Identity>
<Transaction atomic="on">
<Command type="Modify">
<!--The Supported CommandTypes for Save are Add and Modify-->
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<!--The Suppored commandqualifier for Save are Validate/Process, Validate/NoProcess, NoValidate/Process, NoValidate/NoProcess-->
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">SYSTEM</Key>
<Key name="PRODUCTID" type="string">SYS1</Key>
</ExternalKeys>
<EntityData>
<Attribute name="RECORD_STATE" type="string">Confirmed</Attribute>
</EntityData>
<RelationshipData>
<Relationship>
<RelationType>SystemToClient</RelationType>
<RelatedEntities>
<MasterCatalogRecord etype="Entity">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT</Key>
<Key name="PRODUCTID" type="string">CLI1</Key>
</ExternalKeys>
</MasterCatalogRecord>
</RelatedEntities>
</Relationship>
</RelationshipData>
</MasterCatalogRecord>
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT</Key>
<Key name="PRODUCTID" type="string">CLI1</Key>
</ExternalKeys>
<EntityData>
<Attribute name="attr1_string" type="string">Test_B</Attribute>
</EntityData>
<RelationshipData>
<Relationship>
<RelationType>C1toC2</RelationType>
<RelatedEntities>
<MasterCatalogRecord etype="Entity">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT2</Key>
<Key name="PRODUCTID" type="string">c25</Key>
</ExternalKeys>
</MasterCatalogRecord>
</RelatedEntities>
</Relationship>
</RelationshipData>
</MasterCatalogRecord>
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT2</Key>
<Key name="PRODUCTID" type="string">c25</Key>
</ExternalKeys>
<EntityData>
<Attribute name="attr1_string" type="string">Test_C</Attribute>
</EntityData>
</MasterCatalogRecord>
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT2</Key>
<Key name="PRODUCTID" type="string">c25</Key>
</ExternalKeys>
<EntityData>
<Attribute name="attr1_string" type="string">Test_B</Attribute>
</EntityData>
<RelationshipData>
<Relationship>
<RelationType>C2toC3</RelationType>
<RelatedEntities>
<MasterCatalogRecord etype="Entity">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT3</Key>
<Key name="PRODUCTID" type="string">c25</Key>
</ExternalKeys>
</MasterCatalogRecord>
</RelatedEntities>
</Relationship>
</RelationshipData>
</MasterCatalogRecord>
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT3</Key>
<Key name="PRODUCTID" type="string">c25</Key>
</ExternalKeys>
<EntityData>
<Attribute name="attr1_string" type="string">Test_C</Attribute>
</EntityData>
</MasterCatalogRecord>
</Command>
<Command type="Modify">
<!--The Supported CommandTypes for Save are Add and Modify-->
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<!--The Suppored commandqualifier for Save are Validate/Process, Validate/NoProcess, NoValidate/Process, NoValidate/NoProcess-->
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">SYSTEM</Key>
<Key name="PRODUCTID" type="string">SYS2</Key>
</ExternalKeys>
<EntityData>
<Attribute name="RECORD_STATE" type="string">Confirmed</Attribute>
</EntityData>
<RelationshipData>
<Relationship>
<RelationType>SystemToClient</RelationType>
<RelatedEntities>
<MasterCatalogRecord etype="Entity">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT</Key>
<Key name="PRODUCTID" type="string">CLI2</Key>
</ExternalKeys>
</MasterCatalogRecord>
</RelatedEntities>
</Relationship>
</RelationshipData>
</MasterCatalogRecord>
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT</Key>
<Key name="PRODUCTID" type="string">CLI2</Key>
</ExternalKeys>
<EntityData>
<Attribute name="attr1_string" type="string">Test_B</Attribute>
</EntityData>
<RelationshipData>
<Relationship>
<RelationType>C1toC2</RelationType>
<RelatedEntities>
<MasterCatalogRecord etype="Entity">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT2</Key>
<Key name="PRODUCTID" type="string">c251</Key>
</ExternalKeys>
</MasterCatalogRecord>
</RelatedEntities>
</Relationship>
</RelationshipData>
</MasterCatalogRecord>
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT2</Key>
<Key name="PRODUCTID" type="string">c251</Key>
</ExternalKeys>
<EntityData>
<Attribute name="attr1_string" type="string">Test_C</Attribute>
</EntityData>
</MasterCatalogRecord>
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT2</Key>
<Key name="PRODUCTID" type="string">c251</Key>
</ExternalKeys>
<EntityData>
<Attribute name="attr1_string" type="string">Test_B</Attribute>
</EntityData>
<RelationshipData>
<Relationship>
<RelationType>C2toC3</RelationType>
<RelatedEntities>
<MasterCatalogRecord etype="Entity">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT3</Key>
<Key name="PRODUCTID" type="string">c251</Key>
</ExternalKeys>
</MasterCatalogRecord>
</RelatedEntities>
</Relationship>
</RelationshipData>
</MasterCatalogRecord>
<MasterCatalogRecord etype="Entity" commandqualifier="Validate/Process">
<ExternalKeys>
<Key name="MASTERCATALOGNAME" type="string">CLIENT3</Key>
<Key name="PRODUCTID" type="string">c251</Key>
</ExternalKeys>
<EntityData>
<Attribute name="attr1_string" type="string">Test_C</Attribute>
</EntityData>
</MasterCatalogRecord>
</Command>
</Transaction>
</DataService>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Related
I'm able to start my orientDb (2.2.6) instance using a plocal connection and able to add vertices to the DB but I can't access the studio. When I go to http://localhost:2480, the page is blank. Isn't studio ready and available 'out of the box'?
orientdb-server-config.xml is:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<orient-server>
<network>
<protocols>
<protocol implementation="com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary" name="binary"/>
<protocol name="http" implementation="com.orientechnologies.orient.server.network.protocol.http.ONetworkProtocolHttpDb"/>
</protocols>
<listeners>
<listener protocol="binary" socket="default" port-range="2424-2430" ip-address="0.0.0.0"/>
<listener protocol="http" port-range="2480-2485" ip-address="0.0.0.0">
<commands>
<command implementation="com.orientechnologies.orient.server.network.protocol.http.command.get.OServerCommandGetStaticContent" pattern="GET|www GET|studio/ GET| GET|*.htm GET|*.html GET|*.xml GET|*.jpeg GET|*.jpg GET|*.png GET|*.gif GET|*.js GET|*.css GET|*.swf GET|*.ico GET|*.txt GET|*.otf GET|*.pjs GET|*.svg">
<parameters>
<entry value="Cache-Control: no-cache, no-store, max-age=0, must-revalidate\r\nPragma: no-cache" name="http.cache:*.htm *.html"/>
<entry value="Cache-Control: max-age=120" name="http.cache:default"/>
</parameters>
</command>
</commands>
</listener>
</listeners>
</network>
<users>
<user resources="*" password="root" name="root"/>
<user resources="connect,server.listDatabases,server.dblist" password="guest" name="guest"/>
</users>
<properties>
<entry value="1" name="db.pool.min"/>
<entry value="50" name="db.pool.max"/>
<entry value="true" name="profiler.enabled"/>
</properties>
</orient-server>
I get these warnings whenever I try to access localhost:2480 from Chrome:
2016-09-28 16:56:01:756 WARNI path variable points to 'src/site' but it doesn't exists [OServerCommandGetStaticContent]
2016-09-28 16:56:01:756 WARNI path variable points to 'src/site' but it isn't a directory [OServerCommandGetStaticContent]
What am I missing?
I'm running OrientDB 2.2.6 on Windows 7 (64 bit) and I keep getting the following warning when I run a TestNG test in Java 8.
2016-10-05 10:46:10:888 WARNI {db=orientSystemDb} Maximum amount of pinned pages is
reached, given page OReadCacheEntry{fileId=7136553380276606136, pageIndex=0,
dataPointer=OCachePointer{referrersCount=1, usagesCount=0}, dirty=false, usagesCount=1}
will not be marked as pinned which may lead to performance degradation. You may consider
to increase percent of pined pages by changing of property storage.diskCache.pinnedPages
[O2QCache]
I'd prefer not to increase the percent of pinnedPages right now since memory usage will probably be limited. What I would like to do is clear the pages that have been pinned when the database has started and see if that resolves the issue.
Here is my config file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<orient-server>
<handlers>
<handler class="com.orientechnologies.orient.graph.handler.OGraphServerHandler">
<parameters>
<parameter value="true" name="enabled"/>
<parameter value="50" name="graph.pool.max"/>
</parameters>
</handler>
<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
<parameters>
<parameter value="${distributed}" name="enabled"/>
<parameter value="${ORIENTDB_HOME}/config/default-distributed-db-config.json" name="configuration.db.default"/>
<parameter value="${ORIENTDB_HOME}/config/hazelcast.xml" name="configuration.hazelcast"/>
</parameters>
</handler>
<handler class="com.orientechnologies.orient.server.handler.OJMXPlugin">
<parameters>
<parameter value="false" name="enabled"/>
<parameter value="true" name="profilerManaged"/>
</parameters>
</handler>
<handler class="com.orientechnologies.orient.server.handler.OAutomaticBackup">
<parameters>
<parameter value="false" name="enabled"/>
<parameter value="${ORIENTDB_HOME}/config/automatic-backup.json" name="config"/>
</parameters>
</handler>
<handler class="com.orientechnologies.orient.server.handler.OServerSideScriptInterpreter">
<parameters>
<parameter value="true" name="enabled"/>
<parameter value="SQL" name="allowedLanguages"/>
</parameters>
</handler>
</handlers>
<network>
<protocols>
<protocol implementation="com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary" name="binary"/>
<protocol name="http" implementation="com.orientechnologies.orient.server.network.protocol.http.ONetworkProtocolHttpDb"/>
</protocols>
<listeners>
<listener protocol="binary" socket="default" port-range="2424-2430" ip-address="0.0.0.0"/>
<listener protocol="http" port-range="2480-2485" ip-address="0.0.0.0">
<commands>
<command implementation="com.orientechnologies.orient.server.network.protocol.http.command.get.OServerCommandGetStaticContent" pattern="GET|www GET|studio/ GET| GET|*.htm GET|*.html GET|*.xml GET|*.jpeg GET|*.jpg GET|*.png GET|*.gif GET|*.js GET|*.css GET|*.swf GET|*.ico GET|*.txt GET|*.otf GET|*.pjs GET|*.svg">
<parameters>
<entry value="Cache-Control: no-cache, no-store, max-age=0, must-revalidate\r\nPragma: no-cache" name="http.cache:*.htm *.html"/>
<entry value="Cache-Control: max-age=120" name="http.cache:default"/>
</parameters>
</command>
</commands>
</listener>
</listeners>
</network>
<users>
<user resources="*" password="root" name="root"/>
<user resources="connect,server.listDatabases,server.dblist" password="guest" name="guest"/>
</users>
<properties>
<entry value="1" name="db.pool.min"/>
<entry value="50" name="db.pool.max"/>
<entry value="true" name="profiler.enabled"/>
<!-- Avoid updating versions when created or deleting edges -->
<entry value="-1" name="ridBag.embeddedToSbtreeBonsaiThreshold"/>
</properties>
</orient-server>
Here is the code for creating edges:
private int connectToAllOtherVertices(OrientBaseGraph oGraph, OrientVertex oVertex)
{
int numConnections = 0;
for(Vertex v : oGraph.getVertices())
{
if(v.equals(oVertex))
{
// skip it
continue;
}
oVertex.addEdge(String.format("connection%s", numConnections), v);
numConnections++;
}
return numConnections;
}
I'm able to create the edges but I keep getting the above warnings. How can I clear the pinned pages before running my tests?
Pinned pages is special area of disk cache which unloaded from RAM only when OrientDB storage is closed. So you may try using closeStorage method. See javadoc.
My goal is to have two nodes. Node A should write some vertices and node B should be able to read those vertices.
So far my hazelcast discovery works just fine. OrientDB will also hot deploy any found database from nodeA to nodeB. Unfortunately any write on Node A will not be replicated to nodeB.
My setup:
orientdb-server-config.xml:
Simplified version (copied from orientdb-community tar.gz)
%NODENAME% will be replaced with nodeA or nodeB.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<orient-server>
<handlers>
<handler
class="com.orientechnologies.orient.graph.handler.OGraphServerHandler">
<parameters>
<parameter name="enabled" value="true" />
<parameter name="graph.pool.max" value="50" />
</parameters>
</handler>
<!-- CLUSTER PLUGIN, TO TURN ON SET THE 'ENABLED' PARAMETER TO 'true' -->
<handler
class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
<parameters>
<parameter name="nodeName" value="%NODENAME%" />
<parameter name="enabled" value="true" />
<parameter name="configuration.db.default"
value="config/default-distributed-db-config.json" />
<parameter name="configuration.hazelcast" value="config/hazelcast.xml" />
</parameters>
</handler>
</handlers>
<network>
<sockets>
<socket
implementation="com.orientechnologies.orient.server.network.OServerSSLSocketFactory"
name="ssl">
<parameters>
<parameter value="false" name="network.ssl.clientAuth" />
<parameter value="config/cert/orientdb.ks" name="network.ssl.keyStore" />
<parameter value="password" name="network.ssl.keyStorePassword" />
<parameter value="config/cert/orientdb.ks" name="network.ssl.trustStore" />
<parameter value="password" name="network.ssl.trustStorePassword" />
</parameters>
</socket>
<socket
implementation="com.orientechnologies.orient.server.network.OServerSSLSocketFactory"
name="https">
<parameters>
<parameter value="false" name="network.ssl.clientAuth" />
<parameter value="config/cert/orientdb.ks" name="network.ssl.keyStore" />
<parameter value="password" name="network.ssl.keyStorePassword" />
<parameter value="config/cert/orientdb.ks" name="network.ssl.trustStore" />
<parameter value="password" name="network.ssl.trustStorePassword" />
</parameters>
</socket>
</sockets>
<protocols>
<!-- Default registered protocol. It reads commands using the HTTP protocol
and write data locally -->
<protocol name="binary"
implementation="com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary" />
<protocol name="http"
implementation="com.orientechnologies.orient.server.network.protocol.http.ONetworkProtocolHttpDb" />
</protocols>
<listeners>
<listener protocol="binary" ip-address="0.0.0.0" port-range="2424-2430"
socket="default" />
<!-- <listener protocol="binary" ip-address="0.0.0.0" port-range="2434-2440"
socket="ssl"/> -->
<listener protocol="http" ip-address="0.0.0.0" port-range="2480-2490"
socket="default">
<parameters>
<!-- Connection's custom parameters. If not specified the global configuration
will be taken -->
<parameter name="network.http.charset" value="utf-8" />
<parameter value="true" name="network.http.jsonResponseError" />
<!-- Define additional HTTP headers to always send as response -->
<!-- Allow cross-site scripting -->
<!-- parameter name="network.http.additionalResponseHeaders" value="Access-Control-Allow-Origin:
*;Access-Control-Allow-Credentials: true" / -->
</parameters>
<commands>
<command
pattern="GET|www GET|studio/ GET| GET|*.htm GET|*.html GET|*.xml GET|*.jpeg GET|*.jpg GET|*.png GET|*.gif GET|*.js GET|*.css GET|*.swf GET|*.ico GET|*.txt GET|*.otf GET|*.pjs GET|*.svg GET|*.json GET|*.woff GET|*.woff2 GET|*.ttf GET|*.svgz"
implementation="com.orientechnologies.orient.server.network.protocol.http.command.get.OServerCommandGetStaticContent">
<parameters>
<!-- Don't cache html resources in development mode -->
<entry name="http.cache:*.htm *.html"
value="Cache-Control: no-cache, no-store, max-age=0, must-revalidate\r\nPragma: no-cache" />
<!-- Default caching -->
<entry name="http.cache:default" value="Cache-Control: max-age=120" />
</parameters>
</command>
<command pattern="GET|gephi/*"
implementation="com.orientechnologies.orient.graph.server.command.OServerCommandGetGephi" />
</commands>
</listener>
</listeners>
<cluster>
</cluster>
</network>
<!-- <storages> <storage name="db_%NODENAME%" path="%DB_PATH%" userName="admin"
userPassword="admin" loaded-at-startup="true" /> </storages> -->
<users>
<user name="root" password="finger" resources="*" />
<user name="admin" password="finger" resources="*" />
</users>
<properties>
<!-- DATABASE POOL: size min/max -->
<entry name="db.pool.min" value="1" />
<entry name="db.pool.max" value="50" />
<!-- PROFILER: configures the profiler as <seconds-for-snapshot>,<archive-snapshot-size>,<summary-size> -->
<entry name="profiler.enabled" value="true" />
<!-- <entry name="profiler.config" value="30,10,10" /> -->
<entry name="plugin.directory" value="%PLUGIN_DIRECTORY%" />
<!-- LOG: enable/Disable logging. Levels are: finer, fine, finest, info,
warning -->
<entry name="log.console.level" value="%CONSOLE_LOG_LEVEL%" />
<entry name="log.file.level" value="%FILE_LOG_LEVEL%" />
</properties>
</orient-server>
default-distributed-db-config.json:
{
"autoDeploy": true,
"hotAlignment": true,
"executionMode": "synchronous",
"readQuorum": 1,
"writeQuorum": 1,
"failureAvailableNodesLessQuorum": false,
"readYourWrites": true,
"servers": {
"*": "master"
},
"clusters": {
"internal": {
},
"index": {
},
"*": {
"servers": ["<NEW_NODE>"]
}
}
}
Start OServer:
OServer server = OServerMain.create();
server.startup(getOrientServerConfig());
server.activate();
Wait until both nodes have been started.
Each node connects to the graph database.
OrientGraphFactory factory = new OrientGraphFactory("plocal:" + new File("databases/db_testdb").getAbsolutePath());
NodeA will add new vertices using getNoTx.
NodeB will just read the graph and count the found vertices using getNoTx.
I created a very basic maven project which contains two tests that will start nodeA and nodeB.
It is mandatory to set the ORIENTDB_HOME property for each node. The property must be set that way so that the $ORIENTDB_HOME/databases folder can be located. I have updated the maven project.
Each node can set the property for example this way:
String orientdbHome = new File("").getAbsolutePath();
System.setProperty("ORIENTDB_HOME", orientdbHome);
I tried to change the Entities Table Name and encountered an error.
I just renamed TblRecord as the name was from the Table Name
What is the mistake here and how to resolve it ?
Error :
+ _innerException {"The specified table does not exist. [ Records ]"} System.Exception {System.Data.SqlServerCe.SqlCeException}
The Edmx File
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="Xz.Business.Matches.Store" Alias="Self" Provider="System.Data.SqlServerCe.4.0" ProviderManifestToken="4.0" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
<EntityContainer Name="XzBusinessMatchesStoreContainer">
<EntitySet Name="Records" EntityType="Xz.Business.Matches.Store.Records" store:Type="Tables" />
</EntityContainer>
<EntityType Name="Records">
<Key>
<PropertyRef Name="Record" />
</Key>
<Property Name="Record" Type="nvarchar" Nullable="false" MaxLength="100" />
<Property Name="Relations" Type="nvarchar" MaxLength="450" />
</EntityType>
</Schema>
</edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema Namespace="Xz.Business.Matches" Alias="Self" p1:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:p1="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
<EntityContainer Name="RecordzEntities" p1:LazyLoadingEnabled="true">
<EntitySet Name="Records" EntityType="Xz.Business.Matches.TblRecord" />
</EntityContainer>
<EntityType Name="TblRecord">
<Key>
<PropertyRef Name="Record" />
</Key>
<Property Name="Record" Type="String" Nullable="false" MaxLength="100" Unicode="true" FixedLength="false" />
<Property Name="Relations" Type="String" MaxLength="450" Unicode="true" FixedLength="false" />
</EntityType>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs">
<EntityContainerMapping StorageEntityContainer="XzBusinessMatchesStoreContainer" CdmEntityContainer="RecordzEntities">
<EntitySetMapping Name="Records">
<EntityTypeMapping TypeName="Xz.Business.Matches.TblRecord">
<MappingFragment StoreEntitySet="Records">
<ScalarProperty Name="Record" ColumnName="Record" />
<ScalarProperty Name="Relations" ColumnName="Relations" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
<Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
</DesignerInfoPropertySet>
</Connection>
<Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true" />
<DesignerProperty Name="EnablePluralization" Value="True" />
<DesignerProperty Name="IncludeForeignKeysInModel" Value="True" />
<DesignerProperty Name="CodeGenerationStrategy" Value="None" />
</DesignerInfoPropertySet>
</Options>
<!-- Diagram content (shape and connector positions) -->
<Diagrams></Diagrams>
</Designer>
</edmx:Edmx>
This is EF5 & VS12
If you're renamed the table in the DB you will need to update the mapping in the EDMX. The error message is self describing.
Failing that you could just delete the model TblRecord from the edmx designer and re-add it with the new name Record.
I have a problem where I've mapped a stored procedure named sp_getMyEntity, which takes in one parameter called Id and then maps the results to a custom entity called MyEntity
I'm using mock data to illustrate the point. When I run the stored procedure with an id of 1, I get two distinct results back from the database:
exec [dbo].[sp_getMyEntity] #Id=1
Results:
ID - AddressId
1 - 6
1 - 3
When querying the ObjectContext using LINQ, I get 2 MyEntity's back but the AddressId for both of them is 6, not 6 and 3 respectively. Here is my call using LINQ:
Entities context = new Entities();
var entities = from s in context.GetMyEntity(1)
select s;
return entities.ToList();
Here is the EDMX xml:
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="MyProjectModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">
<EntityContainer Name="MyProjectModelStoreContainer">
<EntitySet Name="MyEntitySet" EntityType="MyProjectModel.Store.MyEntity" />
</EntityContainer>
<Function Name="sp_getMyEntity" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<Parameter Name="Id" Type="int" Mode="In" />
</Function>
<EntityType Name="MyEntity">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="int" Nullable="false" />
<Property Name="AddressId" Type="int" Nullable="true" />
</EntityType>
</Schema>
</edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema Namespace="MyProjectModel" Alias="Self" xmlns="http://schemas.microsoft.com/ado/2006/04/edm">
<EntityContainer Name="MyProjectViewEntities" >
<EntitySet Name="MyEntitySet" EntityType="MyProjectModel.MyEntity" />
<FunctionImport Name="GetMyEntity" EntitySet="MyEntitySet" ReturnType="Collection(MyProjectModel.MyEntity)">
<Parameter Name="Id" Mode="In" Type="Int32" />
</FunctionImport>
</EntityContainer>
<EntityType Name="MyEntity">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="Int32" Nullable="false" />
<Property Name="AddressId" Type="Int32" Nullable="true" />
</EntityType>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
<EntityContainerMapping StorageEntityContainer="MyProjectModelStoreContainer" CdmEntityContainer="MyProjectViewEntities" >
<FunctionImportMapping FunctionImportName="GetMyEntity" FunctionName="MyProjectModel.Store.sp_getMyEntity" />
<EntitySetMapping Name="MyEntitySet">
<EntityTypeMapping TypeName="IsTypeOf(MyProjectModel.MyEntity)">
<MappingFragment StoreEntitySet="MyEntitySet">
<ScalarProperty Name="AddressId" ColumnName="AddressId" />
<ScalarProperty Name="Id" ColumnName="Id" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2007/06/edmx">
<edmx:Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
</DesignerInfoPropertySet>
</edmx:Connection>
<edmx:Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true" />
</DesignerInfoPropertySet>
</edmx:Options>
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram Name="MyProjectModel" ZoomLevel="100" >
<EntityTypeShape EntityType="MyProjectModel.MyEntity" Width="1.5" PointX="5.25" PointY="0.5" Height="7.8375048828125" />
<EntityTypeShape EntityType="MyProjectModel.MyEntity" Width="1.5" PointX="5.5" PointY="1.375" Height="1.2636116536458335" /></Diagram></edmx:Diagrams>
</edmx:Designer>
</edmx:Edmx>
Any ideas why the MyEntity's are not unique?
Because the SP column which your SSDL identifies as the key is not a unique column. You cannot have a "key" with duplicate values.
As Craig stated above my Key property was not unique, so I ended up changing the SQL to look at follows:
SELECT
ROW_NUMBER() OVER(ORDER BY Id) AS KeyId
, Id
, AddressId
FROM
MyTable
WHERE
Id = #Id
Then the EDMX xml looks as follows, notice the new key is a bigint and Int64:
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="MyProjectModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">
<EntityContainer Name="MyProjectModelStoreContainer">
<EntitySet Name="MyEntitySet" EntityType="MyProjectModel.Store.MyEntity" />
</EntityContainer>
<Function Name="sp_getMyEntity" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<Parameter Name="Id" Type="int" Mode="In" />
</Function>
<EntityType Name="MyEntity">
<Key>
<PropertyRef Name="KeyId" />
</Key>
<Property Name="KeyId" Type="bigint" Nullable="false" />
<Property Name="Id" Type="int" Nullable="false" />
<Property Name="AddressId" Type="int" Nullable="true" />
</EntityType>
</Schema>
</edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema Namespace="MyProjectModel" Alias="Self" xmlns="http://schemas.microsoft.com/ado/2006/04/edm">
<EntityContainer Name="MyProjectViewEntities" >
<EntitySet Name="MyEntitySet" EntityType="MyProjectModel.MyEntity" />
<FunctionImport Name="GetMyEntity" EntitySet="MyEntitySet" ReturnType="Collection(MyProjectModel.MyEntity)">
<Parameter Name="Id" Mode="In" Type="Int32" />
</FunctionImport>
</EntityContainer>
<EntityType Name="MyEntity">
<Key>
<PropertyRef Name="KeyId" />
</Key>
<Property Name="KeyId" Type="Int64" Nullable="false" />
<Property Name="Id" Type="Int32" Nullable="false" />
<Property Name="AddressId" Type="Int32" Nullable="true" />
</EntityType>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">
<EntityContainerMapping StorageEntityContainer="MyProjectModelStoreContainer" CdmEntityContainer="MyProjectViewEntities" >
<FunctionImportMapping FunctionImportName="GetMyEntity" FunctionName="MyProjectModel.Store.sp_getMyEntity" />
<EntitySetMapping Name="MyEntitySet">
<EntityTypeMapping TypeName="IsTypeOf(MyProjectModel.MyEntity)">
<MappingFragment StoreEntitySet="MyEntitySet">
<ScalarProperty Name="AddressId" ColumnName="AddressId" />
<ScalarProperty Name="Id" ColumnName="Id" />
<ScalarProperty Name="KeyId" ColumnName="KeyId" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2007/06/edmx">
<edmx:Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
</DesignerInfoPropertySet>
</edmx:Connection>
<edmx:Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true" />
</DesignerInfoPropertySet>
</edmx:Options>
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram Name="MyProjectModel" ZoomLevel="100" >
<EntityTypeShape EntityType="MyProjectModel.MyEntity" Width="1.5" PointX="5.25" PointY="0.5" Height="7.8375048828125" />
<EntityTypeShape EntityType="MyProjectModel.MyEntity" Width="1.5" PointX="5.5" PointY="1.375" Height="1.2636116536458335" /></Diagram></edmx:Diagrams>
</edmx:Designer>
</edmx:Edmx>