Category Archive: Seam framework

RESTful веб-сервис в Seam Framework

Seam Framework уже включает в себя реализацию спецификации JAX-RS под названием RESTEasy. В библиотеках Seam вы можете увидеть три jar-файла, относящихся к RESTEasy:
  • jaxrs-api.jar
  • resteasy-jaxrs.jar
  • jboss-seam-resteasy.jar
Настройка В вашем проекте найдите и откройте файл components.xml. К корневому элементу components добавьте следующее пространство имен:
xmlns:resteasy="http://jboss.com/products/seam/resteasy"
Также необходимо добавить объявление префикса:

В нашем случае префикс будет restv1. Префикс обычно используется для версионности. Вид components.xml после внесения наших изменений:


            ....
            

Объявим наш класс, который будет обрабатывать REST-запросы:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
@Path("/ttt")
public class Test {
    @GET
    public Response echo(){
        String msg = "Hello, World!!!";
        System.out.println(msg);
        return Response.status(200).entity(msg).build();
    }
}
Что делает этот класс? По пути /ttt принимает GET-запрос и выводит сообщение "Hello, World!!!" в лог и возвращает его же в качестве ответа. Сервис доступен по адресу: http://<Сервер>:<Порт>/<Имя веб-приложения>/seam/resource/restv1/ttt Если ввести в браузер этот адрес, то в лог и в браузер будет выведено сообщение: "Hello, World!!!" Более полную информацию смотрите в документации к Seam Framework: 24.4. RESTful HTTP webservices with RESTEasy

Шаблоны для построения интерфейса на Seam Framework 2.2.0 с использоватеним RichFaces 3.3.3

template.xhtml - шаблон, который будут использовать другие страницы





    
    #{interface['system.name']}
    
    
    







Страница, использующая шаблон




    
        
            #{interface['page.name']}
            
            
                
            
        
    


Вывод таблицы




Вывод таблицы постранично

	
		
	
	
		
	
	
		
	
	
		
	
	
		
	
	
		
	






Вывод сообщения о том, что в таблице нет записей

	

Два JBoss 4.2.2 на одном сервере

Опишу сначала ситуацию: Два приложения на Seam Framework (два war-ника) нужно было запустить на одном сервере, но т.к. в приложениях многие seam-компоненты, которые были созданы, имели одинаковые имена, был конфликт. Можно, конечно, добиться уникальности названий компонентов, но это нужно переписать кучу кода и в дальнейшем следить за уникальностью названий в обоих приложениях. Я пошел по этому пути, и приложения запускались и работал без ошибок, но при работе с сервисами возникли проблемы, т.к. jboss путался в компонентах. Тогда пришло решение запустить приложения на разных jboss'ах. Запустить два jboss'а на одном сервере относительно просто: нужно добиться того, чтобы jboss'ы не использовали одинаковые порты, а этих портов не мало. И чтобы не путаться в портах, к портам одного их jboss'ов можно добавлять единичку. Это выглядит так: 8009 -> 18009, 1099 -> 11099, 1098 -> 11098 и т.д. Я делал следующим образом: запускал один jboss, после его полной загрузки запускал второй и смотрел какие порты конфликтуют, заменял эти порты, потом еще раз перезапускал второй jboss до тех пор, пока второй jboss стартовал без конфликтов портов. Ниже приведу список файлом и замен портов (конфигурация default):
bin\run.bat 8787 -> 18787
server\default\conf\jboss-service.xml 8083 -> 18083 1099 -> 11099 1098 -> 11098 4444 -> 14444 4445 -> 14445 4446 -> 14446
server\default\deploy\ejb3.deployer\META-INF\jboss-service.xml 3873 -> 13873 (этот порт встречается дважды в файле)
server\default\deploy\jboss-web.deployer\server.xml 8080 -> 8085 (порты через, которые будет работать web) 443 -> 1443 5443 -> 15443 8009 -> 18009
server\default\deploy\jms\uil2-service.xml 8093 -> 18093
Также нужно учесть, что теперь debug первого приложения будет по порту 8787, а второго по порту 18787.