Как разработать с использованием SCA и OSGI на Java Eclipse

Я пытаюсь узнать, как разрабатывать с использованием Tuscany вместе с пакетами OSGi, которые будут использоваться в качестве реализации компонентов SCA. Я использую Java на IDE затмения. Я пытался найти онлайн-учебник, чтобы начать, но я не получил никого.

Я нашел здесь одну ссылку http://tuscany.apache.org/sca-java-implementationosgi.html которая помогает в общей идее, но не дает подробностей. Я решил попробовать без учебника, и я что-то сделал, но это не сработало, и я получил ошибки.

Итак, вот что я сделал: я создал пакет, который содержит следующий интерфейс:

package com.javaworld.sample.service;

import org.osoa.sca.annotations.Remotable;

@Remotable
public interface HelloService {
    public String sayHello();
}  

Реализация интерфейса работает отлично, и я проверил этот проект в одиночку без Тосканы.

Теперь вот файл MANIFEST этого пакета:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: HelloService
Bundle-SymbolicName: com.javaworld.sample.HelloService
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.javaworld.sample.service.impl.HelloServiceActivator
Bundle-Vendor: JAVAWORLD
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: org.osgi.framework;version="1.3.0"
Export-Package: com.javaworld.sample.service

В отдельном проекте у меня есть несколько компонентов, созданных как SCA, и это мой составной файл с именем store.composite,

<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
    xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
    xmlns:s="http://store" 
    targetNamespace="http://store" 
    name="store">

    <component name="store">
        <t:implementation.widget location="ufservices/store.html" />
        <service name="Widget">
            <t:binding.http uri="http://localhost:8080/store" />
        </service>
        <reference name="catalog" target="Catalog">
            <t:binding.jsonrpc />
        </reference>
        <reference name="shoppingCart" target="ShoppingCart/Cart">
            <t:binding.atom />
        </reference>
        <reference name="shoppingTotal" target="ShoppingCart/Total">
            <t:binding.jsonrpc />
        </reference>
       <reference name="hellowService" target="HelloWorldService">
            <t:binding.jsonrpc />
        </reference>
    </component>

    <component name="Catalog">
        <implementation.java class="services.CatalogImpl" />
        <property name="currencyCode">USD</property>
        <service name="Catalog">
            <t:binding.jsonrpc uri="http://localhost:8080/Catalog"/>
        </service>
        <reference name="currencyConverter" target="CurrencyConverter" />
    </component>

    <component name="ShoppingCart">
        <implementation.java class="services.ShoppingCartImpl" />
        <service name="Cart">
            <t:binding.atom uri="http://localhost:8080/ShoppingCart/Cart" />
        </service>
        <service name="Total">
            <t:binding.jsonrpc uri="http://localhost:8080/Total"/>
        </service>
    </component>

    <component name="CurrencyConverter">
        <implementation.java class="services.CurrencyConverterImpl" />
    </component>

    <component name="HelloWorldService">
        <implementation.osgi xmlns=http://tuscany.apache.org/xmlns/sca/1.0
             bundleSymbolicName="com.javaworld.sample.HelloService"                         
             bundleVersion="1.0.0.qualifier">
        </implementation.osgi>
      </component>
</composite>

В конце этого файла вы можете увидеть, что я создал компонент, который ссылается на реализацию osgi пакета HelloWorldService.

Ниже часть моего магазина компонента, который является HTML-файлом:

<html>
<head>
<title>Store</title>

<script type="text/javascript" src="store.js"></script>

<script language="JavaScript">

    //@Reference
    var hellowService= new tuscany.sca.Reference("hellowService");

    function displayHellowService()
    {
     var h= hellowService.sayHello();
    alert(h);

    }


</script>

</head>

<body>
<h1>Store</h1>
  <div id="store">

    <form name="shoppingCartForm">

        <input type="button" id="button1" onclick="displayHellowService()"/>
    </form>    
  </div>
</body>
</html>

У меня также есть файл запуска Java, который содержит основной метод и создает все это. Наконец, ниже приведены ошибки, которые я получаю при запуске проекта.

SEVERE: ContributionReadException occured due to : org.xml.sax.SAXParseException; lineNumber: 51; columnNumber: 36; Open quote is expected for attribute "xmlns" associated with an  element type  "implementation.osgi".
يول 14, 2013 1:37:52 ص org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor
SEVERE: ContributionReadException occured due to : com.ctc.wstx.exc.WstxIOException: Stream closed
Exception in thread "main" org.osoa.sca.ServiceRuntimeException: org.apache.tuscany.sca.contribution.service.ContributionException: org.apache.tuscany.sca.contribution.service.ContributionReadException: com.ctc.wstx.exc.WstxIOException: Stream closed
    at org.apache.tuscany.sca.node.impl.NodeImpl.<init>(NodeImpl.java:204)
    at org.apache.tuscany.sca.node.impl.NodeFactoryImpl.createSCANodeFromClassLoader(NodeFactoryImpl.java:37)
    at org.apache.tuscany.sca.host.embedded.impl.DefaultSCADomain.init(DefaultSCADomain.java:178)
    at org.apache.tuscany.sca.host.embedded.impl.DefaultSCADomain.<init>(DefaultSCADomain.java:100)
    at org.apache.tuscany.sca.host.embedded.SCADomain.createNewInstance(SCADomain.java:182)
    at org.apache.tuscany.sca.host.embedded.SCADomain.newInstance(SCADomain.java:63)
    at launch.Launch.main(Launch.java:8)
Caused by: org.apache.tuscany.sca.contribution.service.ContributionException: org.apache.tuscany.sca.contribution.service.ContributionReadException: com.ctc.wstx.exc.WstxIOException: Stream closed
    at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.addContribution(ContributionServiceImpl.java:421)
    at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.contribute(ContributionServiceImpl.java:198)
    at org.apache.tuscany.sca.node.impl.NodeImpl.configureNode(NodeImpl.java:524)
    at org.apache.tuscany.sca.node.impl.NodeImpl.<init>(NodeImpl.java:200)
    ... 6 more
Caused by: org.apache.tuscany.sca.contribution.service.ContributionReadException: com.ctc.wstx.exc.WstxIOException: Stream closed
    at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:214)
    at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:137)
    at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:59)
    at org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor.read(ExtensibleURLArtifactProcessor.java:96)
    at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.processReadPhase(ContributionServiceImpl.java:587)
    at org.apache.tuscany.sca.contribution.service.impl.ContributionServiceImpl.addContribution(ContributionServiceImpl.java:419)
    ... 9 more
Caused by: com.ctc.wstx.exc.WstxIOException: Stream closed
    at com.ctc.wstx.stax.WstxInputFactory.doCreateSR(WstxInputFactory.java:548)
    at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:604)
    at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:619)
    at com.ctc.wstx.stax.WstxInputFactory.createXMLStreamReader(WstxInputFactory.java:317)
    at org.apache.tuscany.sca.contribution.processor.DefaultValidatingXMLInputFactory.createXMLStreamReader(DefaultValidatingXMLInputFactory.java:226)
    at org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor.read(CompositeDocumentProcessor.java:181)
    ... 14 more
Caused by: java.io.IOException: Stream closed
    at java.io.BufferedInputStream.getBufIfOpen(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at com.ctc.wstx.io.StreamBootstrapper.ensureLoaded(StreamBootstrapper.java:443)
    at com.ctc.wstx.io.StreamBootstrapper.resolveStreamEncoding(StreamBootstrapper.java:267)
    at com.ctc.wstx.io.StreamBootstrapper.bootstrapInput(StreamBootstrapper.java:131)
    at com.ctc.wstx.stax.WstxInputFactory.doCreateSR(WstxInputFactory.java:543)
    ... 19 more

Может кто-нибудь дать мне руководство к учебнику или помочь мне решить проблему. Благодарю.

2 ответа

У вас есть ошибки синтаксиса XML здесь:

  <component name="HelloWorldService">
    <implementation.osgi xmlns=http://tuscany.apache.org/xmlns/sca/1.0
         bundleSymbolicName="com.javaworld.sample.HelloService"                         
         bundleVersion="1.0.0.qualifier">
    </implementation.osgi>
  </component>

В противном случае я не могу вам помочь, но SEVERE: ContributionReadException произошла из-за: org.xml.sax.SAXParseException; номер строки: 51; номер столбца: 36; Ожидается открытая кавычка для атрибута "xmlns", связанного с типом элемента "creation.osgi".

это просто проблемы разбора XML. Вы можете определить это по SAXParseException, SAX - это простой API для XML.

Проблема в том, что вы объявляете пространство имен XML без кавычек, измените его на:

<implementation.osgi xmlns="http://tuscany.apache.org/xmlns/sca/1.0" />

Обратите внимание, что пространство имен заключено в кавычки ("")

Кроме того, позвольте мне указать вам на этот учебник. Несмотря на то, что он предназначен для Rational Application Developer, код также будет работать

http://pic.dhe.ibm.com/infocenter/radhelp/v9/topic/com.ibm.sca.tools.doc/tutorials/osgi/sca_osgi_abstract.html

Надеюсь это поможет.

Другие вопросы по тегам