openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pinaki Poddar (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-1851) RESTful access to Persistence Unit runtime
Date Mon, 25 Oct 2010 21:52:21 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-1851?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12924743#action_12924743
] 

Pinaki Poddar commented on OPENJPA-1851:
----------------------------------------

The proposed XML schema for Java instances serialized on-the-wire

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
	license agreements. See the NOTICE file distributed with this work for additional 
	information regarding copyright ownership. The ASF licenses this file to 
	you under the Apache License, Version 2.0 (the "License"); you may not use 
	this file except in compliance with the License. You may obtain a copy of 
	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
	by applicable law or agreed to in writing, software distributed under the 
	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
	OF ANY KIND, either express or implied. See the License for the specific 
	language governing permissions and limitations under the License. -->
<!-- ========================================================================= -->
<!-- Schema for serialized persistence instance.                                      
                                                   -->
<!-- ========================================================================= -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	attributeFormDefault="unqualified" elementFormDefault="qualified"
	version="1.0">

	<xsd:annotation>
		<xsd:documentation><![CDATA[
         Describes closure of managed persistence instance.
         Each instance is described by all its loaded persistent attribute.
         The related instances are resolved within the document root.
         Document root represents zero or more instances. 
          
         The file must be named "META-INF/jest-instance.xsd".
         ]]>
		</xsd:documentation>
	</xsd:annotation>

    <!-- The root element of the document contains zero or more instances -->
	<xsd:element name="instances">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="instance" maxOccurs="unbounded" type="instance-type" />
			</xsd:sequence>
			<xsd:attribute name="version" type="xsd:string" />
		</xsd:complexType>
	</xsd:element>

	<!-- The root element for a single instance -->
	<xsd:complexType name="instance-type">
		<xsd:sequence>
			<xsd:element name="basic"          type="basic-attr-type"       minOccurs="0" maxOccurs="unbounded"
/>
			<xsd:element name="lob"               type="lob-attr-type"           minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="embedded" type="instance-type"         minOccurs="0" maxOccurs="unbounded"
/>
			<xsd:element name="singular"      type="singular-attr-type"  	minOccurs="0" maxOccurs="unbounded"
/>
			<xsd:element name="collection"   type="collection-attr-type"	minOccurs="0" maxOccurs="unbounded"
/>
			<xsd:element name="map"            type="map-attr-type"          minOccurs="0" maxOccurs="unbounded"
/>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID" use="required" />
	</xsd:complexType>

	<!-- A reference to another instance within the same(?) document -->
	<xsd:complexType name="ref-type">
		<xsd:attribute name="id" type="xsd:IDREF" />
	</xsd:complexType>
	
	<!-- A null reference                                            -->
	<xsd:complexType name="ref-null">
	</xsd:complexType>

	<!-- Basic Attribute has a name and its runtime type   -->
	<!-- non-null value appears as text content.           -->
	<!-- null value appears as attribute with empty text . -->
	<xsd:complexType name="basic-attr-type">
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute name="name" type="xsd:string" use="required" />
				<xsd:attribute name="type"   type="xsd:string" use="required" />
				<xsd:attribute name="null"    type="xsd:boolean" />
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	
	<!-- Large Binary Objects (LOB) represented as hex array -->
	<xsd:complexType name="lob-attr-type">
		<xsd:simpleContent>
			<xsd:extension base="xsd:hexBinary">
				<xsd:attribute name="name" type="xsd:string" use="required" />
				<xsd:attribute name="type"    type="xsd:string" use="required" />
				<xsd:attribute name="null"      type="xsd:boolean" />
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>

	<!-- Singular attribute can be a reference or another instance. -->
	<xsd:complexType name="singular-attr-type">
		<xsd:choice>
			<xsd:element name="null" type="ref-null" />
			<xsd:element name="ref"  type="ref-type" />
			<xsd:element name="instance" type="instance-type" />
		</xsd:choice>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="type"    type="xsd:string" use="required" />
	</xsd:complexType>

	<!-- Collection attributes list their members with their runtime type -->
	<!-- Members can be basic or other managed instance                   -->
	<xsd:complexType name="collection-attr-type">
		<xsd:sequence>
			<xsd:element name="member" type="member-type" minOccurs="0"
				maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="type"    type="xsd:string" use="required" />
		<xsd:attribute name="member-type" type="xsd:string" use="required" />
	</xsd:complexType>

	<!-- Map attributes list their entries with runtime type of key and value    -->
	<!-- Both key and value can be independently basic or other managed instance -->
	<xsd:complexType name="map-attr-type">
		<xsd:sequence>
			<xsd:element name="entry" type="entry-type" />
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="type" type="xsd:string" use="required" />
		<xsd:attribute name="key-type" type="xsd:string" use="required" />
		<xsd:attribute name="value-type" type="xsd:string" use="required" />
	</xsd:complexType>

	<!-- Value of a member of basic type. -->
	<xsd:complexType name="basic-value-type">
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute name="null" type="xsd:boolean" />
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>

	<!-- Value of a member of a collection/map -->
	<xsd:complexType name="member-type">
		<xsd:choice>
			<xsd:element name="basic" type="basic-value-type" />
			<xsd:element name="instance" type="instance-type" />
			<xsd:element name="null" type="ref-null" />
			<xsd:element name="ref" type="ref-type" />
		</xsd:choice>
	</xsd:complexType>

	<!-- Denotes entry of a map element -->
	<xsd:complexType name="entry-type">
		<xsd:sequence>
			<xsd:element name="key"   type="member-type" minOccurs="1" maxOccurs="1" />
			<xsd:element name="value" type="member-type" minOccurs="1" maxOccurs="1"  />
		</xsd:sequence>
	</xsd:complexType>
	
</xsd:schema>

and here is a typical example of a Person with a singular reference to another Person (spouse)
and multi-valued relation to Persons (friends)


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<instances xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xsi:noNamespaceSchemaLocation="jest-instance.xsd">
  <instance id="Person-1288026511796">
    <basic name="ssn" type="long">1288026511796</basic>
    <basic name="age" type="int">20</basic>
    <basic name="name" type="String">P1</basic>
    <singular name="spouse" type="Person">
      <instance id="Person-1288026511797">
        <basic name="ssn" type="long">1288026511797</basic>
        <basic name="age" type="int">20</basic>
        <basic name="name" type="String">P2</basic>
        <singular name="spouse" type="Person">
          <ref id="Person-1288026511796"/>
        </singular>
        <collection member-type="Person" name="friends" type="List">
          <member>
            <ref id="Person-1288026511796"/>
          </member>
        </collection>
      </instance>
    </singular>
    <collection member-type="Person" name="friends" type="List">
      <member>
        <ref id="Person-1288026511797"/>
      </member>
      <member>
        <instance id="Person-1288026511798">
          <basic name="ssn" type="long">1288026511798</basic>
          <basic name="age" type="int">20</basic>
          <basic name="name" type="String">P3</basic>
          <singular name="spouse" type="Person">
            <null/>
          </singular>
          <collection member-type="Person" name="friends" type="List">
            <member>
              <ref id="Person-1288026511798"/>
            </member>
          </collection>
        </instance>
      </member>
    </collection>
  </instance>
</instances>

1. The object references are of the format <type>-<ior>
    where <type> is the simple name of the type and ior is a string representation of
its primary key (we need a syntax for complex identity)
2. The type names are simple name (if unambiguous in the given persistence unit)

> RESTful access to Persistence Unit runtime 
> -------------------------------------------
>
>                 Key: OPENJPA-1851
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1851
>             Project: OpenJPA
>          Issue Type: New Feature
>          Components: competitive, jpa, usability
>            Reporter: Pinaki Poddar
>            Assignee: Pinaki Poddar
>
> A persistence unit should provide access to a remote, non-Java client in a RESTful fashion.
> The communication protocol should be HTTP.
> The 'safe' operations (HTTP GET for find, query, properties, metamodel browsing etc)
can be encoded in URI syntax itself. 
> The state representation would start with schema-less  XML, followed by schema-compliant
XML and JSON
> The POST/PUT operations and transactions will be addressed in a separate task.
>  

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message