我正在研究Java EE 6应用程序.当我开始时,我通过手动实例化EJB,然后手动添加通常由依赖注入提供的成员来为我的EJB类编写测试.随着应用程序变得越来越复杂,我发现这种方法并没有削减它.所以我希望能够在测试框架中启动自己的EJB容器,这样它就可以管理我的bean.什么是最好的方法来解决这个问题?我听说过javax.ejb.embeddable.EJBContainer,还有其他选择吗?
(我正在使用Glassfish 3,并使用Maven构建,如果这有任何区别.)
任何人都可以告诉我,目前是否可以通过Jetty"粘合"部分Java EE 6 Web配置文件?我发现了很多关于将独立EJB 3容器,JTA提供程序等与旧Jetty版本集成的文章,所以如果我可以将它们全部一起工作,我就会更加努力.我想组装一个Servlet 3.0 + CDI + EJB 3.1 + JTA(如果需要,我真正想要的是声明式事务管理)+ Jetty 8上的JPA 2环境(如果没有可用的Jetty替代品,则为Tomcat 7).我的问题是:可以做到吗?有人设法做到了吗?有关将OpenEJB,Atomikos,Weld,EclipseLink和Jetty(或任何其他类似的堆栈)协同工作的任何文章?有没有神奇的"全部"pom.xml文件?
PS:是的,我知道我可以使用GlassFish(我非常喜欢).我只是想知道使用Servlet容器做类似工作有多难,以及两个环境在复杂性,性能,大小,部署速度,硬件资源消耗等方面的比较.
我得到一个例外
object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例
抛出以下代码:
public void addThing(String key, String someData) {
Thing thing = new Thing();
booking.setData(someData);
booking.setParent(this);
bookings.put(key, thing);
}
Run Code Online (Sandbox Code Playgroud)
Parent映射是:
@ElementCollection(fetch=FetchType.EAGER)
@Column(name="thing", nullable=false)
@MapKeyColumn(name="key")
@JoinColumn(name="parent_id")
protected Map<String, Thing> things = Maps.newHashMap();
Run Code Online (Sandbox Code Playgroud)
孩子('Thing')映射是:
@ManyToOne
private Parent parent;
Run Code Online (Sandbox Code Playgroud)
根据Hibernate手册:
a上没有级联选项
ElementCollection,目标对象始终与父级一起保持,合并,删除.
但是 - 在我更改为新@ElementCollection映射之前解决了一个问题,即我为查询返回了明显的幻像元素,这段代码工作正常.
我知道我可以单独保存元素然后做一个引用,但我更喜欢自动完成它,我认为这是它应该工作的方式.有任何想法吗?
我有很多配置文件可以修改我的应用程序的行为方式.我希望能够进行更改,并在保存文件时立即反映在应用程序中.有没有Java库来帮助解决这个问题?
我可以简单地保存一个带有时间戳的文件列表,并在时间戳发生变化时不断检查后台线程.似乎并不太难,但也许有更有效的方法来做到这一点?某些属性更改后的自定义触发器会很好.
我使用的是Spring 3.1,是否有内置的机制或解决方案可以很好地与Spring配合使用?
更新:显然JDK7现在通过其 Watch Service API包含此功能:"大多数文件系统实现都具有对文件更改通知的本机支持.Watch Service API利用此支持(如果可用).但是,当文件系统不支持此机制时,Watch Service将轮询文件系统,等待事件." 所以这是我迁移到JDK7的动力.
新的JSR 299"Java EE的上下文和依赖注入"似乎基于"范围"的概念.
创建bean并将其与受支持的Scope之一相关联:Application,Session(映射到HTTP会话),Conversation和Request.
如果没有HTTP会话(例如,通过EJB远程公开功能的企业应用程序),使用CDI是否有意义,因为托管Bean不会与任何上下文相关联(因为它们不存在)?
在这种情况下甚至可以使用CDI吗?它会带来哪些优势?
我想在数据库中保存大附件(500Mb,如果可能,甚至> 2Gb).我知道这样做的利弊经常被讨论,但这不是我的问题的焦点.
使用JPA在EJB3中存储Blob字段的传统方法是使用如下代码:
@Lob
private byte[] data;
Run Code Online (Sandbox Code Playgroud)
处理大量数据源时会出现问题,因为整个字节数组都保存在内存中.
我试图将其更改为Blob:
@Lob
private Blob data;
Run Code Online (Sandbox Code Playgroud)
但这会导致同样的问题.打电话的时候
// session: Hibernate session.
// Actually, I'd like to stay with JPA's abstraction and not
// reference Hibernate directly, if possible
Blob data = session.createBlob(inputStream, lengthOfStream);
Run Code Online (Sandbox Code Playgroud)
createBlob方法从inputStream创建一个byteArray.
由于ORM映射,我也想知道如何处理数据的插入.一个想法是创建一个实体变量
@Lob
private byte[] data;
Run Code Online (Sandbox Code Playgroud)
我永远不会用.这样,数据库模式就可以构建了.但是因为@Lob注释是懒惰的,所以它不会让我的记忆膨胀.
然后写
entityManager.persist(dataObject);
// The following lines are _completely_ imaginatory!!
query.prepare("update DataObject d set d.data = :dataInputStream where d = :dataObject");
query.setProperty("dataObject", dataObject);
query.setProperty("dataInputStream", someDataInputStream);
Run Code Online (Sandbox Code Playgroud)
我偶然发现的一个解决方案看起来不错,但是没有使用JPA: Grooviest方法将BLOB存储在数据库中?
有人建议怎么做吗?
所以下面的问题:我们有一个负载均衡器,后面有n个服务器.在每个服务器上都安装了一个PDF项目(war)以及同一个earfile中的pdf-builder项目(不同的战争).我现在想从另一场战争中读取一个pdf.
问题是:我不知道我正在运行的服务器的IP地址并使用dns查找我可能通过loadbalancer在不同的服务器上结束.此外,访问/安全性约束可能存在问题,因为服务器本身不是有权访问pdf war项目的pdf文件位置的有效用户.
有没有办法获得类似getResourceAsStream()的东西,它可以在耳内的不同模块/ war文件中运行?
我有一个可以在tomcat中部署的Web应用程序,但是相同的应用程序没有在websphere 8.5.5中启动.我检查了SystemErr.log文件,它提供了以下信息,我无法调试为什么应用程序没有启动.如果我想更多地了解问题,我需要做什么.
Application Server版本:Websphere 8.5.5
Java版本:java版"1.7.0_25"
OpenJDK运行时环境(rhel-2.3.10.4.el6_4-x86_64)
[12/30/13 12:43:01:144 CET] 000000ab SystemErr R Caused by: com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: Failed to load webapp: Failed to load webapp: Context root /* is already bound. Cannot start application My Application
[12/30/13 12:43:01:149 CET] 000000ab SystemErr R at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:759)
[12/30/13 12:43:01:149 CET] 000000ab SystemErr R at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:634)
[12/30/13 12:43:01:149 CET] 000000ab SystemErr R at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:426)
[12/30/13 12:43:01:149 CET] 000000ab SystemErr R ... 93 more
[12/30/13 12:43:01:149 CET] 000000ab SystemErr R Caused by: com.ibm.ws.webcontainer.exception.WebAppNotLoadedException: Failed to load …Run Code Online (Sandbox Code Playgroud) 在提出我的问题之前,只是关于EJB3.1异常的一些背景知识 -
应用程序例外包括
用户定义已检查或未检查的具有@ApplicationException批注的异常
所有已检查的例外
java.lang.Exception及它的子类异常,
除了java.rmi.RemoteException及它的子类异常
系统例外包括
java.rmi.RemoteException和它的子类异常
所有未经检查的例外情况
java.lang.RuntimeException和它的子类异常
java.lang.Error及它的子类异常
以下是我在本书中读到的声明
在EJB系统中,客户端不会例外,当遇到此类异常时,这些异常不会按原样传递给客户端,而是在javax.ejb.EJBException中包含.
我的问题 -
在许多在线 Web 应用程序中,我注意到应用程序 url 以 jspa 结尾。我的假设是它是一个 jsp 并且动作被映射到 jspa 而不是 *.do。
我的理解是正确的还是有实际的扩展/不同的含义?如果这个问题非常基本,请建议并忽略。我已经用谷歌搜索了,无法得到明确的答案。