我在注释对象中设置一对多关系时遇到问题.
我有以下内容:
@MappedSuperclass
public abstract class MappedModel
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id",nullable=false,unique=true)
private Long mId;
Run Code Online (Sandbox Code Playgroud)
那么这个
@Entity
@Table(name="customer")
public class Customer extends MappedModel implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -2543425088717298236L;
/** The collection of stores. */
@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<Store> stores;
Run Code Online (Sandbox Code Playgroud)
还有这个
@Entity
@Table(name="store")
public class Store extends MappedModel implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -9017650847571487336L;
/** many stores have a single …Run Code Online (Sandbox Code Playgroud) 遇到JSF填补我们会话的问题.前几天我们遇到了系统崩溃.发送堆给IBM进行审核,发现我们有一些大到50M的会话.他们在会话中发现了JSF组件,而且有些非常大.
那么,有没有可以完成的调整?配置项看看?或其他方向.
我们的系统是使用JSF和Spring为表示层构建的,后端是EJB,Spring和Hibernate都在WebSphere 6.1上运行.
我在网上和stackoverflow中做了一些搜索,看看如何处理我在其中一个屏幕上看到的以下消息:
无法将类型[java.lang.String]的属性值转换为属性'qtyToShip'的必需类型[java.lang.Long]; 嵌套异常是java.lang.IllegalArgumentException:无法解析数字:Unparseable number:"a"
通过研究和查看网页,我假设将以下内容添加到我的errors.properties文件中会产生所需的结果:
typeMismatch.shippingCommand.qtyToShip=1. Invalid value for Qty To Ship, accepts only numbers.
typeMismatch.qtyToShip=2. Invalid value for Qty To Ship, accepts only numbers.
shippingCommand.qtyToShip=3. Invalid value for Qty To Ship, accepts only numbers.
qtyToShip=4. Invalid value for Qty To Ship, accepts only numbers.
typeMismatch.java.lang.NumberFormatException=5. Invalid value for {0}, accepts only numbers.
typeMismatch.java.lang.Integer=Must specify an integer value.
typeMismatch.java.lang.Long=Must specify an integer value.
typeMismatch.java.lang.Float=Must specify a decimal value.
typeMismatch.java.lang.Double=Must specify a decimal value.
typeMismatch.int=Invalid number entered
typeMismatch=Invalid type entered
Run Code Online (Sandbox Code Playgroud)
我在消息中添加整数值以确定哪一个会显示. …
我正在评估FindBugs并尝试使用excludeFilter,以便该工具不处理测试包或生成的ejb存根.
我尝试过以下方法:
<FindBugsFilter>
<!-- Match any test packages -->
<Match>
<Package name="~.*\.test"/>
</Match>
<Match>
<Or>
<Class name="~.*\.^_*"/>
<Class name="~.*EJS*"/>
</Or>
<Bug pattern="MALICIOUS_CODE"/>
</Match>
Run Code Online (Sandbox Code Playgroud)
生成的EJB仍然在被查看.有人可以为此提供更好的指导.
我想排除所有以"_"开头的类
例:
COM/myCompany中/业务/管理/ EJB/_AdminRemoteHome_Stub.java
COM/myCompany中/业务/管理/ EJB/_EJSRemoteStatelessAdminHome_054d51b9_Tie.java
更新过滤文件.
我使用建议的regx更改将过滤器文件更改为以下结构,现在事情按预期工作:
<FindBugsFilter>
<!-- Match any test packages -->
<Match>
<Package name="~.*\.test"/>
</Match>
<Match>
<Class name="~.*\._.*"/>
</Match>
<Match>
<Class name="~.*?EJS.*"/>
</Match>
Run Code Online (Sandbox Code Playgroud)
看起来我需要回去刷新我的regx.
看来我们使用Quartz-JDBCJobStore以及Spring,Hibernate和Websphere的实现抛出了非托管线程.
我做了一些阅读,发现了一篇来自IBM的技术文章,指出使用Quartz with Spring会导致这种情况.他们建议使用CommnonJ来解决这个问题.
我做了一些进一步的研究,到目前为止我见过的唯一例子都涉及不在数据库中的旧JobStore计划.
所以,我想知道是否有人有这个问题的解决方案的例子.
谢谢
有没有办法可以从WAS导出我的服务器设置(在RAD 6下运行),以便其他开发人员能够使用相同的脚本来设置他们的环境?
所有,
我正在研究如何缩减我们的JSF应用程序在每个用户基础上消耗的会话内存量.
我们正在使用在IBM Websphere 7.0补丁19上运行的MyFaces 1.1.7和Tomahawk 1.1.5.(目前无法升级其中任何一项)
IBM的指导原则是会话大小应该小于5k - 平均大约2.5k,以免影响服务器和会话复制的性能.我们目前正在使用内存到内存,但正在考虑按照IBM的建议迁移到数据库.
我们的网站每个用户的运行速度约为35M.我们将视图状态的数量从100更改为10,并将其降低到大约4M.
我们有几个支持bean,它们当前是会话范围,并且正在考虑将它们更改为请求范围.
我还发现了以下内容:http: //www.econsulting.nl/images/pdf/Tuning%20JSF%20Applications-%20J-Spring%202008.pdf,它似乎有很多关于JSF如何处理某些内容的信息页面.目前仍在调查中以确保所述内容有意义.
我还读过一些地方,无论托管支持bean是会话还是请求范围,视图状态仍将具有bean及其内容.因此视图状态大小不会改变.寻求对此的澄清.
问题是其他人面临同样的问题,其中JSF应用程序往往为给定的用户会话消耗大量内存?
有什么减少这个大小的最佳实践,如果有的话,或者这只是使用JSF的方式?
运行JSF应用程序时IBM WebSphere上的会话复制问题?
有没有关于JSF/MyFaces如何利用堆内存的文档 - Young vs old还是应该在这个范围内考虑?垃圾收集调整?
我们看到的结果是,如果用户跳到另一台服务器,会话数据不会出现,因为数据有多大以及复制需要多长时间.用户体验问题.
我们已经看到一个问题,即会话中对象的更改似乎没有正确更新,并且已经完成了一些会话管理调优,我们在其中自定义设置以便写出所有会话属性.查看.jar文件时,当会话中对象的内容发生更改时,myFaces会正确地进行调用.因此,WebSphere会话侦听器应该接受该更改.
我试图从我的应用程序加载libs而不是JBoss附带的问题时遇到了一些问题.
我试图在我的应用程序中使用最新和最好的SLF4J,并且这样做我收到以下消息:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [vfszip:/C:/devtools/workspace/g2/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_5.1_Runtime_Server1302541739184/deploy/ecotrakEar.ear/ecotrak.war/WEB-INF/lib/slf4j-log4j12-1.6.1.jar/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [vfszip:/C:/devtools/jboss-5.1.0.GA/common/lib/slf4j-jboss-logging.jar/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我在WAR lib目录中有以下jar:
我的项目部署为带有WAR的EAR.所有库都驻留在WAR中.
根据一些研究,有人建议为JBoss 5.1创建一个jboss-classloading.xml文件.我为我的EAR创建了一个:
<classloading xmlns="urn:jboss:classloading:1.0"
name="ecotrak.ear"
domain="ecotrak.ear"
export-all="NON_EMPTY"
import-all="true"
parent-first="false">
</classloading>
Run Code Online (Sandbox Code Playgroud)
这标识了首先加载EAR文件.
我还为我的WAR创建了一个:
<classloading xmlns="urn:jboss:classloading:1.0"
name="ecotrak.war"
domain="ecotrak.war"
parent-domain="ecotrak.ear"
top-level-classloader="true"
export-all="NON_EMPTY"
import-all="true"
parent-first="true">
</classloading>
Run Code Online (Sandbox Code Playgroud)
使用此配置,我在启动日志中收到以下错误:
11:18:07,949 ERROR [[/ecotrak]] Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.trace(SLF4JLocationAwareLog.java:107)
Run Code Online (Sandbox Code Playgroud)
在JBoss之前加载来自我项目的jar的正确方法是什么?
我有以下课程:
@MappedSuperclass
public abstract class MappedModel
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false, unique = true)
private Long mId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "rec_created_dtm", nullable = false, updatable = false)
private Date recordCreatedDTM;
@Column(name = "rec_cre_user_id", nullable = true, updatable = false)
private Long recordCreatedUserId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "last_update_dtm", nullable = false)
private Date lastUpdateDTM;
@Column(name = "last_update_user_id", nullable = true)
private Long lastUpdateUserId;
// @PrePersist
// protected void onCreate()
// {
// this.lastUpdateDTM = this.recordCreatedDTM = …Run Code Online (Sandbox Code Playgroud) 使用命名查询和我们拥有的查询有什么好处吗?看性能,可用性,可维护性等等....
在我们的应用程序中,我们已经定义了如下查询:
private static final String SELECT_CODE_FOR_STORE = "select DISTINCT code from Code code "
+ "join code.codeDescriptions codeDesc "
+ "join codeDesc.stores store where store.id =:"
+ DataAccessConstants.PARAM_STORE_ID;
Run Code Online (Sandbox Code Playgroud)
(这些都放在DAO对象中,其中有很多.)
我们通过以下方式调用上述内容:
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("storeId", codeDescriptionSearchCriteria.getStoreId());
List<Code> list = getJpaTemplate().findByNamedParams(
SELECT_CODE_FOR_STORE, paramMap);
return list;
Run Code Online (Sandbox Code Playgroud)
这不过是:
public List findByNamedParams(final String arg0,
final Map<String,
? extends Object> arg1) throws DataAccessException
{
return org.springframework.orm.jpa.JpaTemplate.findByNamedParams(arg0, arg1);
}
Run Code Online (Sandbox Code Playgroud)
与使用相比
@NamedQuery(name="SELECT_CODE_FOR_STORE", query="select ......")
Run Code Online (Sandbox Code Playgroud)
我们的DAO对象的顶部.
我看到这个帖子似乎是组织所有这些查询的好方法.或者,如果我们有这么多类型的查询,也许是时候重新评估我们的数据库和对象结构了.
java ×6
hibernate ×4
websphere ×3
annotations ×2
jsf ×2
performance ×2
classloader ×1
data-binding ×1
findbugs ×1
jboss ×1
jpa ×1
myfaces ×1
orm ×1
scripting ×1
session ×1
spring ×1
spring-mvc ×1