2013-08-23 3 views
4

У меня есть мое веб-приложение Tapestry, которое предлагает полную функциональность CRUD для некоторого набора данных. До сих пор я использовал mocks для разработки и тестирования.Как использовать службы OSGi в Tapestry

Однако мне нужно заменить этот макет службой OSGi (с Felix).

Мои основные вопросы/вопросы:

  1. мне нужно вводить службу OSGi в мое приложение гобелен, и если да, то как сделать его?
  2. Предполагая, что он введен, существуют ли какие-либо методы его использования? Какие-то особые способы я должен назвать методами или что-то в этом роде?
  3. Нужно ли мне что-то делать с ним после того, как я вызвал методы, которые мне нужны, или это делается автоматически?
  4. мне нужно беспокоиться о HttpService ли (я посмотрел несколько жалоб по этому поводу, но не совсем понимаю)

Чтобы предоставить Вам некоторый контекст, это то, как я делаю это сейчас

public class MyPage { 
    ... 
    @Inject 
    private MyDao dao; 
    ... 
    @Property 
    private List<Entry> entries; 
    ... 
    void onPrepareForRender() { 
     ... 
     this.entries = this.dao.getAll() 
     ... 
    } 
    ... 
} 

То, что я хотел бы, чтобы заменить MyDao dao с сервисом OSGi, который обеспечивает ту же функциональность, так что я могу использовать его в onPrepareForRender способом, например.

Я могу с уверенностью предположить, что пакет OSGi, связанный с сервисом, уже будет запущен.

Остальная часть приложения выполнена в виде приложения OSGi. Я добавил/изменил материал в моем pom.xml (maven-bundle-plugin, добавил некоторые манифестные записи, как указано в http://www.javabeat.net/2011/11/writing-an-osgi-web-application/).

Однако все еще не работает.

Я пытаюсь преобразовать свою ВОЙНУ в WAB, кстати.

Спасибо заранее :)

EDIT: Проблема при преобразовании и развертывание из WAR в WAB

Когда я пакет моего веб-приложение, как war материал отлично работает. Тем не менее, когда я упаковать его как bundle, и попытаться развернуть его в GlassFish, я получаю следующее сообщение об ошибке: Произошла

Ошибки во время развертывания: Там нет установленного контейнера способен обрабатывать это приложение админы-войну. Пожалуйста, обратитесь к server.log для получения более подробной информации.

Когда я иду в Server.log, вот что он говорит:

[#|2013-08-27T17:11:57.600+0200|INFO|glassfish3.1.2|org.glassfish.admingui|_ThreadID=28;_ThreadName=Thread-2;|uploadFileName=admin-war-2.01-SNAPSHOT.jar|#] 

[#|2013-08-27T17:11:57.920+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:57.939+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=33;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:57.972+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:57.973+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:57.974+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:57.990+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:57.991+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:58.006+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:58.008+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:58.008+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:58.024+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:58.025+0200|WARNING|glassfish3.1.2|javax.enterprise.system.tools.deployment.com.sun.enterprise.deploy.shared|_ThreadID=29;_ThreadName=Thread-2;|DPL8031: Ignoring WEB-INF/ because the containing archive C:\glassfish3\glassfish\domains\domain1\applications\admin-war recorded it as a pre-existing stale file|#] 

[#|2013-08-27T17:11:58.026+0200|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=29;_ThreadName=Thread-2;|Module type not recognized for module C:\glassfish3\glassfish\domains\domain1\applications\admin-war|#] 

[#|2013-08-27T17:11:58.026+0200|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=29;_ThreadName=Thread-2;|There is no installed container capable of handling this application admin-war|#] 

[#|2013-08-27T17:11:58.087+0200|INFO|glassfish3.1.2|org.glassfish.admingui|_ThreadID=28;_ThreadName=Thread-2;|Exception Occurred :Error occurred during deployment: There is no installed container capable of handling this application admin-war. Please see server.log for more details.|#] 
+1

__Я могу с уверенностью предположить, что пакет OSGi, связанный с сервисом, уже будет запущен .__ Вау! Магия! Сделано невозможное! :-) –

+0

Ну, вот что они меня заверили: P – Lopina

+0

Ahh, тогда у меня есть хороший мост для продажи, хорошая недвижимость, расположенная в Нью-Йорке. Действительно дешево. :-) –

ответ

2

Я не знаком с OSGI, но вам нужно будет использовать сборку * методы в вашем AppModule, чтобы обеспечить DAO-х , В моем примере ниже я предположил, что OsgiBundle - это способ доступа к службам OSGI, я понятия не имею, что называется фактическим классом OSGI.

например:

public class MyAppModule { 
    public void contributeApplicationDefaults(MappedConfiguration<String, String> config) { 
     config.add("osgi.path", "path/to/osgi.xml"); 
    } 

    public OsgiBundle buildOsgiBundle(@Symbol("osgi.path") String osgiPath) { 
     // lookup the OSGI bundle somehow 
    } 

    public MyDao buildMyDao(OsgiBundle osgiBundle) { 
     return osgiBundle.getService(MyDao.class); 
    } 

    public SomeOtherDao buildSomeOtherDao(OsgiBundle osgiBundle) { 
     return osgiBundle.getService(SomeOtherDao.class); 
    } 
} 

Если вы хотите более глубокой интеграции (т.е. автоматически публиковать все услуги OSGi как услуги Гобелен МОК), то посмотрите на TapestrySpringFilter, который публикует все пружинные бобы как услуги Гобелен МОК.

+0

Я попробую тогда :) BTW, это уже третий раз, когда я вижу, что вы отвечаете на мои вопросы о Гобелене :) Thx для усилий :) – Lopina

 Смежные вопросы

  • Нет связанных вопросов^_^