我正在制作一个基于Java EE的产品,我正在使用GlassFish 3和EJB 3.1.
我的应用程序有会话bean,调度程序和使用Web服务.我最近了解了Apache TomEE,它支持上下文和依赖注入(CDI).GlassFish容器也支持CDI.
我可以替换会话bean,我不需要任何CDI也没有提供的功能吗?如果那样的话,我能得到什么好处?
我们构建3层企业解决方案,通常由几个webapp和ejbjar模块组成,这些模块都与数据库通信并具有多个外部集成点.
每个模块通常都需要自己的配置,可以改变解决方案的生命周期.部署它变成了一场噩梦,因为现在我们有18个属性文件,必须记住这些文件才能复制并配置为设置数据源,队列,内存要求等.
我希望能有更好的方式,但不乐观.我们考虑/使用的一些选项,每个选项都有它的优点和缺点:
有了所有这些,你仍然需要以容器特定的方式配置数据源和队列等:(
我正在使用EJB 3.0开发一个简单的应用程序,使用OpenEJB进行部署,将Eclipse作为IDE.
我在Eclipse中将项目创建为"动态Web应用程序".当我尝试创建第一个无状态会话bean时,我意识到无法解析@Remote注释.
解决这个问题的正确方法是什么?
谢谢你的帮助.
更新: 我找到了答案.
TomEE的安装有一个目录,其中包含编译和运行EJB'apache-tomee-webprofile-1.0.0-beta-2/webapps/openejb/lib'所需的所有jar文件
我在Eclipse中创建了一个用户库,其中包含上述lib文件夹中的所有jar文件,并将其添加到构建路径中.
EJB接口现在可以正确编译.
我正在升级使用Jersey JAX-RS在Apache TomEE服务器上运行的代码.不幸的是,当我尝试将Jersey与TomEE一起使用时,它会抛出错误.
我正在使用eclipse并打开了JAX-RS项目方面.它指向泽西图书馆.我还将Jersey库移动到/ lib /目录中以尝试解决问题无济于事.服务器抛出以下错误:
May 14, 2012 6:26:44 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Provider classes found:
class org.codehaus.jackson.jaxrs.JsonParseExceptionMapper
class org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider
class org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper
class org.codehaus.jackson.jaxrs.JacksonJsonProvider
May 14, 2012 6:26:44 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.RuntimeException: javax.naming.NameNotFoundException: Name [com] is not bound in this Context. Unable to find [com].
at com.sun.jersey.server.impl.cdi.CDIExtension.getInitializedExtension(CDIExtension.java:177)
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactory.<init>(CDIComponentProviderFactory.java:92)
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactoryInitializer.initialize(CDIComponentProviderFactoryInitializer.java:75)
at com.sun.jersey.spi.container.servlet.WebComponent.configure(WebComponent.java:576)
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.configure(ServletContainer.java:311)
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:608)
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1266)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1185)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1080)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5015)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5302)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) …Run Code Online (Sandbox Code Playgroud) 我最近在"Red Hat Enterprise Linux Server(6.6)"上安装了"apache-tomee-webprofile-1.7.2".
我可以通过访问xxxx:8080来访问Tomcat主页,通过这个,我可以访问"服务器状态","管理器应用程序"和"主机管理器"页面.但是,当我访问"TomEE GUI"页面时,我收到"错误404:描述所请求的资源不可用".页.
从我所看到的Tomee运行时,当我访问"管理应用程序"页面时,"/ tomee"就在那里,它的运行状态为真.
我是TomEE的新手,所以可能有一个我错过/完成错误的步骤.所以任何有关如何使这项工作的帮助都会很棒.
我不确定哪个代码与此问题相关,所以请告诉我哪些配置会有所帮助,我会发布它.
我创建了一个非常简单的应用程序,使用持久化上下文(hibernate as provider)从数据库中读取一些值.我将Eclipse与Maven一起使用.
首先,我明白了
Caused by: org.apache.openejb.OpenEJBException: java.lang.ClassCastException: org.hibernate.ejb.HibernatePersistence cannot be cast to javax.persistence.spi.PersistenceProvider:
Run Code Online (Sandbox Code Playgroud)
并根据这个主题 http://openejb.979440.n4.nabble.com/problem-with-hibernate-persistence-provider-td980429.html 我排除了hibernate-jpa-2.0-api.现在,我的依赖项看起来
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.1.3.Final</version>
<exclusions>
<exclusion>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
现在,我不知道为什么......
Caused by: java.lang.ClassNotFoundException: org.hibernate.transaction.TransactionManagerLookup
Run Code Online (Sandbox Code Playgroud)
但是TransactionManagerLookup处于hibernate核心.请问,任何人都可以告诉我,在TomEE中如何看待pom.xml使用hibernate?
摘要
我正在尝试运行Java Web应用程序JPA 2.0示例.该示例应用程序被写入到运行Glassfish,使用EclipseLink作为JPA提供商.我想将其转换为运行在TomEE与OpenJPA作为JPA提供者,但我不能为起床,并与正在运行的任何详细的教程OpenJPA.
问题
我很难转换persistence.xml到工作OpenJPA而不是EclipseLink.更具体地说,给定的persistence.xml未指定:
Entity类.这些必要吗?也:
细节
以下是EclipseLink persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="order" transaction-type="JTA">
<jta-data-source>jdbc/__default</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="both" />
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
我有以下Entity课程:
order.entity.LineItemorder.entity.LineItemKeyorder.entity.Orderorder.entity.Partorder.entity.PartKeyorder.entity.Vendororder.entity.VendorPart题
我有一个带有战争规范的子项目,如下所示:
war {
from('resources') {
include '*.properties'
into 'WEB-INF/classes/'
}
webXml = file('src/main/webapp/WEB-INF/web.xml')
}
Run Code Online (Sandbox Code Playgroud)
效果很好.创建可部署到Tomcat的单个胖战文件.问题是,当部署到TomEE和JBoss时,我遇到了冲突(即使用Javax Servlet,Jersey等).所以我想排除一组罐子的战争.我查看了Gradle war文档,看起来我需要使用排除.我尝试了两种不同的方式,并没有将战争中的罐子排除在外:
war {
// copy properties file in classes so that
// they may be loaded from classpath
from('resources') {
include '*.properties'
into 'WEB-INF/classes/'
}
// specify web xml
webXml = file('src/main/webapp/WEB-INF/web.xml')
// remove jars that conflict with TomEE
exclude '**/javax.inject-1.jar'
exclude '**/javax.servlet-2.5.0.v201103041518.jar'
exclude '**/servlet-api-2.5.jar'
exclude '**/validation-api-1.0.0.GA.jar'
}
Run Code Online (Sandbox Code Playgroud)
这是在github上托管的NetFlix/karyon项目中的子项目(karyon-examples)中.子项目中的依赖项如下所示:
dependencies {
compile 'org.slf4j:slf4j-api:1.7.0'
runtime 'org.slf4j:slf4j-simple:1.7.0'
compile project(':karyon-extensions')
compile project(':karyon-admin-web')
}
Run Code Online (Sandbox Code Playgroud)
我希望避免编辑诸如编译与运行时依赖之类的内容,尤其是在其他文件和子项目中.事实上,我试图在上面排除的罐子在使用码头和常规tomcat运行时是良性的.
我只想在不使构建脚本复杂化的情况下排除这些jar.我错过了什么?
谢谢
我知道Apache TomEE是一个常规的Tomcat安装,openejb是一个web应用程序.
我试图了解这一切是如何引导的.我会尝试提出几个有问题的问题:
任何其他重要信息.
使用库存TomEE +,我无法获得简单的JAX-RS资源.我不断得到一个错误:
Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher
WARNING: No resource methods have been found for resource class com.tensorwrench.test.BaseResource
Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher
WARNING: No resource methods have been found for resource class com.tensorwrench.test.BaseResource
Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.utils.ResourceUtils checkMethodDispatcher
WARNING: No resource methods have been found for resource class com.tensorwrench.test.BaseResource
Jun 30, 2012 5:09:59 PM org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean checkResources
SEVERE: No resource classes found
Jun 30, 2012 5:09:59 PM org.apache.catalina.startup.HostConfig deployWAR
SEVERE: Error deploying web application …Run Code Online (Sandbox Code Playgroud)