使用ejb 3.1,servlet 3.0(glassfish服务器v3)
场景:我有MDB,它监听jms消息并处理其他会话bean(无状态).Servelet注入jms资源.
问题1:为什么servlet在使用静态声明时不能注入jms资源?
@Resource(mappedName = "jms/Tarturus")
private static ConnectionFactory connectionFactory;
@Resource(mappedName = "jms/StyxMDB")
private static Queue queue;
private Connection connection;
Run Code Online (Sandbox Code Playgroud)
和
@PostConstruct
public void postConstruct() {
try {
connection = connectionFactory.createConnection();
} catch (JMSException e) {
e.printStackTrace();
}
}
@PreDestroy
public void preDestroy() {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
[#| 2010-05-03T15:18:17.118 + 0300 |警告| glassfish3.0 | javax.enterprise.system.container.web.com.sun.enterprise.web | _ThreadID = 35; _ThreadName =线程1; | StandardWrapperValve [WorkerServlet]:PWC1382:为servlet WorkerServlet分配异常com.sun.enterprise.container.common.spi.util.InjectionException:在com.sun上为类ua.co.rufous.server.services.WorkerServiceImpl创建托管对象时出错.企业.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:312)位于com.sun.enterprise.web.WebModule的com.sun.enterprise.web.WebContainer.createServletInstance(WebContainer.java:709). createServletInstance(WebModule.java:1937)at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1252)引起:com.sun.enterprise.container.common.spi.util.InjectionException:异常尝试注入未解决的Message-Destination-Ref ua.co.rufous.server.services.WorkerServiceImpl/queue @ …
我一直在努力尝试让我的commandButtons执行一个动作(但奇怪的是,我没有问题从bean中提取数据以包含在我的页面中).甚至在其他地方发布了我的代码并由其他人审核过.到目前为止,没有运气.所以,我想也许是一个不同的机智.任何人都可以向我指出一个项目的非常简单/基本的示例代码,该代码具有能够成功调用动作的commandButton吗?
我需要回滚EJB 3无状态SessionBean(CMT,JBoss版本5),我正在使用它
sessionContext.setRollbackOnly();
Run Code Online (Sandbox Code Playgroud)
使用@Resource注释注入此sessionContext.我的问题:1)是否首选在EJB3中回滚?
2)如果我使用公共setter注入,为什么Jboss会在部署时抱怨
// throws exception on deployment.
private SessionContext sessionContext;
@Resource
public void setSessionContext(SessionContext sessionContext) {
this.sessionContext = sessionContext;
}
Run Code Online (Sandbox Code Playgroud)
但以下工作正常:
@Resource
private SessionContext sessionContext;
Run Code Online (Sandbox Code Playgroud)
以下是第一种情况的例外情况:
javax.ejb.SessionContext is an interface, and JAXB can't handle interfaces.
this problem is related to the following location:
at javax.ejb.SessionContext
at public javax.ejb.SessionContext invoice.sap.service.jaxws.SetSctx.arg0
at invoice.sap.service.jaxws.SetSctx
javax.ejb.SessionContext does not have a no-arg default constructor.
this problem is related to the following location:
at javax.ejb.SessionContext
Run Code Online (Sandbox Code Playgroud) 我是JPA 2.0/EclipseLink/Glassfish/JEE6的新手,有一个基本的问题.
我有一个DAO,其中大多数实体使用JPA注释直接映射到列,所以我使用EntityManager,它没有问题,效果很好.
但是有一些表我自己构建SQL语句b/c他们使用oracle特定的函数(空间),我想要非常细粒度的SQL控制.所以我用字符串连接来构建它.我希望能够在当前事务中注册我的SQL执行,如果有一个已经在进行中.
所以很自然地我不想直接去DriverManager并创建我自己的连接,我正在寻找某种EntityManager.executeArbitrarySQL(String)函数,它可以找到当前连接并使我的SQL成为当前事务的一部分.我是不是摇摇欲坠了?
我正在学习Java EE 6和Jax-RS(还没有开始关于Jax-RS的任何事情)来为我的工作构建一个xml api.我有我的java控制器设置,现在我正在寻找使用我的模型来生成XML输出.我似乎无法通过搜索Google找到任何XML库.有人能指点我正确的方向吗?
EntityManger注入了@PersistenceContext注释。这是我的“ DAO /存储库”类中的一种未注释的方法。此类被注入到需要从数据库获取数据或从数据库获取数据的EJB中。
直到现在,我还认为下面的persist方法完成后,会清除persistencecontext,并将数据存储到数据库中,但是从我应用程序中发生的事情开始,我开始对此表示怀疑。我已经在Glassfish中建立了数据源和连接池,所以据我所知,我正在使用容器管理的事务,但是我不使用任何事务注释。
有人可以帮我照一下吗?
public void persist(QuestionFeedback questionFeedback) {
questionFeedback.setCreated(new Date());
entityManager.persist(questionFeedback);
}
Run Code Online (Sandbox Code Playgroud)
使用Glassfish 3,实现Java EE6兼容性
我正在开发一个Java项目,我的任务是编写一些针对遗留数据库的数据库映射.
在这样做时,我开始质疑我应该如何测试我的映射是否有效.我很可能在我的映射中犯了几个错误,因为我不是一个经验丰富的JPA注释用户.
那么关于通过注释测试手动编写的JPA映射的一般意见/最佳实践是什么?
我正在使用OpenJPA 2.1(实现JPA 2.0)用于命令行实用程序.我正在使用JPA 2.0新增的类.我的编译目标是Java SE 1.6
OpenJPA 2.1附带所有JPA 2.0 javax.persistence.*接口/实现.
我可以声称我的实用程序不依赖于JavaEE 6吗?
我的理解是JavaEE 6是一个标准集合.因此,在任何其他随机标准集方面都没有区别.因此,JavaEE 6依赖于JPA 2.0,但JPA 2.0并不依赖于JavaEE 6,对吗?
我正在尝试使用Arquillian来对抗weblogic 12C.
我将以下配置放在我的pom.xml中
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<version>1.0.0.CR7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.protocol</groupId>
<artifactId>arquillian-protocol-servlet</artifactId>
<version>1.0.0.CR7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<version>1.0.0-beta-5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-wls-remote-12.1</artifactId>
<version>1.0.0.Alpha2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>weblogic</groupId>
<artifactId>wlfullclient</artifactId>
<version>12.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>3.0.0.Final</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后,我将arquillian.xml文件配置如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://jboss.org.schema/arquillian"
xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
<container qualifier="weblogic" default="true">
<configuration>
<protocol type="Servlet 3.0">
<property name="executionType">REMOTE</property>
</protocol>
<property name="adminUrl">t3://localhost:7001</property>
<property name="adminUserName">weblogic</property>
<property name="adminPassword">weblogic1</property>
<property name="target">AdminServer</property>
<property name="wlsHome">c:\java\servers\wls12c\wlserver</property>
</configuration>
</container>
</arquillian>
Run Code Online (Sandbox Code Playgroud)
最后,我试图用Arquillian"创建"一个档案:
JavaArchive ejbArchive = ShrinkWrap.create(JavaArchive.class,"jee6app-ejb.jar").addAsResource("META-INF/persistence.xml","META-INF/persistence.xml").addPackages(false,Adr.class.getPackage(),Service.class.getPackage());
EnterpriseArchive earArchive = …Run Code Online (Sandbox Code Playgroud) 我什么时候需要在web.xml中包含以下代码段才能激活Jersey?
<servlet>
<servlet-name>Jersey App</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.company.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)
是App.如果Jersey默认激活或需要此web.xml条目,则依赖于服务器?
如果是应用程序.服务器不需要上面的代码,我可以配置servlet映射路径,如:
<servlet-mapping>
<servlet-name>Jersey App</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)