Jetty 嵌入式防波堤,带球衣或resteasy
我希望使用带有JAX-RS的嵌入式jetty(resteasy或jersey)来创建RESTful服务。 我正在尝试使用maven/eclipse设置创建。 若我尝试跟随链接,我无法解决来自Jetty 嵌入式防波堤,带球衣或resteasy,jetty,jersey,resteasy,Jetty,Jersey,Resteasy,我希望使用带有JAX-RS的嵌入式jetty(resteasy或jersey)来创建RESTful服务。 我正在尝试使用maven/eclipse设置创建。 若我尝试跟随链接,我无法解决来自ServletHolder sh=newservletholder(ServletContainer.class)的错误 即使这样也不行。 有人能给我推荐一些东西/教程/例子吗?嗯,链接页面很古老-上次更新是在3年前 你真的需要码头吗?Jersey与Grizzly(请参阅)的集成经过了充分的测试,这也是Gla
ServletHolder sh=newservletholder(ServletContainer.class)的错误代码>
即使这样也不行。
有人能给我推荐一些东西/教程/例子吗?嗯,链接页面很古老-上次更新是在3年前
你真的需要码头吗?Jersey与Grizzly(请参阅)的集成经过了充分的测试,这也是Glassfish的传输层,可以在您的示例中使用它
请参阅Jersey workspace中的helloworld示例,com.sun.Jersey.samples.helloworld.Main类启动Grizzly并“部署”helloworld应用程序:
如果你真的需要基于码头的样品,我想我应该能够提供它(请随时与我联系)
编辑:
好的,如果你真的想要jetty,你可以拥有它:),看起来它相当简单。我按照来自的说明启动了helloworld示例:
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
Context root = new Context(server,"/",Context.SESSIONS);
root.addServlet(new ServletHolder(new ServletContainer(new PackagesResourceConfig("com.sun.jersey.samples.helloworld"))), "/");
server.start();
}
可以访问。我使用了Jetty 6.1.16。希望有帮助
您可以在《用户指南》中找到有关在servlet环境中配置Jersey的更多信息,请参阅
编辑:
依赖项。。但这很难具体说明,最近在泽西岛发生了变化。。所以
1.10之前:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>6.1.16</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
org.mortbay.jetty
码头
6.1.16
泽西岛
泽西服务器
${jersey.version}
员额1.10:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>6.1.16</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
org.mortbay.jetty
码头
6.1.16
泽西岛
泽西servlet
${jersey.version}
您需要jetty的maven回购协议:
<repositories>
<repository>
<id>codehaus-release-repo</id>
<name>Codehaus Release Repo</name>
<url>http://repository.codehaus.org</url>
</repository>
</repositories>
codehaus解除回购
Codehaus解除回购
http://repository.codehaus.org
这是一个github回购协议,其中基于Maven的HelloWorld示例配置用于主分支上的Grizzly和“Jetty”分支上的Jetty:
尽管有回购协议的名称,但它不是特定于Heroku的。通过运行Procfile中指定的命令启动服务器,例如
$ java -cp "target/dependency/*":target/classes Main
带reaseasy的嵌入式码头,不含web.xml
java代码:
final QueuedThreadPool threadPool = new QueuedThreadPool();
threadPool.setMinThreads(2); // 10
threadPool.setMaxThreads(8); // 200
threadPool.setDetailedDump(false);
threadPool.setName(SERVER_THREAD_POOL);
threadPool.setDaemon(true);
final SelectChannelConnector connector = new SelectChannelConnector();
connector.setHost(HOST);
connector.setAcceptors(2);
connector.setPort(PROXY_SEVLET_PORT);
connector.setMaxIdleTime(MAX_IDLE_TIME);
connector.setStatsOn(false);
connector.setLowResourcesConnections(LOW_RESOURCES_CONNECTIONS);
connector.setLowResourcesMaxIdleTime(LOW_RESOURCES_MAX_IDLE_TIME);
connector.setName(HTTP_CONNECTOR_NAME);
/* Setup ServletContextHandler */
final ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
contextHandler.setContextPath("/");
contextHandler.addEventListener(new ProxyContextListener());
contextHandler.setInitParameter("resteasy.servlet.mapping.prefix","/services");
final ServletHolder restEasyServletHolder = new ServletHolder(new HttpServletDispatcher());
restEasyServletHolder.setInitOrder(1);
/* Scan package for web services*/
restEasyServletHolder.setInitParameter("javax.ws.rs.Application","com.viacom.pl.cprox.MessageApplication");
contextHandler.addServlet(restEasyServletHolder, "/services/*");
final HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { contextHandler });
final Server server = new Server();
server.setThreadPool(threadPool);
server.setConnectors(new Connector[] { connector });
server.setHandler(handlers);
server.setStopAtShutdown(true);
server.setSendServerVersion(true);
server.setSendDateHeader(true);
server.setGracefulShutdown(1000);
server.setDumpAfterStart(false);
server.setDumpBeforeStop(false);
server.start();
server.join();
Web服务检测器:
package com.viacom.pl.cprox;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.viacom.pl.cprox.services.impl.AbstractWebServiceMethod;
public class MessageApplication extends Application {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageApplication.class);
private Set<Object> singletons = new HashSet<Object>();
@SuppressWarnings("rawtypes")
public MessageApplication() {
/* Setup RestEasy */
Reflections reflections = new Reflections("com.viacom.pl.cprox.services.impl");
/*All my web services methods wrapper class extends AbstractWebServiceMethod, so it is easy to get sub set of expected result.*/
Set<Class<? extends AbstractWebServiceMethod>> set = reflections
.getSubTypesOf(AbstractWebServiceMethod.class);
for (Class<? extends AbstractWebServiceMethod> clazz : set) {
try {
singletons.add(clazz.newInstance());
} catch (InstantiationException e) {
LOGGER.error(e.getMessage(), e);
} catch (IllegalAccessException e) {
LOGGER.error(e.getMessage(), e);
}
}
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
package com.viacom.pl.cprox;
导入java.util.HashSet;
导入java.util.Set;
导入javax.ws.rs.core.Application;
导入org.reflections.reflections;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
导入com.viacom.pl.cprox.services.impl.AbstractWebServiceMethod;
公共类MessageApplication扩展了应用程序{
私有静态最终记录器Logger=LoggerFactory.getLogger(MessageApplication.class);
private Set singleton=new HashSet();
@抑制警告(“原始类型”)
公共消息应用程序(){
/*设置容易*/
反射=新反射(“com.viacom.pl.cprox.services.impl”);
/*我所有的web服务方法包装类都扩展了AbstractWebServiceMethod,所以很容易得到预期结果的子集*/
设置我能够在半小时内启动并运行这个maven原型
看
步骤:
非常感谢cb372创建了这个原型。这使它变得如此简单。是的,实际上我正在寻找基于jetty的嵌入式示例,你能指导我吗?好的,回答更新,我可以提供完整的(maven项目)示例(如果需要)。您好,这太棒了这正是我想要的:)但我无法解析所有maven依赖项..您可以发布所有必需的依赖项吗?谢谢帮助:)完成。您将需要jersey客户端等的其他依赖项,但您应该能够轻松解决。您好,我收到以下错误:HTTP错误503访问/helloworld/时出现问题。原因:com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类。原因:javax.servlet.UnavailableException:com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类Es、
package com.viacom.pl.cprox;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.viacom.pl.cprox.services.impl.AbstractWebServiceMethod;
public class MessageApplication extends Application {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageApplication.class);
private Set<Object> singletons = new HashSet<Object>();
@SuppressWarnings("rawtypes")
public MessageApplication() {
/* Setup RestEasy */
Reflections reflections = new Reflections("com.viacom.pl.cprox.services.impl");
/*All my web services methods wrapper class extends AbstractWebServiceMethod, so it is easy to get sub set of expected result.*/
Set<Class<? extends AbstractWebServiceMethod>> set = reflections
.getSubTypesOf(AbstractWebServiceMethod.class);
for (Class<? extends AbstractWebServiceMethod> clazz : set) {
try {
singletons.add(clazz.newInstance());
} catch (InstantiationException e) {
LOGGER.error(e.getMessage(), e);
} catch (IllegalAccessException e) {
LOGGER.error(e.getMessage(), e);
}
}
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>2.2.0.GA</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9-RC1</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.0.3.Final</version>
</dependency>
git clone https://github.com/cb372/jersey-jetty-guice-archetype.git
mvn install
mvn archetype:generate -DarchetypeGroupId=org.birchall \
-DarchetypeArtifactId=jersey-jetty-guice-archetype -DarchetypeVersion=1.0
mvn compile exec:java -Dexec.mainClass=com.yourpackage.Main