This code works except for the flush.  The flush does not commit the updates to 
the database. Specifically, I want to update the status in the Fetcher.transfer 
method. However, the status does not get updated to "RUNNING". It only gets 
updated to "COMPLETE" once the fetcher is done.  I thought maybe moving the 
entity manager outside the Watcher and Fetcher might fix this issue. So, I 
created a ConversionFileDAO which I tried to use in the code below, but I get a 
namenotfoundexception. I of course commented out the em method calls when I did 
this.

Watcher.java 

@Stateless 
@Clustered 
public class Watcher 
implements WatcherIntLocal, WatcherIntRemote 
{ 

@Resource 
private SessionContext context; 
@PersistenceContext (unitName="WatcherDB") 
private EntityManager em; 


public void checkForNewFiles() throws WatcherException 
{ 
try 
{ 
List validFiles = findValidFiles(); 
addToQueue(validFiles); 

} 
catch (Throwable e) 
{ 
e.printStackTrace(); 
throw new WatcherException(e); 
} 
} 

public List findValidFiles() throws WatcherException 
{ 
//iterate thru a list of files and search for certain extensions 
//if the file name matches those extensions, call insert 
} 

public void insert(File file) 
{ 
////  THIS DOES NOT WORK. get a namenotfoundexception
//InitialContext ctx = new InitialContext();
//ConversionFileDAORemote dao = (ConversionFileDAORemote) 
ctx.lookup("ConversionFileDAO/remote");
//dao.insert(file);

em.persist(file); 

//FLUSH DOES NOT WORK. the file is persisted to the db, but only after the 
watcher is done. this causes the fetcher to get an exception b/c sometimes it 
can't find the entry in the db
em.flush(); 
} 

public void addToQueue(List validFiles) throws WatcherException 
{ 
// iterate thru files 
//create a TextMessage using the file name 
//send the message 
} 
} 


================================== 
Fetcher.java 

public class Fetcher 
implements MessageListener 
{ 

@Resource 
private MessageDrivenContext context; 

@PersistenceContext (unitName="WatcherDB") 
private EntityManager em; 

public void onMessage(Message arg0) { 

String fileName = ((TextMessage)arg0).getText(); 
File remoteFile = (File)em.createQuery("from File where 
fileName=:filename").setParameter("filename",fileName).getSingleResult(); 

transfer(remotefile,localfile); 

remoteFile.setStatus("COMPLETE"); 
em.merge(remoteFile); 
em.flush(); 


} 

public void transfer(File remoteFile, File localFile) 
{ 

////  THIS DOES NOT WORK. get a namenotfoundexception
//InitialContext ctx = new InitialContext();
//ConversionFileDAORemote dao = (ConversionFileDAORemote) 
ctx.lookup("ConversionFileDAO/remote");
//dao.update(file);

remoteFile.setStatus("RUNNING"); 

em.merge(remoteFile); 
//THIS DOES NOT WORK - status of running does not get updated to the db
em.flush(); 
} 

}

=============================
public class ConversionFileDAO implements ConversionFileDAORemote
{

@PersistenceContext (unitName="WatcherDB") 
private EntityManager em; 

public insert(ConversionFile file)
{
em.persist(file);
em.flush();
}

public update(ConversionFile file)
{
em.merge(file);
em.flush();
}

public getConversionFile(String fileName)
{
ConversionFile currFile = null;

 try {
        currFile = (ConversionFile)em.createQuery("from ConversionFile where 
fileName=:filename").setParameter("filename", fileName).getSingleResult();
} 
catch (NoResultException e1) 
{
                                
}

return file;
}
}
                


View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4130762#4130762

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4130762
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to