Search in sources :

Example 31 with DatabaseSessionImpl

use of org.eclipse.persistence.internal.sessions.DatabaseSessionImpl in project eclipselink by eclipse-ee4j.

the class QueryOperation method addValueObjectDescriptor.

protected void addValueObjectDescriptor(XRServiceAdapter xrService) {
    Session oxSession = xrService.getOXSession();
    XMLDescriptor descriptor = (XMLDescriptor) oxSession.getProject().getClassDescriptor(ValueObject.class);
    if (descriptor == null) {
        descriptor = new XMLDescriptor();
        descriptor.setAlias(VALUEOBJECT_STR);
        descriptor.setJavaClass(ValueObject.class);
        XMLDirectMapping mapping = new XMLDirectMapping();
        mapping.setAttributeName(VALUE_STR);
        mapping.setXPath(VALUE_STR);
        descriptor.addMapping(mapping);
        NamespaceResolver nr = new NamespaceResolver();
        descriptor.setNamespaceResolver(nr);
        oxSession.getProject().addDescriptor(descriptor);
        ((DatabaseSessionImpl) oxSession).initializeDescriptorIfSessionAlive(descriptor);
        xrService.getXMLContext().storeXMLDescriptorByQName(descriptor);
    }
}
Also used : XMLDescriptor(org.eclipse.persistence.oxm.XMLDescriptor) XMLDirectMapping(org.eclipse.persistence.oxm.mappings.XMLDirectMapping) DatabaseSessionImpl(org.eclipse.persistence.internal.sessions.DatabaseSessionImpl) NamespaceResolver(org.eclipse.persistence.oxm.NamespaceResolver) AbstractSession(org.eclipse.persistence.internal.sessions.AbstractSession) Session(org.eclipse.persistence.sessions.Session)

Example 32 with DatabaseSessionImpl

use of org.eclipse.persistence.internal.sessions.DatabaseSessionImpl in project eclipselink by eclipse-ee4j.

the class DistributedSystem method login.

/**
 * Return a connected session using the default login.
 */
@Override
public DatabaseSession login() {
    DatabaseSession session;
    session = new DatabaseSessionImpl(project);
    session.login();
    return session;
}
Also used : DatabaseSession(org.eclipse.persistence.sessions.DatabaseSession) DatabaseSessionImpl(org.eclipse.persistence.internal.sessions.DatabaseSessionImpl)

Example 33 with DatabaseSessionImpl

use of org.eclipse.persistence.internal.sessions.DatabaseSessionImpl in project eclipselink by eclipse-ee4j.

the class RMISessionBrokerRemoteModel method createTables.

public void createTables() {
    SessionBroker broker = new SessionBroker();
    DatabaseSession session1 = new DatabaseSessionImpl(Server.getLogin1());
    DatabaseSession session2 = new DatabaseSessionImpl(Server.getLogin2());
    session1.addDescriptors(new EmployeeProject1());
    session2.addDescriptors(new EmployeeProject2());
    broker.registerSession("broker1", session1);
    broker.registerSession("broker2", session2);
    broker.setLogLevel(getSession().getLogLevel());
    broker.setLog(getSession().getLog());
    broker.login();
    // Set session for join table.
    ((ManyToManyMapping) session1.getDescriptor(Employee.class).getObjectBuilder().getMappingForAttributeName("projects")).setSessionName("broker2");
    // Disable delete verify.
    ((OneToOneMapping) session1.getDescriptor(Employee.class).getObjectBuilder().getMappingForAttributeName("address")).setShouldVerifyDelete(false);
    org.eclipse.persistence.testing.models.employee.relational.EmployeeTableCreator tables = new org.eclipse.persistence.testing.models.employee.relational.EmployeeTableCreator();
    tables.replaceTables(session1);
    tables.replaceTables(session2);
    tables.dropConstraints(session1);
    tables.dropConstraints(session2);
    new SchemaManager(session1).createSequences();
    new SchemaManager(session2).createSequences();
    broker.logout();
}
Also used : ManyToManyMapping(org.eclipse.persistence.mappings.ManyToManyMapping) DatabaseSession(org.eclipse.persistence.sessions.DatabaseSession) SessionBroker(org.eclipse.persistence.sessions.broker.SessionBroker) SchemaManager(org.eclipse.persistence.tools.schemaframework.SchemaManager) Employee(org.eclipse.persistence.testing.models.employee.domain.Employee) DatabaseSessionImpl(org.eclipse.persistence.internal.sessions.DatabaseSessionImpl) OneToOneMapping(org.eclipse.persistence.mappings.OneToOneMapping)

Example 34 with DatabaseSessionImpl

use of org.eclipse.persistence.internal.sessions.DatabaseSessionImpl in project eclipselink by eclipse-ee4j.

the class RMIConnectionExceptionsTest method setup.

@Override
public void setup() throws Exception {
    Session session = new DatabaseSessionImpl();
    session.setProperty("TransporterGenerator", generator);
    RMIServerManagerController.start(session, getNameToBind(), "org.eclipse.persistence.testing.tests.remote.rmi.IIOP.RMIRemoteSessionControllerDispatcherForTestingExceptions");
    InitialContext initialNamingContext = new InitialContext();
    RMIServerManager serverManager = (RMIServerManager) initialNamingContext.lookup(getNameToBind());
    RMIConnection rmiConnection = new RMIConnection(serverManager.createRemoteSessionController());
    setRemoteConnection(rmiConnection);
}
Also used : DatabaseSessionImpl(org.eclipse.persistence.internal.sessions.DatabaseSessionImpl) RMIConnection(org.eclipse.persistence.sessions.remote.rmi.iiop.RMIConnection) InitialContext(javax.naming.InitialContext)

Example 35 with DatabaseSessionImpl

use of org.eclipse.persistence.internal.sessions.DatabaseSessionImpl in project eclipselink by eclipse-ee4j.

the class ProviderHelper method init.

@SuppressWarnings("unchecked")
public void init(ClassLoader parentClassLoader, ServletContext sc, boolean mtomEnabled) {
    this.parentClassLoader = parentClassLoader;
    this.mtomEnabled = mtomEnabled;
    InputStream xrServiceStream = initXRServiceStream(parentClassLoader, sc);
    DBWSModelProject xrServiceModelProject = new DBWSModelProject();
    XMLContext xmlContext = new XMLContext(xrServiceModelProject);
    XMLUnmarshaller unmarshaller = xmlContext.createUnmarshaller();
    XRServiceModel xrServiceModel;
    try {
        xrServiceModel = (XRServiceModel) unmarshaller.unmarshal(xrServiceStream);
    } catch (XMLMarshalException e) {
        // something went wrong parsing the eclipselink-dbws.xml - can't recover from that
        throw new WebServiceException(DBWSException.couldNotParseDBWSFile());
    } finally {
        try {
            xrServiceStream.close();
        } catch (IOException e) {
        // ignore
        }
    }
    xrSchemaStream = initXRSchemaStream(parentClassLoader, sc);
    try {
        // inherit xrService processing from XRServiceFactory
        buildService(xrServiceModel);
    } catch (Exception e) {
        // something went wrong building the service
        throw new WebServiceException(e);
    }
    // the xrService built by 'buildService' above is overridden to produce an
    // instance of DBWSAdapter (a sub-class of XRService)
    DBWSAdapter dbwsAdapter = (DBWSAdapter) xrService;
    // get inline schema from WSDL - has additional types for the operations
    try (InputStream wsdlInputStream = initWSDLInputStream(parentClassLoader, sc)) {
        StringWriter sw = new StringWriter();
        StreamSource wsdlStreamSource = new StreamSource(wsdlInputStream);
        Transformer t = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(MATCH_SCHEMA)));
        StreamResult streamResult = new StreamResult(sw);
        t.transform(wsdlStreamSource, streamResult);
        SchemaModelProject schemaProject = new SchemaModelProject();
        XMLContext xmlContext2 = new XMLContext(schemaProject);
        unmarshaller = xmlContext2.createUnmarshaller();
        Schema extendedSchema = (Schema) unmarshaller.unmarshal(new StringReader(sw.toString()));
        dbwsAdapter.setExtendedSchema(extendedSchema);
    } catch (IOException | TransformerException e) {
        // that's Ok, WSDL may not contain inline schema
        xmlContext.getSession().getSessionLog().log(SessionLog.FINE, SessionLog.DBWS, "dbws_no_wsdl_inline_schema", e.getLocalizedMessage());
    }
    // an Invocation needs a mapping for its parameters - use XMLAnyCollectionMapping +
    // custom AttributeAccessor
    // NB - this code is NOt in it own initNNN method, cannot be overridden
    String tns = dbwsAdapter.getExtendedSchema().getTargetNamespace();
    Project oxProject = dbwsAdapter.getOXSession().getProject();
    XMLDescriptor invocationDescriptor = new XMLDescriptor();
    invocationDescriptor.setJavaClass(Invocation.class);
    NamespaceResolver nr = new NamespaceResolver();
    invocationDescriptor.setNamespaceResolver(nr);
    nr.put(SERVICE_NAMESPACE_PREFIX, tns);
    nr.setDefaultNamespaceURI(tns);
    XMLAnyCollectionMapping parametersMapping = new XMLAnyCollectionMapping();
    parametersMapping.setAttributeName("parameters");
    parametersMapping.setAttributeAccessor(new AttributeAccessor() {

        Project oxProject;

        DBWSAdapter dbwsAdapter;

        @Override
        public Object getAttributeValueFromObject(Object object) {
            return ((Invocation) object).getParameters();
        }

        @Override
        public void setAttributeValueInObject(Object object, Object value) {
            Invocation invocation = (Invocation) object;
            Vector<Object> values = (Vector<Object>) value;
            for (Iterator<Object> i = values.iterator(); i.hasNext(); ) {
                /* scan through values:
                   *  if XML conforms to something mapped, it an object; else it is a DOM Element
                   *  (probably a scalar). Walk through operations for the types, converting
                   *   as required. The 'key' is the local name of the element - for mapped objects,
                   *   have to get the element name from the schema context for the object
                   */
                Object o = i.next();
                if (o instanceof Element) {
                    Element e = (Element) o;
                    String key = e.getLocalName();
                    if ("theInstance".equals(key)) {
                        NodeList nl = e.getChildNodes();
                        for (int j = 0; j < nl.getLength(); j++) {
                            Node n = nl.item(j);
                            if (n.getNodeType() == Node.ELEMENT_NODE) {
                                try {
                                    Object theInstance = dbwsAdapter.getXMLContext().createUnmarshaller().unmarshal(n);
                                    if (theInstance instanceof XMLRoot) {
                                        theInstance = ((XMLRoot) theInstance).getObject();
                                    }
                                    invocation.setParameter(key, theInstance);
                                    break;
                                } catch (XMLMarshalException xmlMarshallException) {
                                    throw new WebServiceException(xmlMarshallException);
                                }
                            }
                        }
                    } else {
                        ClassDescriptor desc = null;
                        for (ClassDescriptor xdesc : oxProject.getOrderedDescriptors()) {
                            XMLSchemaReference schemaReference = xdesc instanceof XMLDescriptor ? ((XMLDescriptor) xdesc).getSchemaReference() : null;
                            if (schemaReference != null && schemaReference.getSchemaContext().equalsIgnoreCase(key)) {
                                desc = xdesc;
                                break;
                            }
                        }
                        if (desc != null) {
                            try {
                                Object theObject = dbwsAdapter.getXMLContext().createUnmarshaller().unmarshal(e, desc.getJavaClass());
                                if (theObject instanceof XMLRoot) {
                                    theObject = ((XMLRoot) theObject).getObject();
                                }
                                invocation.setParameter(key, theObject);
                            } catch (XMLMarshalException xmlMarshallException) {
                                throw new WebServiceException(xmlMarshallException);
                            }
                        } else {
                            String serviceName = e.getParentNode().getLocalName();
                            boolean found = false;
                            for (Operation op : dbwsAdapter.getOperationsList()) {
                                if (op.getName().equals(serviceName)) {
                                    for (Parameter p : op.getParameters()) {
                                        if (p.getName().equals(key)) {
                                            desc = dbwsAdapter.getDescriptorsByQName().get(p.getType());
                                            if (desc != null) {
                                                found = true;
                                            }
                                            break;
                                        }
                                    }
                                }
                                if (found) {
                                    break;
                                }
                            }
                            if (found) {
                                Object theObject = dbwsAdapter.getXMLContext().createUnmarshaller().unmarshal(e, desc.getJavaClass());
                                if (theObject instanceof XMLRoot) {
                                    theObject = ((XMLRoot) theObject).getObject();
                                }
                                invocation.setParameter(key, theObject);
                            } else {
                                // cant use e.getTextContent() - some DOM impls dont support it :-(
                                // String val = e.getTextContent();
                                StringBuilder sb = new StringBuilder();
                                NodeList childNodes = e.getChildNodes();
                                for (int idx = 0; idx < childNodes.getLength(); idx++) {
                                    if (childNodes.item(idx).getNodeType() == Node.TEXT_NODE) {
                                        sb.append(childNodes.item(idx).getNodeValue());
                                    }
                                }
                                invocation.setParameter(key, sb.toString());
                            }
                        }
                    }
                } else {
                    XMLDescriptor descriptor = (XMLDescriptor) oxProject.getDescriptor(o.getClass());
                    String key = descriptor.getDefaultRootElement();
                    int idx = key.indexOf(':');
                    if (idx != -1) {
                        key = key.substring(idx + 1);
                    }
                    invocation.setParameter(key, o);
                }
            }
        }

        public AttributeAccessor setProjectAndAdapter(Project oxProject, DBWSAdapter dbwsAdapter) {
            this.oxProject = oxProject;
            this.dbwsAdapter = dbwsAdapter;
            return this;
        }
    }.setProjectAndAdapter(oxProject, dbwsAdapter));
    parametersMapping.setKeepAsElementPolicy(KEEP_UNKNOWN_AS_ELEMENT);
    invocationDescriptor.addMapping(parametersMapping);
    oxProject.addDescriptor(invocationDescriptor);
    ((DatabaseSessionImpl) dbwsAdapter.getOXSession()).initializeDescriptorIfSessionAlive(invocationDescriptor);
    dbwsAdapter.getXMLContext().storeXMLDescriptorByQName(invocationDescriptor);
    // create SOAP message response handler of appropriate version
    responseWriter = new SOAPResponseWriter(dbwsAdapter);
    responseWriter.initialize();
}
Also used : Transformer(javax.xml.transform.Transformer) Invocation(org.eclipse.persistence.internal.xr.Invocation) ClassDescriptor(org.eclipse.persistence.descriptors.ClassDescriptor) Schema(org.eclipse.persistence.internal.oxm.schema.model.Schema) SOAPElement(jakarta.xml.soap.SOAPElement) Element(org.w3c.dom.Element) SOAPBodyElement(jakarta.xml.soap.SOAPBodyElement) Node(org.w3c.dom.Node) Operation(org.eclipse.persistence.internal.xr.Operation) DBWSModelProject(org.eclipse.persistence.dbws.DBWSModelProject) XMLDescriptor(org.eclipse.persistence.oxm.XMLDescriptor) StringWriter(java.io.StringWriter) StringReader(java.io.StringReader) XMLUnmarshaller(org.eclipse.persistence.oxm.XMLUnmarshaller) Vector(java.util.Vector) TransformerException(javax.xml.transform.TransformerException) WebServiceException(jakarta.xml.ws.WebServiceException) StreamResult(javax.xml.transform.stream.StreamResult) XMLContext(org.eclipse.persistence.oxm.XMLContext) SchemaModelProject(org.eclipse.persistence.internal.oxm.schema.SchemaModelProject) InputStream(java.io.InputStream) XMLAnyCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLAnyCollectionMapping) XMLRoot(org.eclipse.persistence.oxm.XMLRoot) StreamSource(javax.xml.transform.stream.StreamSource) NodeList(org.w3c.dom.NodeList) IOException(java.io.IOException) SOAPException(jakarta.xml.soap.SOAPException) XMLMarshalException(org.eclipse.persistence.exceptions.XMLMarshalException) SOAPFaultException(jakarta.xml.ws.soap.SOAPFaultException) WebServiceException(jakarta.xml.ws.WebServiceException) TransformerException(javax.xml.transform.TransformerException) IOException(java.io.IOException) DBWSException(org.eclipse.persistence.exceptions.DBWSException) Project(org.eclipse.persistence.sessions.Project) SchemaModelProject(org.eclipse.persistence.internal.oxm.schema.SchemaModelProject) DBWSModelProject(org.eclipse.persistence.dbws.DBWSModelProject) XMLSchemaReference(org.eclipse.persistence.oxm.schema.XMLSchemaReference) DatabaseSessionImpl(org.eclipse.persistence.internal.sessions.DatabaseSessionImpl) XRServiceModel(org.eclipse.persistence.internal.xr.XRServiceModel) NamespaceResolver(org.eclipse.persistence.oxm.NamespaceResolver) Parameter(org.eclipse.persistence.internal.xr.Parameter) ValueObject(org.eclipse.persistence.internal.xr.ValueObject) XMLMarshalException(org.eclipse.persistence.exceptions.XMLMarshalException) AttributeAccessor(org.eclipse.persistence.mappings.AttributeAccessor)

Aggregations

DatabaseSessionImpl (org.eclipse.persistence.internal.sessions.DatabaseSessionImpl)64 ClassDescriptor (org.eclipse.persistence.descriptors.ClassDescriptor)18 EntityManager (jakarta.persistence.EntityManager)15 HashMap (java.util.HashMap)14 DatabaseSession (org.eclipse.persistence.sessions.DatabaseSession)14 Map (java.util.Map)13 DatabaseLogin (org.eclipse.persistence.sessions.DatabaseLogin)13 Project (org.eclipse.persistence.sessions.Project)12 StringReader (java.io.StringReader)9 StreamSource (javax.xml.transform.stream.StreamSource)9 Platform (org.eclipse.persistence.internal.databaseaccess.Platform)9 MetadataProcessor (org.eclipse.persistence.internal.jpa.metadata.MetadataProcessor)9 AbstractSession (org.eclipse.persistence.internal.sessions.AbstractSession)9 XMLContext (org.eclipse.persistence.oxm.XMLContext)9 DatasourceLogin (org.eclipse.persistence.sessions.DatasourceLogin)9 JAXBContext (jakarta.xml.bind.JAXBContext)8 JAXBException (jakarta.xml.bind.JAXBException)8 Unmarshaller (jakarta.xml.bind.Unmarshaller)8 ConversionManager (org.eclipse.persistence.internal.helper.ConversionManager)8 XRDynamicClassLoader (org.eclipse.persistence.internal.xr.XRDynamicClassLoader)8