JMeter - Changing user defined variables from command line - command-line

I'm trying to update a "user defined variable" in a jmeter test plan using the command line
jmeter -n -t SimpleJmxExample.jmx -l log.jtl -Jtestproperty=202
as you can see I'm using the -J argument. However it doesn't seem to make any difference? Is there a better/more accepted way of passing in different variables for a test plan?
Here is my jmx file
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.1">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">1</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">1</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<longProp name="ThreadGroup.start_time">1358160198000</longProp>
<longProp name="ThreadGroup.end_time">1358160198000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Test Http Response Code" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">httpstat.us</stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">http</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/${testproperty}</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp name="HTTPSampler.monitor">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSampler>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="Cache-Control" elementType="Header">
<stringProp name="Header.name">Cache-Control</stringProp>
<stringProp name="Header.value">max-age=0</stringProp>
</elementProp>
<elementProp name="Accept-Language" elementType="Header">
<stringProp name="Header.name">Accept-Language</stringProp>
<stringProp name="Header.value">en-US,en;q=0.8</stringProp>
</elementProp>
<elementProp name="Accept" elementType="Header">
<stringProp name="Header.name">Accept</stringProp>
<stringProp name="Header.value">text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</stringProp>
</elementProp>
<elementProp name="User-Agent" elementType="Header">
<stringProp name="Header.name">User-Agent</stringProp>
<stringProp name="Header.value">Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11</stringProp>
</elementProp>
<elementProp name="Accept-Encoding" elementType="Header">
<stringProp name="Header.name">Accept-Encoding</stringProp>
<stringProp name="Header.value">gzip,deflate,sdch</stringProp>
</elementProp>
<elementProp name="Accept-Charset" elementType="Header">
<stringProp name="Header.name">Accept-Charset</stringProp>
<stringProp name="Header.value">ISO-8859-1,utf-8;q=0.7,*;q=0.3</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>true</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="testproperty" elementType="Argument">
<stringProp name="Argument.name">testproperty</stringProp>
<stringProp name="Argument.value">200</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
</Arguments>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>

Well, with -J argument you are setting PROPERTY, and in User Defined Variables config - VARIABLE. It will define two different entities, although having the same name, they will have different values.
In your situation you can do the following.
Set jmeter property value in command-line as above in your question
...-Jtestproperty=202
In UDV config set variable with value from property:
testproperty = ${__property(testproperty,,)}
or
testproperty = ${__P(testproperty,)}
Use ${testproperty} further in the script.
As well you can possibly do the same wihout using variable and simply refer property as {__P(testproperty,)} to get value set in command-line.

Related

Rundeck job to transfer a file to a remote node

I am trying to transfer a file through sftp in rundeck to a remote node.It fails the job execution
with the error Failed: WrongParameter: sourcePath has to be a directory.
my jod definition looks like this
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
<threadcount>1</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<id>8b7a993e-441d-4073-9e88-5ec801950a43</id>
<loglevel>INFO</loglevel>
<name>mytestjob2</name>
<nodeFilterEditable>false</nodeFilterEditable>
<nodefilters>
<filter>172.105.34.168</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='true' strategy='node-first'>
<command>
<description>ftp file</description>
<node-step-plugin type='copyfile'>
<configuration>
<entry key='destinationPath' value='/root/destination/' />
<entry key='echo' value='true' />
<entry key='recursive' value='true' />
<entry key='sourcePath' value='/root/source/' />
</configuration>
</node-step-plugin>
</command>
</sequence>
<uuid>8b7a993e-441d-4073-9e88-5ec801950a43</uuid>
</job>
</joblist>
Can you tell me where am I going wrong ? how should I suppy the source directory to rundeck.
You must set the temp path in "Source Path" textbox with ${file.Upload} and set the file name on "Destination Path" textbox using "${file.Upload.fileName}" (like cp/mv UNIX command).
I leave a job definition that works (tested on Rundeck 3.3.1):
<joblist>
<job>
<context>
<options preserveOrder='true'>
<option name='Upload' type='file' />
</options>
</context>
<defaultTab>output</defaultTab>
<description></description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
<threadcount>1</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<id>6df7eb26-7f0f-46ed-bb60-cec9eb21b28b</id>
<loglevel>INFO</loglevel>
<name>UploadJob</name>
<nodeFilterEditable>false</nodeFilterEditable>
<nodefilters>
<filter>name: remote</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<node-step-plugin type='copyfile'>
<configuration>
<entry key='destinationPath' value='/home/user/${file.Upload.fileName}' />
<entry key='echo' value='true' />
<entry key='recursive' value='false' />
<entry key='sourcePath' value='${file.Upload}' />
</configuration>
</node-step-plugin>
</command>
</sequence>
<uuid>6df7eb26-7f0f-46ed-bb60-cec9eb21b28b</uuid>
</job>
</joblist>
Here the result.

Jmeter test plan is working in local mode (single node) but it not working in distributed mode

I deployed my JMeter setup on k8s with single master pod and a couple of slave pods. If I try to run this test without using remote instance (-R ) than it works fine but with remote instance, it is completing without any execution. I am not getting any error.
Even it also works on the slave node without using -R option. I tried on a slave node just to make sure that my slave node is able to execute it and there is nothing wrong with the setup.
jmeter -Jserver.rmi.ssl.disable=true -n -t /tests/jmeter/GGSPerf_testplan.jmx -j jmeter_tests.log
jmeter -Jserver.rmi.ssl.disable=true -n -t /tests/jmeter/GGSPerf_testplan.jmx -j jmeter_tests.log -R
XX.XX.XX.XX
But this test plan is working: https://github.com/kaarolch/kubernetes-jmeter/blob/master/examples/simple_test.jmx
My jmeter test plan:
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.1.1 r1855137">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">Content-Type</stringProp>
<stringProp name="Header.value">text/plain</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</Arguments>
<hashTree/>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">100</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">8</stringProp>
<stringProp name="ThreadGroup.ramp_time">4</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
<collectionProp name="HeaderManager.headers">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">Content-Type</stringProp>
<stringProp name="Header.value">application/json</stringProp>
</elementProp>
</collectionProp>
</HeaderManager>
<hashTree/>
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="CSV Data Set Config" enabled="true">
<stringProp name="TestPlan.comments">Test configuration</stringProp>
<stringProp name="filename">${CSVFileName}</stringProp>
<stringProp name="fileEncoding">${CSVFileEncoding}</stringProp>
<stringProp name="variableNames">${CSVHeaderVariables}</stringProp>
<stringProp name="ignoreFirstLine">${CSVIgnoreHeader}</stringProp>
<stringProp name="delimiter">${CSVDelimeter}</stringProp>
<stringProp name="quotedData">${CSVAllowQuotedData}</stringProp>
<stringProp name="recycle">${CSVRecycleOnEOF}</stringProp>
<stringProp name="stopThread">${CSVStopThreadOnEOF}</stringProp>
<stringProp name="shareMode">${CSVSharingMode}</stringProp>
</CSVDataSet>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="AddressGeocodeRequest" enabled="true">
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
<collectionProp name="Arguments.arguments">
<elementProp name="" elementType="HTTPArgument">
<boolProp name="HTTPArgument.always_encode">false</boolProp>
<stringProp name="Argument.value">I have JSON body here</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="HTTPSampler.domain">${GGS_ServerName}</stringProp>
<stringProp name="HTTPSampler.port">${GGS_ServerPort}</stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">${GGS_RequestPath}</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
<BackendListener guiclass="BackendListenerGui" testclass="BackendListener" testname="Backend Listener" enabled="true">
<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="graphiteMetricsSender" elementType="Argument">
<stringProp name="Argument.name">graphiteMetricsSender</stringProp>
<stringProp name="Argument.value">org.apache.jmeter.visualizers.backend.graphite.TextGraphiteMetricsSender</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="graphiteHost" elementType="Argument">
<stringProp name="Argument.name">graphiteHost</stringProp>
<stringProp name="Argument.value">test-influxdb</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="graphitePort" elementType="Argument">
<stringProp name="Argument.name">graphitePort</stringProp>
<stringProp name="Argument.value">2003</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="rootMetricsPrefix" elementType="Argument">
<stringProp name="Argument.name">rootMetricsPrefix</stringProp>
<stringProp name="Argument.value">jmeter.</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="summaryOnly" elementType="Argument">
<stringProp name="Argument.name">summaryOnly</stringProp>
<stringProp name="Argument.value">true</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="samplersList" elementType="Argument">
<stringProp name="Argument.name">samplersList</stringProp>
<stringProp name="Argument.value"></stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="percentiles" elementType="Argument">
<stringProp name="Argument.name">percentiles</stringProp>
<stringProp name="Argument.value">90;95;99</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="classname">org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient</stringProp>
</BackendListener>
<hashTree/>
</hashTree>
</hashTree>
There is nothing useful in Logs, no error or stacktrace:
2019-09-30 10:37:36,873 INFO o.a.j.r.RmiUtils: Disabling SSL for RMI as
server.rmi.ssl.disable is set to 'true'
2019-09-30 10:37:37,294 INFO o.a.j.e.ClientJMeterEngine: sent test to
10.56.0.27 basedir='tmp'
2019-09-30 10:37:37,294 INFO o.a.j.e.ClientJMeterEngine: Sending properties
{}
2019-09-30 10:37:37,315 INFO o.a.j.e.ClientJMeterEngine: sent run command to
10.56.0.27
2019-09-30 10:37:37,315 INFO o.a.j.e.DistributedRunner: Remote engines have
been started
2019-09-30 10:37:38,055 INFO o.a.j.JMeter: Started remote host: 10.56.0.26
(1569839858055)
2019-09-30 10:37:38,254 INFO o.a.j.r.Summariser: summary = 0 in
00:00:00 = ******/s Avg: 0 Min: 9223372036854775807 Max:
-9223372036854775808 Err: 0 (0.00%)
2019-09-30 10:37:38,255 INFO o.a.j.JMeter: Finished remote host: 10.56.0.26
(1569839858255)
2019-09-30 10:37:38,613 INFO o.a.j.JMeter: Started remote host: 10.56.0.27
(1569839858613)
2019-09-30 10:37:38,706 INFO o.a.j.r.Summariser: summary = 0 in
00:00:00 = ******/s Avg: 0 Min: 9223372036854775807 Max:
-9223372036854775808 Err: 0 (0.00%)
2019-09-30 10:37:38,707 INFO o.a.j.JMeter: Finished remote host: 10.56.0.27
(1569839858707)
2019-09-30 10:37:43,260 INFO o.a.j.JMeter: Interrupting RMI Reaper
I can see at least one reason for failure: your test plan is not a valid XML file because it's missing these 2 lines at the bottom:
</hashTree>
</jmeterTestPlan>
Also given you disable secure RMI on the master side you should do the same for all the slaves:
jmeter-server -Jserver.rmi.ssl.disable=true
And finally, pay attention to the IP address of the JMeter slaves, when you start JMeter slave you should see something like:
Created remote object: UnicastServerRef2 [liveRef: [endpoint:XX.XX.XX.XX:1794,objID:[38be521f:16d80bfab94:-7fff, 2395028286451043349]]]
If the IP address is not something you expect, i.e. machine where you run JMeter slave on has multiple network interfaces, you can explicitly specify which one to bind via java.rmi.server.hostname property like:
jmeter-server -Jserver.rmi.ssl.disable=true -Djava.rmi.server.hostname=XX.XX.XX.XX
More information:
java.rmi Properties
Remote hosts and RMI configuration
Apache JMeter Properties Customization Guide

Start OrientDB studio for plocal DB

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?

Error Key properties cannot be empty

Hi all i'm try to deploy a esb project into jboss server 5.1ga
But i got this error
**My Enviroment is
Jboss 5.1 ga,
Jboss Developer Studio 5.0**
Jboss esb 4.11
Riftsaw 2.3.0
17:58:49,155 ERROR [AbstractKernelController] Error installing to Parse: name=vfszip:/D:/jboss-5.1.0.GA/server/default/deploy/Save_Event2.esb/ state=Not Installed mode=Manual requiredState=Parse
org.jboss.deployment.DeploymentException: Key properties cannot be empty
at org.jboss.soa.esb.listeners.deployers.mc.EsbConfigParser.getDependenciesFromDeploymentXml(EsbConfigParser.java:265)
at org.jboss.soa.esb.listeners.deployers.mc.EsbConfigParser.parse(EsbConfigParser.java:170)
at org.jboss.soa.esb.listeners.deployers.mc.EsbConfigParser.parse(EsbConfigParser.java:83)
at org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer.parseAndInit(AbstractVFSParsingDeployer.java:256)
at org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer.parse(AbstractVFSParsingDeployer.java:239)
at org.jboss.deployers.spi.deployer.helpers.AbstractParsingDeployerWithOutput.createMetaData(AbstractParsingDeployerWithOutput.java:355)
at org.jboss.deployers.spi.deployer.helpers.AbstractParsingDeployerWithOutput.createMetaData(AbstractParsingDeployerWithOutput.java:322)
at org.jboss.deployers.spi.deployer.helpers.AbstractParsingDeployerWithOutput.createMetaData(AbstractParsingDeployerWithOutput.java:294)
at org.jboss.deployers.spi.deployer.helpers.AbstractParsingDeployerWithOutput.deploy(AbstractParsingDeployerWithOutput.java:234)
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70)
at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53)
at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:361)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.system.server.profileservice.repository.AbstractProfileService.activateProfile(AbstractProfileService.java:306)
at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:271)
at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461)
at org.jboss.Main.boot(Main.java:221)
at org.jboss.Main$1.run(Main.java:556)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.management.MalformedObjectNameException: Key properties cannot be empty
at javax.management.ObjectName.construct(Unknown Source)
at javax.management.ObjectName.<init>(Unknown Source)
at org.jboss.soa.esb.listeners.deployers.mc.EsbConfigParser.getDependenciesFromDeploymentXml(EsbConfigParser.java:247)
... 38 more
That is error I Got and i'm trying to pass bpel result to esb and back to bpes .
---My deployment.xml-----------------
<?xml version="1.0"?>
<jbossesb-deployment>
<depends>jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_ esb_reply</depends>
<depends>quickstart_helloworld_Request_esb</depends>
<depends>quickstart_helloworld_Request_gw</depends>
</jbossesb-deployment>
--My jbm-queue-service.xml-----------
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_esb_reply"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer
</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_esb"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer
</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_gw"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer
</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
</server>
----My jboss-esb.xml-----------
<?xml version = "1.0" encoding = "UTF-8"?>
<jbossesb
xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"
parameterReloadSecs="5">
<providers>
<jms-provider name="JBossMQ" connection-factory="ConnectionFactory">
<jms-bus busid="quickstartGwChannel">
<jms-message-filter dest-type="QUEUE"
dest-name="queue/quickstart_helloworld_Request_gw" />
</jms-bus>
<jms-bus busid="quickstartEsbChannel">
<jms-message-filter dest-type="QUEUE"
dest-name="queue/quickstart_helloworld_Request_esb" />
</jms-bus>
<jms-bus busid="quickstartEsbReplyChannel">
<jms-message-filter dest-type="QUEUE"
dest-name="queue/quickstart_helloworld_Request_esb_reply" />
</jms-bus>
</jms-provider>
<jbr-provider name="JBR-Http-1" protocol="http" host="localhost">
<jbr-bus busid="Http-1" port="8088" />
</jbr-provider>
</providers>
<services>
<service category="FirstServiceESB" name="SimpleListener"
description="Hello World">
<listeners>
<jms-listener name="JMS-Gateway" busidref="quickstartGwChannel"
is-gateway="true" />
<jms-listener name="helloWorld" busidref="quickstartEsbChannel" />
<jbr-listener name="Http-Gateway" busidref="Http-1"
is-gateway="true" />
</listeners>
<actions mep="RequestResponse">
<action name="action1"
class="MyJMSListenerAction"
process="displayMessage" />
<!--
<action name="action2" class="org.jboss.soa.esb.actions.SystemPrintln">
<property name="printfull" value="false" />
</action>
The next action is for Continuous Integration testing
<action name="testStore" class="org.jboss.soa.esb.actions.TestMessageStore" />
-->
</actions>
</service>
</services>
</jbossesb>
Any help Appreciated.
Best Regards,
Pradeep.
If you look at the stacktrace of the error you can see that the error is a MalformedObjectNameException coming from EsbConfigParser:
org.jboss.soa.esb.listeners.deployers.mc.EsbConfigParser.getDependenciesFromDeploymentXml(EsbConfigParser.java:247)
The method name where the error is thrown is
getDependenciesFromDeploymentXml
So it looks like the problem is in the deployment xml.
Now we can confirm this by looking at the source code of the class (https://www.java2s.com/Open-Source/Java/JBoss/jbossesb-4.7/org/jboss/soa/esb/listeners/deployers/mc/EsbConfigParser.java.htm) and see that it is doing this:
Iterator depends = MetaData.getChildrenByTagName(jboss, "depends");
if (depends != null)
{
while (depends.hasNext())
{
Element depend = (Element) depends.next();
dependencies.add(new ObjectName(MetaData.getElementContent(depend)));
}
}
And then if we look at your deployment.xml above there is indeed an element that looks invalid:
<depends>jboss.esb.quickstart.destination:service=Queue,name=quickstart_helloworld_Request_ esb_reply</depends>
"quickstart_helloworld_Request_ esb_reply" should not have a space between "Request_" and "esb_reply".
Change it to "quickstart_helloworld_Request_esb_reply".

EF4 POCO (not using T4): Mapping and metadata information could not be found for EntityType

I have a pretty simple console project with an entity model (containing two simple entities), two handmade POCOs and a handmade Context class. The program fires a simple query against the DB and everything including LazyLoading works fine.
The problem: As soon as i add another Entity data model (even if i add an empty one), the calls to CreateObjectSet in Ef2PlaygroundModel_3Container throw the following exception:
Unhandled Exception: System.InvalidOperationException: Mapping and metadata information could not be found for EntityType 'EF2_Playground.Driver'.
at System.Data.Objects.ObjectContext.GetTypeUsage(Type entityCLRType)
at System.Data.Objects.ObjectContext.GetEntitySetFromContainer(EntityContainer container, Type entityCLRType, String exceptionParameterName)
at System.Data.Objects.ObjectContext.GetEntitySetForType(Type entityCLRType, String exceptionParameterName)
at System.Data.Objects.ObjectContext.CreateObjectSet[TEntity]()
at EF2_Playground.Ef2PlaygroundModel_3Container.get_Drivers() in C:\...\Ef2PlaygroundModel_3Pocos.cs:line 64
at EF2_Playground.Program.Main(String[] args) in C:\...\Program.cs:line 15
Does anyone have an idea about what is going wrong here?
That is the working project:
Ef2PlaygroundModel_3.edmx:
Code Generation Strategy is set to "None"
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="Ef2PlaygroundModel_3.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/2009/02/edm/ssdl">
<EntityContainer Name="Ef2PlaygroundModel_3StoreContainer">
<EntitySet Name="Cars" EntityType="Ef2PlaygroundModel_3.Store.Cars" store:Type="Tables" Schema="dbo"/>
<EntitySet Name="Drivers" EntityType="Ef2PlaygroundModel_3.Store.Drivers" store:Type="Tables" Schema="dbo"/>
<EntitySet Name="CarDriver" EntityType="Ef2PlaygroundModel_3.Store.CarDriver" store:Type="Tables" Schema="dbo"/>
<AssociationSet Name="FK_CarDriver_Car" Association="Ef2PlaygroundModel_3.Store.FK_CarDriver_Car">
<End Role="Car" EntitySet="Cars"/>
<End Role="CarDriver" EntitySet="CarDriver"/>
</AssociationSet>
<AssociationSet Name="FK_CarDriver_Driver" Association="Ef2PlaygroundModel_3.Store.FK_CarDriver_Driver">
<End Role="Driver" EntitySet="Drivers"/>
<End Role="CarDriver" EntitySet="CarDriver"/>
</AssociationSet>
</EntityContainer>
<EntityType Name="Cars">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false"/>
<Property Name="Brand" Type="nvarchar(max)" Nullable="false"/>
<Property Name="Model" Type="nvarchar(max)" Nullable="false"/>
<Property Name="ReleaseDate" Type="datetime" Nullable="true"/>
</EntityType>
<EntityType Name="Drivers">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false"/>
<Property Name="Name" Type="nvarchar(max)" Nullable="false"/>
</EntityType>
<EntityType Name="CarDriver">
<Key>
<PropertyRef Name="Cars_Id"/>
<PropertyRef Name="Drivers_Id"/>
</Key>
<Property Name="Cars_Id" Type="int" Nullable="false"/>
<Property Name="Drivers_Id" Type="int" Nullable="false"/>
</EntityType>
<Association Name="FK_CarDriver_Car">
<End Role="Car" Type="Ef2PlaygroundModel_3.Store.Cars" Multiplicity="1"/>
<End Role="CarDriver" Type="Ef2PlaygroundModel_3.Store.CarDriver" Multiplicity="*"/>
<ReferentialConstraint>
<Principal Role="Car">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="CarDriver">
<PropertyRef Name="Cars_Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="FK_CarDriver_Driver">
<End Role="CarDriver" Type="Ef2PlaygroundModel_3.Store.CarDriver" Multiplicity="*"/>
<End Role="Driver" Type="Ef2PlaygroundModel_3.Store.Drivers" Multiplicity="1"/>
<ReferentialConstraint>
<Principal Role="Driver">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="CarDriver">
<PropertyRef Name="Drivers_Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
</Schema>
</edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm" xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" Namespace="Ef2PlaygroundModel_3" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation">
<EntityContainer Name="Ef2PlaygroundModel_3Container" annotation:LazyLoadingEnabled="true">
<EntitySet Name="Cars" EntityType="Ef2PlaygroundModel_3.Car"/>
<EntitySet Name="Drivers" EntityType="Ef2PlaygroundModel_3.Driver"/>
<AssociationSet Name="CarDriver" Association="Ef2PlaygroundModel_3.CarDriver">
<End Role="Car" EntitySet="Cars"/>
<End Role="Driver" EntitySet="Drivers"/>
</AssociationSet>
</EntityContainer>
<EntityType Name="Car">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Type="Int32" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="Identity"/>
<Property Type="String" Name="Brand" Nullable="false"/>
<Property Type="String" Name="Model" Nullable="false"/>
<Property Type="DateTime" Name="ReleaseDate" Nullable="true"/>
<NavigationProperty Name="Drivers" Relationship="Ef2PlaygroundModel_3.CarDriver" FromRole="Car" ToRole="Driver"/>
</EntityType>
<EntityType Name="Driver">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Type="Int32" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="Identity"/>
<Property Type="String" Name="Name" Nullable="false"/>
<NavigationProperty Name="Cars" Relationship="Ef2PlaygroundModel_3.CarDriver" FromRole="Driver" ToRole="Car"/>
</EntityType>
<Association Name="CarDriver">
<End Type="Ef2PlaygroundModel_3.Car" Role="Car" Multiplicity="*"/>
<End Type="Ef2PlaygroundModel_3.Driver" Role="Driver" Multiplicity="*"/>
</Association>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
<EntityContainerMapping StorageEntityContainer="Ef2PlaygroundModel_3StoreContainer" CdmEntityContainer="Ef2PlaygroundModel_3Container">
<EntitySetMapping Name="Cars">
<EntityTypeMapping TypeName="IsTypeOf(Ef2PlaygroundModel_3.Car)">
<MappingFragment StoreEntitySet="Cars">
<ScalarProperty Name="Id" ColumnName="Id"/>
<ScalarProperty Name="Brand" ColumnName="Brand"/>
<ScalarProperty Name="Model" ColumnName="Model"/>
<ScalarProperty Name="ReleaseDate" ColumnName="ReleaseDate"/>
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="Drivers">
<EntityTypeMapping TypeName="IsTypeOf(Ef2PlaygroundModel_3.Driver)">
<MappingFragment StoreEntitySet="Drivers">
<ScalarProperty Name="Id" ColumnName="Id"/>
<ScalarProperty Name="Name" ColumnName="Name"/>
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<AssociationSetMapping Name="CarDriver" TypeName="Ef2PlaygroundModel_3.CarDriver" StoreEntitySet="CarDriver">
<EndProperty Name="Car">
<ScalarProperty Name="Id" ColumnName="Cars_Id"/>
</EndProperty>
<EndProperty Name="Driver">
<ScalarProperty Name="Id" ColumnName="Drivers_Id"/>
</EndProperty>
</AssociationSetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2008/10/edmx">
<edmx:Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly"/>
</DesignerInfoPropertySet>
</edmx:Connection>
<edmx:Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true"/>
<DesignerProperty Name="EnablePluralization" Value="False"/>
<DesignerProperty Name="CodeGenerationStrategy" Value="None"/>
</DesignerInfoPropertySet>
</edmx:Options>
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram Name="Ef2PlaygroundModel_3">
<EntityTypeShape EntityType="Ef2PlaygroundModel_3.Car" Width="1.5" PointX="3.25" PointY="1.625" Height="1.787985026041667"/>
<EntityTypeShape EntityType="Ef2PlaygroundModel_3.Driver" Width="1.5" PointX="5.375" PointY="1.625" Height="1.59568359375"/>
<AssociationConnector Association="Ef2PlaygroundModel_3.CarDriver">
<ConnectorPoint PointX="4.75" PointY="2.422841796875"/>
<ConnectorPoint PointX="5.375" PointY="2.422841796875"/>
</AssociationConnector>
</Diagram>
</edmx:Diagrams>
</edmx:Designer>
</edmx:Edmx>
app.config:
<configuration>
<connectionStrings>
<add
name="Ef2PlaygroundModel_3Container"
connectionString="metadata=res://*/Ef2PlaygroundModel_3.csdl|res://*/Ef2PlaygroundModel_3.ssdl|res://*/Ef2PlaygroundModel_3.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SqlExpress;Initial Catalog=Ef2PlaygroundModel_3;Integrated Security=True;MultipleActiveResultSets=True""
providerName="System.Data.EntityClient"
/>
</connectionStrings>
</configuration>
Ef2PlaygroundModel_3Pocos.cs:
using System;
using System.Collections.Generic;
using System.Data.Objects;
namespace EF2_Playground
{
public class Car
{
public Car()
{
Drivers = new List<Driver>();
}
public int Id { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
public DateTime? ReleaseDate { get; set; }
public virtual List<Driver> Drivers { get; private set; }
}
public class Driver
{
public Driver()
{
Cars = new List<Car>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Car> Cars { get; private set; }
}
public class Ef2PlaygroundModel_3Container : ObjectContext
{
public Ef2PlaygroundModel_3Container()
: base("name=Ef2PlaygroundModel_3Container")
{
ContextOptions.LazyLoadingEnabled = true;
}
public IObjectSet<Car> Cars
{
get { return CreateObjectSet<Car>(); }
}
public IObjectSet<Driver> Drivers
{
get { return CreateObjectSet<Driver>(); }
}
}
}
Program.cs:
using System;
namespace EF2_Playground
{
class Program
{
static void Main(string[] args)
{
using (var ctx = new Ef2PlaygroundModel_3Container())
{
foreach (var driver in ctx.Drivers)
{
Console.WriteLine(driver.Name);
foreach (var car in driver.Cars)
{
Console.WriteLine(" drives a {0} - {1} (released on {2})", car.Brand, car.Model, car.ReleaseDate);
}
}
}
}
}
}
And finally Model1.edmx that breaks the whole thing as soon as i add it to the project:
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl" Namespace="Model1.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005">
<EntityContainer Name="Model1TargetContainer">
</EntityContainer>
</Schema>
</edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm" xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" Namespace="Model1" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation">
<EntityContainer Name="Model1Container" annotation:LazyLoadingEnabled="true">
</EntityContainer>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs" Space="C-S">
<Alias Key="Model" Value="Model1"/>
<Alias Key="Target" Value="Model1.Store"/>
<EntityContainerMapping CdmEntityContainer="Model1Container" StorageEntityContainer="Model1TargetContainer">
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2008/10/edmx">
<edmx:Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly"/>
</DesignerInfoPropertySet>
</edmx:Connection>
<edmx:Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true"/>
<DesignerProperty Name="EnablePluralization" Value="False"/>
</DesignerInfoPropertySet>
</edmx:Options>
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram Name="Model1"/>
</edmx:Diagrams>
</edmx:Designer>
</edmx:Edmx>
Ok, i guess i've got it. I reduced the second model (the one that brakes the project) to the following:
Class1.cs
using System.Data.Objects.DataClasses;
[assembly: EdmSchemaAttribute()]
Bang! The well known exception appears.
As in so many cases, reading the documentation helps:
Mapping POCO entities is not supported if any mapping attributes are applied to custom data classes, including EdmSchemaAttribute at the assembly level.
Sure, i do not literally add mapping attributes to CUSTOM data classes but that doesn't matter for the EdmSchemaAttribute since that one lives on the assembly level.
Adding the second non-POCO model causes code generation resulting in a class that contains (at least) the EdmSchemaAttribute and that is not supported.
What i've learned: Don't mix POCO and non-POCO models in one assembly.
My guess is that ef is lookig at the wrong model. Is there any chance that the models are using the same namespace? You can modify the CSDLs namespace in the property window. What happens if you modify the csdl namespace of the new, empty model?
In the properties of your *.edmx if you are using POCO, then you should set the CodeGenerationStrategy to none.